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.
Schița de curs
Introducere
- Ce este CUDA?
- CUDA vs OpenCL vs SYCL
- Prezentare generală a caracteristicilor și arhitecturii CUDA
- Configurarea mediului de dezvoltare
Începutul
- Crearea unui nou proiect CUDA folosind Visual Studio Code
- Explorarea structurii și fișierelor proiectului
- Compilarea și rularea programului
- Afișarea rezultatului folosind printf și fprintf
API CUDA
- Înțelegerea rolului API-ului CUDA în programul gazdă
- Folosirea API-ului CUDA pentru a interoga informațiile și capacitățile dispozitivului
- Folosirea API-ului CUDA pentru a aloca și elibera memoria dispozitivului
- Folosirea API-ului CUDA pentru a copia date între gazdă și dispozitiv
- Folosirea API-ului CUDA pentru a lansa nuclee și sincroniza firele
- Folosirea API-ului CUDA pentru a gestiona erorile și excepțiile
CUDA C/C++
- Înțelegerea rolului CUDA C/C++ în programul dispozitivului
- Folosirea CUDA C/C++ pentru a scrie nuclee care se execută pe GPU și manipulează date
- Folosirea tipurilor de date, calificatoarelor, operatorilor și expresiilor CUDA C/C++
- Folosirea funcțiilor încorporate CUDA C/C++, cum ar fi matematică, atomic, warp, etc.
- Folosirea variabilelor încorporate CUDA C/C++, cum ar fi threadIdx, blockIdx, blockDim, etc.
- Folosirea bibliotecilor CUDA C/C++, cum ar fi cuBLAS, cuFFT, cuRAND, etc.
Modelul de memorie CUDA
- Înțelegerea diferenței dintre modelele de memorie ale gazdei și dispozitivului
- Folosirea spațiilor de memorie CUDA, cum ar fi global, partajat, constant și local
- Folosirea obiectelor de memorie CUDA, cum ar fi pointeri, array-uri, texturi și suprafețe
- Folosirea modurilor de acces la memorie CUDA, cum ar fi read-only, write-only, read-write, etc.
- Folosirea modelului de consistență a memoriei CUDA și a mecanismelor de sincronizare
Modelul de execuție CUDA
- Înțelegerea diferenței dintre modelele de execuție ale gazdei și dispozitivului
- Folosirea firelor, blocurilor și grilielor CUDA pentru a defini paralelismul
- Folosirea funcțiilor de fire CUDA, cum ar fi threadIdx, blockIdx, blockDim, etc.
- Folosirea funcțiilor de bloc CUDA, cum ar fi __syncthreads, __threadfence_block, etc.
- Folosirea funcțiilor de grilă CUDA, cum ar fi gridDim, gridSync, grupuri cooperative, etc.
Depanare
- Înțelegerea erorilor și bug-urilor comune în programele CUDA
- Folosirea debugger-ului Visual Studio Code pentru a inspecta variabile, breakpoints, call stack, etc.
- Folosirea CUDA-GDB pentru a depana programe CUDA pe Linux
- Folosirea CUDA-MEMCHECK pentru a detecta erori și scurgeri de memorie
- Folosirea NVIDIA Nsight pentru a depana și analiza programe CUDA pe Windows
Optimizare
- Înțelegerea factorilor care afectează performanța programelor CUDA
- Folosirea tehnicilor de coalescing CUDA pentru a îmbunătăți debitul de memorie
- Folosirea tehnicilor de caching și prefetching CUDA pentru a reduce latența memoriei
- Folosirea tehnicilor de memorie partajată și locală CUDA pentru a optimiza accesele și lățimea de bandă a memoriei
- Folosirea instrumentelor de profiling și profiling CUDA pentru a măsura și îmbunătăți timpul de execuție și utilizarea resurselor
Rezumat și pași următori
Cerințe
- O înțelegere a limbajului C/C++ și a conceptelor de programare paralelă
- Cunoștințe de bază despre arhitectura calculatoarelor și ierarhia memoriei
- Experiență cu instrumente de linie de comandă și editoare de cod
Public țintă
- Dezvoltatori care doresc să învețe cum să folosească CUDA pentru a programa GPU-uri NVIDIA și să exploateze paralelismul 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 de nivel scăzut ale programării GPU și să optimizeze performanța codului lor
28 Ore