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

Numărul de participanți


Pret per participant

Cursuri viitoare

Categorii înrudite