Schița de curs

Introducere

  • Ce este programarea GPU?
  • De ce să folosim programarea GPU?
  • Care sunt provocările și compromisurile programării GPU?
  • Care sunt framework-urile și uneltele pentru programarea GPU?
  • Alegerea framework-ului și instrumentului potrivit pentru aplicația ta

OpenCL

  • Ce este OpenCL?
  • Care sunt avantajele și dezavantajele OpenCL?
  • Configurarea mediului de dezvoltare pentru OpenCL
  • Crearea unui program OpenCL de bază care efectuează adunarea vectorială
  • Folosirea API-ului OpenCL pentru a interoga informațiile despre dispozitiv, aloca și dezaloca memoria dispozitivului, copia date între gazdă și dispozitiv, lanseze kernel-uri și sincronizeze firele
  • Folosirea limbajului OpenCL C pentru a scrie kernel-uri care se execută pe dispozitiv și manipulează date
  • Folosirea funcțiilor, variabilelor și bibliotecilor încorporate OpenCL pentru a efectua sarcini și operații comune
  • Folosirea spațiilor de memorie OpenCL, cum ar fi global, local, constant și privat, pentru a optimiza transferurile de date și accesul la memorie
  • Folosirea modelului de execuție OpenCL pentru a controla work-items, work-groups și ND-ranges care definesc paralelismul
  • Depanarea și testarea programelor OpenCL folosind unelte precum CodeXL
  • Optimizarea programelor OpenCL folosind tehnici precum coalescing, caching, prefetching și profiling

CUDA

  • Ce este CUDA?
  • Care sunt avantajele și dezavantajele CUDA?
  • Configurarea mediului de dezvoltare pentru CUDA
  • Crearea unui program CUDA de bază care efectuează adunarea vectorială
  • Folosirea API-ului CUDA pentru a interoga informațiile despre dispozitiv, aloca și dezaloca memoria dispozitivului, copia date între gazdă și dispozitiv, lanseze kernel-uri și sincronizeze firele
  • Folosirea limbajului CUDA C/C++ pentru a scrie kernel-uri care se execută pe dispozitiv și manipulează date
  • Folosirea funcțiilor, variabilelor și bibliotecilor încorporate CUDA pentru a efectua sarcini și operații comune
  • Folosirea spațiilor de memorie CUDA, cum ar fi global, shared, constant și local, pentru a optimiza transferurile de date și accesul la memorie
  • Folosirea modelului de execuție CUDA pentru a controla firele, blocurile și grilele care definesc paralelismul
  • Depanarea și testarea programelor CUDA folosind unelte precum CUDA-GDB, CUDA-MEMCHECK și NVIDIA Nsight
  • Optimizarea programelor CUDA folosind tehnici precum coalescing, caching, prefetching și profiling

ROCm

  • Ce este ROCm?
  • Care sunt avantajele și dezavantajele ROCm?
  • Configurarea mediului de dezvoltare pentru ROCm
  • Crearea unui program ROCm de bază care efectuează adunarea vectorială
  • Folosirea API-ului ROCm pentru a interoga informațiile despre dispozitiv, aloca și dezaloca memoria dispozitivului, copia date între gazdă și dispozitiv, lanseze kernel-uri și sincronizeze firele
  • Folosirea limbajului ROCm C/C++ pentru a scrie kernel-uri care se execută pe dispozitiv și manipulează date
  • Folosirea funcțiilor, variabilelor și bibliotecilor încorporate ROCm pentru a efectua sarcini și operații comune
  • Folosirea spațiilor de memorie ROCm, cum ar fi global, local, constant și privat, pentru a optimiza transferurile de date și accesul la memorie
  • Folosirea modelului de execuție ROCm pentru a controla firele, blocurile și grilele care definesc paralelismul
  • Depanarea și testarea programelor ROCm folosind unelte precum ROCm Debugger și ROCm Profiler
  • Optimizarea programelor ROCm folosind tehnici precum coalescing, caching, prefetching și profiling

HIP

  • Ce este HIP?
  • Care sunt avantajele și dezavantajele HIP?
  • Configurarea mediului de dezvoltare pentru HIP
  • Crearea unui program HIP de bază care efectuează adunarea vectorială
  • Folosirea limbajului HIP pentru a scrie kernel-uri care se execută pe dispozitiv și manipulează date
  • Folosirea funcțiilor, variabilelor și bibliotecilor încorporate HIP pentru a efectua sarcini și operații comune
  • Folosirea spațiilor de memorie HIP, cum ar fi global, shared, constant și local, pentru a optimiza transferurile de date și accesul la memorie
  • Folosirea modelului de execuție HIP pentru a controla firele, blocurile și grilele care definesc paralelismul
  • Depanarea și testarea programelor HIP folosind unelte precum ROCm Debugger și ROCm Profiler
  • Optimizarea programelor HIP folosind tehnici precum coalescing, caching, prefetching și profiling

Comparație

  • Compararea caracteristicilor, performanței și compatibilității OpenCL, CUDA, ROCm și HIP
  • Evaluarea programelor GPU folosind benchmark-uri și metrici
  • Învățarea celor mai bune practici și sfaturi pentru programarea GPU
  • Explorarea tendințelor și provocărilor actuale și viitoare ale programării GPU

Rezumat și următorii pași

Cerințe

  • Înțelegerea limbajului C/C++ și a conceptelor de programare paralelă
  • Cunoștințe de bază despre arhitectura calculatoarelor și ierarhia memoriei
  • Experiență cu unelte de linie de comandă și editori de cod

Public țintă

  • Dezvoltatori care doresc să învețe elementele de bază ale programării GPU și principalele framework-uri și unelte pentru dezvoltarea aplicațiilor GPU
  • Dezvoltatori care doresc să scrie cod portabil și scalabil care să poată rula pe diferite platforme și dispozitive
  • Programatori care doresc să exploreze beneficiile și provocările programării și optimizării GPU
 21 Ore

Numărul de participanți


Pret per participant

Cursuri viitoare

Categorii înrudite