Mulțumim pentru trimiterea solicitării! Un membru al echipei noastre vă va contacta în curând.
Mulțumim pentru trimiterea rezervării! Un membru al echipei noastre vă va contacta în curând.
Schița de curs
Introducere
- Ce este OpenCL?
- OpenCL vs CUDA vs SYCL
- Prezentare generală a caracteristicilor și arhitecturii OpenCL
- Configurarea mediului de dezvoltare
Începutul
- Crearea unui nou proiect OpenCL folosind Visual Studio Code
- Explorarea structurii și fișierelor proiectului
- Compilarea și rularea programului
- Afișarea rezultatului folosind printf și fprintf
API OpenCL
- Înțelegerea rolului API-ului OpenCL în programul gazdă
- Utilizarea API-ului OpenCL pentru a interoga informații și capacități despre dispozitiv
- Utilizarea API-ului OpenCL pentru a crea contexte, cozi de comenzi, buffere, nuclee și evenimente
- Utilizarea API-ului OpenCL pentru a adăuga comenzi în coadă, cum ar fi citire, scriere, copiere, mapare, demapare, execuție și așteptare
- Utilizarea API-ului OpenCL pentru a gestiona erori și excepții
OpenCL C
- Înțelegerea rolului OpenCL C în programul dispozitivului
- Utilizarea OpenCL C pentru a scrie nuclee care se execută pe dispozitiv și manipulează date
- Utilizarea tipurilor de date, calificatoarelor, operatorilor și expresiilor OpenCL C
- Utilizarea funcțiilor încorporate OpenCL C, cum ar fi cele matematice, geometrice, relaționale, etc.
- Utilizarea extensiilor și bibliotecilor OpenCL C, cum ar fi atomic, image, cl_khr_fp16, etc.
Modelul de Memorie OpenCL
- Înțelegerea diferenței dintre modelele de memorie ale gazdei și dispozitivului
- Utilizarea spațiilor de memorie OpenCL, cum ar fi global, local, constant și privat
- Utilizarea obiectelor de memorie OpenCL, cum ar fi buffere, imagini și pipe-uri
- Utilizarea modurilor de acces la memorie OpenCL, cum ar fi read-only, write-only, read-write, etc.
- Utilizarea modelului de consistență a memoriei și a mecanismelor de sincronizare OpenCL
Modelul de Execuție OpenCL
- Înțelegerea diferenței dintre modelele de execuție ale gazdei și dispozitivului
- Utilizarea elementelor de lucru, grupurilor de lucru și intervalelor ND OpenCL pentru a defini paralelismul
- Utilizarea funcțiilor elementelor de lucru OpenCL, cum ar fi get_global_id, get_local_id, get_group_id, etc.
- Utilizarea funcțiilor grupurilor de lucru OpenCL, cum ar fi barrier, work_group_reduce, work_group_scan, etc.
- Utilizarea funcțiilor dispozitivului OpenCL, cum ar fi get_num_groups, get_global_size, get_local_size, etc.
Depanare
- Înțelegerea erorilor și bug-urilor comune în programele OpenCL
- Utilizarea debugger-ului Visual Studio Code pentru a inspecta variabile, puncte de întrerupere, stivă de apeluri, etc.
- Utilizarea CodeXL pentru a depana și analiza programe OpenCL pe dispozitive AMD
- Utilizarea Intel VTune pentru a depana și analiza programe OpenCL pe dispozitive Intel
- Utilizarea NVIDIA Nsight pentru a depana și analiza programe OpenCL pe dispozitive NVIDIA
Optimizare
- Înțelegerea factorilor care afectează performanța programelor OpenCL
- Utilizarea tipurilor de date vectoriale și a tehnicilor de vectorizare OpenCL pentru a îmbunătăți debitul aritmetic
- Utilizarea tehnicilor de desfășurare a buclelor și a tesselării buclelor OpenCL pentru a reduce supraîncărcarea de control și a crește localitatea
- Utilizarea memoriei locale și a funcțiilor de memorie locală OpenCL pentru a optimiza accesul la memorie și lățimea de bandă
- Utilizarea profilării și a instrumentelor de profilare OpenCL pentru a măsura și îmbunătăți timpul de execuție și utilizarea resurselor
Rezumat și Pași Următori
Cerințe
- Înțelegerea limbajului C/C++ și a conceptelor de programare paralelă
- Cunoștințe de bază despre arhitectura calculatoarelor și ierarhia memoriei
- Experiență cu instrumente de linie de comandă și editori de cod
Publicul țintă
- Dezvoltatori care doresc să învețe cum să utilizeze OpenCL pentru a programa dispozitive eterogene și să exploateze paralelismul acestora
- Dezvoltatori care doresc să scrie cod portabil și scalabil care poate rula pe diferite platforme și dispozitive
- Programatori care doresc să exploreze aspectele de nivel scăzut ale programării eterogene și să optimizeze performanța codului lor
28 Ore