Intrati in legatura
 Durata 28 ore

Schița de curs

Introducere

  • Ce este OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Prezentare generală a funcțiilor și arhitecturii OpenCL
  • Configurarea mediului de dezvoltare

Începutul

  • Crearea unui nou proiect OpenCL folosind Visual Studio Code
  • Explorarea structurii proiectului și a fișierelor
  • Compilarea și rularea programului
  • Afișarea ieșirii folosind printf și fprintf

OpenCL API

  • Înțelegerea rolului OpenCL API în programul host
  • Utilizarea OpenCL API pentru a interoga informațiile despre dispozitiv și capacitățile sale
  • Utilizarea OpenCL API pentru a crea contexte, cozi de comenzi, buffere, kernere și evenimente
  • Utilizarea OpenCL API pentru a pune în coadă comenzi, cum ar fi read, write, copy, map, unmap, execute și wait
  • Utilizarea OpenCL API pentru a gestiona erorile și excepțiile

OpenCL C

  • Înțelegerea rolului OpenCL C în programul dispozitiv
  • Utilizarea OpenCL C pentru a scrie kernere care se execută pe dispozitiv și manipulează datele
  • Utilizarea tipurilor de date, calificatorilor, 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 pentru host și pentru dispozitiv
  • Utilizarea spațiilor de memorie OpenCL, cum ar fi global, local, constant și privat
  • Utilizarea obiectelor de memorie OpenCL, cum ar fi bufferele, imaginile și pipe-urile
  • Utilizarea modurilor de acces la memorie OpenCL, cum ar fi read-only, write-only, read-write etc.
  • Utilizarea modelului de consistență a memoriei OpenCL și a mecanismelor de sincronizare

Modelul de execuție OpenCL

  • Înțelegerea diferenței dintre modelele de execuție pentru host și pentru dispozitiv
  • Utilizarea work-items, work-groups și ND-ranges OpenCL pentru a defini paralelismul
  • Utilizarea funcțiilor work-item OpenCL, cum ar fi get_global_id, get_local_id, get_group_id etc.
  • Utilizarea funcțiilor work-group OpenCL, cum ar fi barrier, work_group_reduce, work_group_scan etc.
  • Utilizarea funcțiilor de dispozitiv OpenCL, cum ar fi get_num_groups, get_global_size, get_local_size etc.

Debugging

  • Înțelegerea erorilor și a bug-urilor comune din programele OpenCL
  • Utilizarea debugger-ului din Visual Studio Code pentru a inspecta variabilele, punctele de întrerupere, call stack-ul etc.
  • Utilizarea CodeXL pentru a depista și analiza erorile din programele OpenCL pe dispozitive AMD
  • Utilizarea Intel VTune pentru a depista și analiza erorile din programele OpenCL pe dispozitive Intel
  • Utilizarea NVIDIA Nsight pentru a depista și analiza erorile din programele OpenCL pe dispozitive NVIDIA

Optimizare

  • Înțelegerea factorilor care afectează performanța programelor OpenCL
  • Utilizarea tipurilor de date vectoriale OpenCL și a tehnicilor de vectorizare pentru a îmbunătăți randamentul aritmetic
  • Utilizarea tehnicilor de loop unrolling și loop tiling OpenCL pentru a reduce overhead-ul de control și a crește localitatea
  • Utilizarea memoriei locale OpenCL și a funcțiilor de memorie locală pentru a optimiza accesul la memorie și lățimea de bandă
  • Utilizarea profiling-ului OpenCL și a instrumentelor de profiling pentru a măsura și îmbunătăți timpul de execuție și utilizarea resurselor

Cerințe

  • O înțelegere a limbajului C/C++ și a conceptelor de programare paralelă;
  • Cunoștințe de bază despre arhitectura calculatorului și ierarhia memoriei;
  • Experiență cu instrumentele de linie de comandă și editoarele de cod.

Public Țintă

  • Dezvoltatori care doresc să învețe cum să folosească OpenCL pentru programarea dispozitivelor heterogene și a exploata paralelismul acestora;
  • Dezvoltatori care doresc să scrie cod portabil și scalabil care se poate rula pe platforme și dispozitive diferite;
  • Programatori care doresc să exploreze aspectele de nivel scăzut ale programării heterogene și să optimizeze performanța codului.

Numărul de participanți


Pret per participant

Cursuri viitoare

Categorii înrudite