Mulțumim pentru trimiterea solicitării! Un membru al echipei noastre vă va contacta în curând.
Mulțumim pentru trimiterea rezervării! Un membru al echipei noastre vă va contacta în curând.
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