Schița de curs
Introducere în calculul accelerat cu GPU
- Calculul heterogen și arhitectura CPU-GPU
- Spațiile de execuție și memorie CUDA
- Compilarea codului CUDA C++ cu nvcc și CMake
- Verificarea mediului de dezvoltare GPU
Algoritmi paraleli cu Thrust și CUB
- Sortare, reducție și transformare accelerate pe GPU
- Refacturarea algoritmilor STL pentru execuție pe GPU
- Vectori de dispozitiv Thrust și politici de execuție
- Primitivele CUB la nivel de dispozitiv pentru pipeline-uri personalizate
Arhitectura gestionării memoriei GPU
- Type-uri de memorie globală, constantă și textură
- Alocarea explicită a memoriei dispozitivului și transferurile
- Memoria unificată pentru accesul simplificat la date
- Coalescerea memoriei și optimizarea tiparelor de acces
Execuție asincronă cu stream-uri CUDA
- Crearea și gestionarea stream-urilor CUDA
- Suprapunerea execuției kernel-urilor cu transferurile de date
- Evenimente CUDA pentru gestionarea dependențelor
- Prioritățile stream-urilor și ajustarea concurenței
Scrierea de kernel-uri CUDA personalizate
- Modelul de programare SIMT și execuția wrapelei
- Configurarea lansării kernel-ului și buclele grid-stride
- Indexarea thread-urilor și grile multidimensionale
- Gestionarea erorilor și verificările API-ului runtime CUDA
Ierarhia thread-urilor și modelul de execuție
- Grile, blocuri și thread-uri în codul dispozitivului
- Primitivele la nivel de warp și operațiuni de votare (ballot)
- Sincronizarea la nivel de bloc și bariere
- Analiza ocupației și utilizării resurselor
Grupe cooperative pentru paralelism flexibil
- API-ul cooperative_groups și tipurile de grupuri
- Bilețtile de blocuri de thread-uri și tiled_partition
- Lansări cooperative la nivel de grid
- Modele de sincronizare multi-grid
Tehnici de optimizare a memoriei partajate
- Băncile memoriei partajate și evitarea conflictelor de bancă
- Strategii de tile-are pentru operațiile matriciale
- Memoria partajată ca memorie cache gestionată de utilizator
- cuda::shared_memory_mdspan pentru vizualizări multidimensionale
Fuziunea kernel-urilor și tipare avansate de paralelism
- Fuzionarea mai multor kernel-uri pentru a reduce overhead-ul de lansare
- Scan, reduce-by-key și algoritmi segmentați
- Operații atomice și structuri de date fără blocante (lock-free)
- Atomica agregată pe warp pentru randament
Profilarea și optimizarea cu Nsight Systems
- Analizarea timeline-ului activității CPU și GPU
- Identificarea gâtului de sticlă al transferului de memorie
- Profilarea performanței și ocupației kernel-urilor
- Optimizare iterativă cu Nsight Compute
Caracteristici moderne C++ î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
- Suportul C++23 în nvcc și CCCL 3.x
Grafuri CUDA și asincronie avansată
- Definirea și lansarea grafurilor CUDA
- Capturarea grafului din execuția stream-ului
- Actualizarea grafului și nodurile de execuție condițională
- Reducerea latenței de lansare pentru sarcini iterative
Modele de integrare pentru aplicații existente
- Învelișul codului GPU în spatele interfețelor C++
- Gestionarea sistemelor multi-GPU și NUMA
- Integrarea sistemului de compilare cu CMake și CUDA
- Depanarea codului dispozitivului cu cuda-gdb
Sinteză și bune practici
- Alegerea dintre Thrust, CUB și kernel-uri personalizate
- Portabilitatea performanței pe arhitecturi GPU
- Organizarea codului și RAII pentru resursele CUDA
- Pasii următori și căile de învățare avansată CUDA
Cerințe
- Competență de bază în C++, inclusiv expresii lambda, șabloane (templates) și STL.
- Familiaritate cu algoritmi standard, containere și iteratori.
- Confortabilitate cu buclele, condițiile și funcțiile.
- Nu sunt necesare cunoștințe anterioare despre CUDA sau programarea GPU.
Audiența țintă
- Dezvoltatori C++ care doresc să accelereze aplicațiile intens calculatoare cu GPU-uri.
- Ingineri software care fac tranziția 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