Schița de curs
Introducere în calcul accelerat cu GPU
- Computing heterogen și arhitectura CPU-GPU
- Echipamente și spații de memorie CUDA
- Compilarea codului CUDA C++ cu nvcc și CMake
- Verificarea mediului de dezvoltare GPU
Algoritmi paraleli cu Thrust și CUB
- Sortare, reducere și transformare accelerate cu GPU
- Refacturarea algoritmilor STL pentru execuție pe GPU
- Vectoarele de dispozitiv Thrust și politicile de execuție
- Primitivile la nivel de dispozitiv CUB pentru pipeline-uri personalizate
Arhitectura și gestionarea memoriei GPU
- Tipuri de memorie globală, constantă și textură
- Alocarea explicită a memoriei dispozitivului și transferurile
- Memorie unificată pentru acces simplificat la date
- Coalescerea memoriei și optimizarea pattern-urilor de acces
Execuție asincronă cu fluxuri CUDA
- Creatrea și gestionarea fluxurilor CUDA
- Suprapunerea execuției kernel-urilor cu transferurile de date
- Evenimentele CUDA pentru gestionarea dependențelor
- Priorități ale fluxurilor și optimizarea concurenței
Scrierea de kernel-uri CUDA personalizate
- Modelul de programare SIMT și execuția warp-ului
- Configurarea lansării kernel-ului și buclele „grid-stride”
- Indexarea thread-urilor și grile bidimensionale
- Gestionarea erorilor și verificările API-ului runtime CUDA
Ierarhia de thread-uri și modelul de execuție
- Grile, blocuri și thread-uri în codul dispozitivului
- Primitivile la nivel de warp și operații de votare (ballot)
- Sincronizarea la nivel de bloc și bariere
- Analiza ocupării și utilizării resurselor
Grupuri cooperative pentru paralelism flexibil
- API-ul cooperative_groups și tipurile de grupuri
- Tiles ale blocurilor de thread-uri și tiled_partition
- Lansări cooperative la nivel de grilă
- Pattern-uri de sincronizare multi-grilă
Tehnici de optimizare a memoriei partajate
- Băncile de memorie partajată și evitarea conflictelor de bancă
- Strategii de tiling pentru operațiile cu matricee
- Memoria partajată ca cache gestionat de utilizator
- cuda::shared_memory_mdspan pentru vizualizări multidimensionale
Fuziunea kernel-urilor și pattern-uri avansate de paralelism
- Combinarea mai multor kernel-uri pentru a reduce overhead-ul de lansare
- Scanare, reducere după cheie și algoritmi segmentați
- Operații atomice și structuri de date fără lock-uri
- Atomici aggregate pe warp pentru randament
Profilare și optimizare cu Nsight Systems
- Analiza cronologiei activității CPU și GPU
- Identificarea gâturilor de flasche la transferul de memorie
- Profilarea performanței și ocupării kernel-ului
- Optimizare iterativă cu Nsight Compute
Funcționalități C++ moderne în codul dispozitivului CUDA
- Lambdas, constexpr și auto în kernel-uri
- Algoritmi paraleli C++17 și politici de execuție
- Concepte și range-uri C++20 pe dispozitiv
- Suport C++23 în nvcc și CCCL 3.x
Grile CUDA și asincronie avansată
- Definirea și lansarea grilelor CUDA
- Capturarea grilelor din execuția fluxurilor
- Actualizarea grilei și nodurile de execuție condițională
- Reducerea latenței de lansare pentru sarcini iterative
Pattern-uri de integrare pentru aplicații existente
- Încapsularea codului GPU în interfețe C++
- Gestionarea sistemelor multi-GPU și NUMA
- Integrarea cu sistemele de build folosind CMake și CUDA
- Depanarea codului dispozitivului cu cuda-gdb
Sumar și bune practici
- Alegerea dintre Thrust, CUB și kernel-uri personalizate
- Portabilitatea performanței pe arhitecturi GPU diferite
- Organizarea codului și RAII pentru resursele CUDA
- Următorii pași și căi de învățare avansată în CUDA
Cerințe
- Competențe de bază în C++, inclusiv expresii lambda, șabloane și STL
- Familiaritate cu algoritmii standard, containerele și iteratorii
- Confortabilitate în utilizarea buclelor, condiționalelor și funcțiilor
- Nu este necesară nicio cunoștință anterioară de programare CUDA sau GPU
Public țintă
- Dezvoltatori de C++ care doresc să accelereze aplicațiile intensive din punct de vedere computațional folosind GPU-uri
- Ingineri software care trec de la programarea exclusiv pe CPU la programarea paralelă heterogenă
- Ingineri de performanță și dezvoltatori cantitativi care lucrează cu seturi mari de date
Mărturii (3)
Inițial, ritmul trainerului mi s-a părut puțin prea rapid, dar după ce am oferit feedback în timpul training-ului, a recunoscut acest lucru și a încetinit ritmul fără a sacrifica vreun aspect din prelegeri. Bună înțelegere cu publicul, foarte prietenos și deschis la discuții.
Alexandru Ostafi - Siemens
Curs - Advanced C++ : Practical workshop
Tradus de catre o masina
Explicații detaliate, reluarea punctelor într-un mod destul de subtil care a consolidat foarte bine cunoștințele. Disponibilitatea lui Rod de a verifica dublu întrebările obscure pe care le-am ridicat, pentru a se asigura că răspunsurile sale erau 100% corecte. De asemenea, interesul său de a discuta avantajele și dezavantajele stilurilor alternative de codare, astfel încât să învățăm nu doar cum să folosim C++ în modul dorit, ci și de ce ar trebui făcut astfel.
Nick Dillon - cellxica Ltd
Curs - Using C++ in Embedded Systems - Applying C++11/C++14
Tradus de catre o masina
Schimbul de experiență, cunoștințele și valoarea profesorului sunt prețioase.
Carey Fan - Logitech
Curs - C/C++ Secure Coding
Tradus de catre o masina