Intrati in legatura

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.
 8 Ore

Numărul de participanți


Pret per participant

Mărturii (3)

Cursuri viitoare

Categorii înrudite