Intrati in legatura
 Durata 28 ore

Schița de curs

Introducere

  • Ce este CUDA?
  • CUDA vs OpenCL vs SYCL
  • Prezentarea caracteristicilor și arhitecturii CUDA
  • Configurarea mediului de dezvoltare

Primii pași

  • Crearea unui proiect nou CUDA folosind Visual Studio Code
  • Explorarea structurii proiectului și a fișierelor
  • Compilarea și rularea programului
  • Afișarea output-ului folosind printf și fprintf

API-ul CUDA

  • Înțelegerea rolului API-ului CUDA în programul de pe host
  • Folosirea API-ului CUDA pentru interogarea informațiilor și capabilităților dispozitivului
  • Folosirea API-ului CUDA pentru alocarea și eliberarea memoriei dispozitivului
  • Folosirea API-ului CUDA pentru copierea datelor între host și dispozitiv
  • Folosirea API-ului CUDA pentru lansarea kernelurilor și sincronizarea firelor
  • Folosirea API-ului CUDA pentru gestionarea erorilor și excepțiilor

CUDA C/C++

  • Înțelegerea rolului CUDA C/C++ în programul de pe dispozitiv
  • Utilizarea CUDA C/C++ pentru scrierea kernelurilor care se execută pe GPU și manipulează date
  • Utilizarea tipurilor de date, calificatorilor, operatorilor și expresiilor din CUDA C/C++
  • Utilizarea funcțiilor integrate CUDA C/C++, precum cele matematice, atomice, warp etc.
  • Utilizarea variabilelor integrate CUDA C/C++, precum threadIdx, blockIdx, blockDim etc.
  • Utilizarea bibliotecilor CUDA C/C++, precum cuBLAS, cuFFT, cuRAND etc.

Modelul de memorie CUDA

  • Înțelegerea diferenței dintre modelele de memorie de pe host și pe dispozitiv
  • Utilizarea spațiilor de memorie CUDA, precum global, shared, constant și local
  • Utilizarea obiectelor de memorie CUDA, precum pointeri, tabele, texturi și suprafețe
  • Utilizarea modurilor de acces la memorie CUDA, precum read-only, write-only, read-write etc.
  • Utilizarea modelului de coerență a memoriei CUDA și a mecanismelor de sincronizare

Modelul de execuție CUDA

  • Înțelegerea diferenței dintre modelele de execuție de pe host și pe dispozitiv
  • Utilizarea firelor, blocurilor și grilelor CUDA pentru a defini paralelismul
  • Utilizarea funcțiilor de fire CUDA, precum threadIdx, blockIdx, blockDim etc.
  • Utilizarea funcțiilor de bloc CUDA, precum __syncthreads, __threadfence_block etc.
  • Utilizarea funcțiilor de grilă CUDA, precum gridDim, gridSync, cooperative groups etc.

Depistarea erorilor (Debugging)

  • Înțelegerea erorilor și bug-urilor comune în programele CUDA
  • Utilizarea debug-erului din Visual Studio Code pentru a inspecta variabilele, punctele de oprire, stack-ul de apeluri etc.
  • Utilizarea CUDA-GDB pentru debuggingul programelor CUDA pe Linux
  • Utilizarea CUDA-MEMCHECK pentru detectarea erorilor de memorie și a scurgerilor de memorie
  • Utilizarea NVIDIA Nsight pentru debugging și analiză a programelor CUDA pe Windows

Optimizare

  • Înțelegerea factorilor care afectează performanța programelor CUDA
  • Utilizarea tehnicilor de coalescing CUDA pentru a îmbunătăți debitul de memorie
  • Utilizarea tehnicilor de caching și prefetching CUDA pentru a reduce latența memoriei
  • Utilizarea tehnicilor de memorie shared și locală CUDA pentru a optimiza accesul la memorie și lățimea de bandă
  • Utilizarea profiling-ului CUDA și a instrumentelor de profiling pentru a măsura și îmbunătăți timpul de execuție și utilizarea resurselor

Cerințe

  • Înțelegerea limbajului C/C++ și a conceptelor de programare paralelă
  • Cunoștințe de bază despre arhitectura calculatoarelor și ierarhia de memorie
  • Experiență în utilizarea instrumentelor din linia de comandă și a editoarelor de cod

Public țintă

  • Dezvoltatori care doresc să învețe cum să folosească CUDA pentru programarea GPU-urilor NVIDIA și exploatarea paralelismului acestora
  • Dezvoltatori care doresc să scrie cod de înaltă performanță și scalabil, care poate rula pe diferite dispozitive CUDA
  • Programatori care doresc să exploreze aspectele low-level ale programării GPU și să optimizeze performanța codului

Numărul de participanți


Pret per participant

Cursuri viitoare

Categorii înrudite