Schița de curs

Introducere

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

Noțiuni introductive

  • Crearea unui nou proiect OpenCL utilizând codul Visual Studio.
  • Explorarea structurii proiectului și a fișierelor
  • Compilarea și rularea programului
  • Afișarea ieșirii utilizând printf și fprintf

OpenCL API

  • Înțelegerea rolului API OpenCL în programul gazdă
  • Utilizarea API OpenCL pentru a interoga informațiile și capacitățile dispozitivului
  • Utilizarea API OpenCL pentru a crea contexte, cozi de comenzi, tampoane, nuclee și evenimente.
  • Utilizarea OpenCL API pentru a pune în coadă comenzi, cum ar fi citire, scriere, copiere, mapare, desfacere, executare și așteptare
  • Utilizarea API OpenCL pentru a gestiona erori și excepții.

OpenCL C

  • Înțelegerea rolului lui OpenCL C în programul de dispozitiv
  • Utilizarea OpenCL C pentru a scrie nuclee care se execută pe dispozitiv și manipulează date.
  • Utilizarea tipurilor de date, calificatorilor, operatorilor și expresiilor OpenCL C
  • Utilizarea funcțiilor încorporate în 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.

OpenCL Modelul de memorie

  • Înțelegerea diferenței dintre modelele de memorie gazdă și dispozitiv
  • Utilizarea spațiilor de memorie OpenCL, cum ar fi global, local, constant și privat.
  • Utilizarea obiectelor de memorie OpenCL, cum ar fi tampoanele, imaginile și țevile
  • Utilizarea modurilor de acces la memorie OpenCL, cum ar fi read-only, write-only, read-write etc.
  • Utilizarea modelului de coerență a memoriei OpenCL și a mecanismelor de sincronizare.

Modelul de execuție OpenCL.

  • Înțelegerea diferenței dintre modelele de execuție ale gazdei și ale dispozitivului
  • Utilizarea OpenCL a elementelor de lucru, a grupurilor de lucru și a intervalelor ND pentru a defini paralelismul
  • Utilizarea funcțiilor OpenCL work-item, 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 de dispozitiv OpenCL, cum ar fi get_num_groups, get_global_size, get_local_size, etc.

Depanarea

  • Înțelegerea erorilor și a erorilor comune din programele OpenCL.
  • Utilizarea depanatorului de cod Visual Studio pentru a inspecta variabilele, punctele de întrerupere, stiva de apeluri etc.
  • Utilizarea CodeXL pentru depanarea și analiza programelor OpenCL pe dispozitive AMD
  • Utilizarea Intel VTune pentru depanarea și analiza programelor OpenCL pe dispozitive Intel
  • Utilizarea NVIDIA Nsight pentru depanarea și analiza programelor 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 derulare a buclelor OpenCL și a tehnicilor de tip "loop tiling" pentru a reduce sarcina de control și a crește localitatea
  • utilizarea memoriei locale OpenCL și a funcțiilor de memorie locală pentru a optimiza accesele la memorie și lățimea de bandă.
  • Utilizarea OpenCL instrumentelor de profilare și a instrumentelor de profilare pentru a măsura și îmbunătăți timpul de execuție și utilizarea resurselor.

Rezumat și etape următoare

Cerințe

  • Înțelegerea limbajului C/C++ și a conceptelor de programare paralelă
  • Cunoștințe de bază privind arhitectura calculatoarelor și ierarhia memoriei
  • experiență în utilizarea instrumentelor de linie de comandă și a editorilor de cod

Publicul

  • Dezvoltatorii care doresc să învețe cum să utilizeze OpenCL pentru a programa dispozitive eterogene și pentru a exploata paralelismul acestora.
  • Dezvoltatorii 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 lor
 28 ore

Numărul de participanți



Pret per participant

Mărturii (1)

Cursuri înrudite

GPU Programming with CUDA

28 ore

GPU Programming - OpenCL vs CUDA vs ROCm

28 ore

AMD GPU Programming

28 ore

ROCm for Windows

21 ore

Introduction to GPU Programming

21 ore

Categorii înrudite