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

Numărul de participanți


Pret per participant

Cursuri viitoare

Categorii înrudite