Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
Schița de curs
Introducere
- Ce este OpenCL?
- OpenCL vs CUDA vs SYCL
- Prezentare generală a caracteristicilor și arhitecturii OpenCL
- Configurarea Mediei de Dezvoltare
Începuturi
- Crearea unui nou proiect OpenCL folosind Visual Studio Code
- Explorarea structurii și fișierelor proiectului
- Compilarea și rularea programului
- Afișarea iesirilor folosind printf și fprintf
API-ul OpenCL
- Înțelegerea rolului API-ului OpenCL în programul gazdă
- Utilizarea API-ului OpenCL pentru a interoga informațiile și capacitatea dispozitivului
- Utilizarea API-ului OpenCL pentru crearea de contexte, cozile de comenzi, buferele, nucleele și evenimentele
- Utilizarea API-ului OpenCL pentru a encoada comenzi precum citirea, scrierea, copierea, maparea, demaparea, executarea și așteptare
- Utilizarea API-ului OpenCL pentru gestionarea erorilor și excepțiilor
OpenCL C
- Înțelegerea rolului OpenCL C în programul dispozitivului
- Utilizarea limbajului OpenCL C pentru a scrie nucleele care se execută pe dispozitiv și manipulează datele
- Utilizarea tipurilor de date, calificatorilor, operatorilor și expresiilor din OpenCL C
- Utilizarea funcțiilor încorporate ale limbajului OpenCL C, precum matematica, geometrică, relațională etc.
- Utilizarea extensiilor și bibliotecilor din OpenCL C, cum ar fi atomic, imagine, cl_khr_fp16 etc.
Modelul de Memorie OpenCL
- Înțelegerea diferenței dintre modelele de memorie gazdă și dispozitiv
- Utilizarea spațiilor de memorie ale lui OpenCL, cum ar fi global, local, constant și privat
- Utilizarea obiectelor de memorie din OpenCL, cum ar fi buferele, imaginile și pipe-urile
- Utilizarea modurilor de acces la memorie ale lui OpenCL, precum doar citire, doar scriere, citire și scriere etc.
- Utilizarea modelului de consistentă a memoriei și mecanismelor de sincronizare din OpenCL
Modelul de Execuție OpenCL
- Înțelegerea diferenței dintre modelele de execuție gazdă și dispozitiv
- Utilizarea elementelor de lucru, grupurilor de lucru și a intervalului ND pentru a defini paralelismul
- Utilizarea funcțiilor ale elementelor de lucru din OpenCL, cum ar fi get_global_id, get_local_id, get_group_id etc.
- Utilizarea funcțiilor grupului de lucru din OpenCL, cum ar fi barrier, work_group_reduce, work_group_scan etc.
- Utilizarea funcțiilor dispozitivului din OpenCL, cum ar fi get_num_groups, get_global_size, get_local_size etc.
Depanare
- Înțelegerea erorilor și bugurilor comune din programele OpenCL
- Utilizarea debugger-ului de la Visual Studio Code pentru a inspecta variabile, puncte de oprire, stiva apelurilor etc.
- Utilizarea CodeXL pentru depunerea și analiza programele OpenCL pe dispozitive AMD
- Utilizarea Intel VTune pentru depunerea și analiza programele OpenCL pe dispozitive Intel
- Utilizarea NVIDIA Nsight pentru depunerea și analiza programele OpenCL pe dispozitive NVIDIA
Optimizare
- Înțelegerea factorilor care afectează performanța programelor OpenCL
- Utilizarea tipurilor de date vectoriale și tehnicile de vectorizare din OpenCL pentru a îmbunătăți fluxul aritmetic
- Utilizarea tehnicii de desfășurare a buclilor și tiling al buclilor din OpenCL pentru a reduce suprapunerea controlului și a crește localitatea
- Utilizarea memoriei locale și funcțiilor din memoria locală din OpenCL pentru a optimiza accesurile la memorie și bandă de transport
- Utilizarea instrumentelor de profilare și tehnicii de profilare din OpenCL pentru a măsura și îmbunătăți timpul de execuție și utilizarea resurselor
Recapitulare și Următoarele Pași
Cerințe
- Oțel de cunoaștere cu limbajul C/C++ și conceptele de programare paralelă
- Cunoașteri de bază despre arhitectura computerelor și hierarhia memoriei
- Experiență cu instrumente linie de comandă și editoare de cod
Publicul-țintă
- Dezvoltatori care doresc să învețe cum să folosească OpenCL pentru a programa dispozitive heterogene și să exploateze paralelismul acestora
- Dezvoltatori care doresc să scrie cod portable și scalabil care poate rula pe diferite platforme și dispozitive
- Programatori care doresc să exploreze aspectele la nivel scăzut ale programării heterogene și să optimizeze performanța codului lor
28 ore