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
Începuturi
- Crearea unui nou proiect OpenCL folosind Visual Studio Code
- Explorarea structurii și fișierelor proiectului
- Compilarea și rularea programului
- Afișarea rezultatelor 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 ale dispozitivului
- Utilizarea API-ului OpenCL pentru a crea contexte, cozi de comenzi, buffere, nuclee și evenimente
- Utilizarea API-ului OpenCL pentru a încărca comenzi, 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 conducte
- 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 de lucru OpenCL, cum ar fi get_global_id, get_local_id, get_group_id etc.
- Utilizarea funcțiilor de grup 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, stiva 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 tăierii buclelor OpenCL pentru a reduce suprapunerea 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ă folosească OpenCL pentru a programa dispozitive eterogene și să le exploateze paralelismul
- 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ă-și optimizeze performanța codului
28 Ore