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

Numărul de participanți


Pret per participant

Upcoming Courses

Categorii înrudite