Kursplan
Introduktion till GPU-accelererad beräkning
- Heterogen beräkning och CPU-GPU-arkitektur.
- CUDA-exekvering och minnesrum.
- Kompilering av CUDA C++ med nvcc och CMake.
- Verifiering av GPU-utvecklingsmiljön.
Parallella algoritmer med Thrust och CUB
- GPU-accelererad sortering, reduktion och transformation.
- Omfaktorisering av STL-algoritmer för GPU-exekvering.
- Thrust-enhetsvektorer (device vectors) och exekveringspolicys.
- CUB-enhetsbredda primitive operationer för anpassade pipeliner.
GPU-minnesarkitektur och hantering
- Globalt, konstant och texturminne.
- Explicit allokering av enhetsminne och datatransfer.
- Unified Memory för förenklad dataåtkomst.
- Minneskoalisering och optimering av åtkomstmönster.
Asynkron exekvering med CUDA-strömmar
- Skapande och hantering av CUDA-strömmar.
- Överlappning av kärnexekvering med datatransfer.
- CUDA-händelser för beroendehantering.
- Strömprioritering och optimering av konkurrens.
Skrivning av anpassade CUDA-kärnor
- SIMT-programmeringsmodellen och warplexekvering.
- Konfiguration av kärnstart och grid-strideloopar.
- Trådinindexering och flerdimensionella nätverk (grids).
- Felhantering och kontroll av CUDA Runtime API.
Trådstruktur och exekveringsmodell
- Nätverk (grids), block och trådar i enhetskod.
- Warpspecifika primitive operationer och röstningsoperationer (ballot operations).
- Blocknivåsynchronisering och barriärer.
- Analys av upptagning och resursutnyttjande (occupancy).
Kooperativa grupper för flexibel parallelism
- cooperative_groups-API:t och gruppetyper.
- Tråd-block-plattor och tiled_partition.
- Kooperativa starter på nätverksnivå.
- Mönster för multi-gridsynkronisering.
Optimeringstekniker med delat minne
- Delningsminnesbanker och undvikande av bankkonflikter.
- Plattostrategier för matrisoperationer.
- Delt minne som användarhanterad cache.
- cuda::shared_memory_mdspan för flerdimensionella visningar.
Kärnfusion och avancerade parallella mönster
- Fusion av flera kärnor för att minska startöverhead.
- Scan, reduce-by-key och segmenterade algoritmer.
- Atomoperationer och låsdatstrukturer (lock-free data structures).
- Warp-aggregerade atomoperationer för genomströmning.
Profilering och optimering med Nsight Systems
- Tidslinjeanalys av CPU- och GPU-aktivitet.
- Identifiering av flaskhalsar vid minnesöverföring.
- Kärnprestanda och upptagningsprofiler.
- Iterativ optimering med Nsight Compute.
Moderna C++-funktioner i CUDA-enhetskod
- Lambda, constexpr och auto i kärnor.
- C++17 parallella algoritmer och exekveringspolicys.
- C++20-koncept och ranges på enheten (device).
- C++23-stöd i nvcc och CCCL 3.x.
CUDA-grafer och avancerad asynkroni
- Definition och start av CUDA-grafer.
- Infångning av grafer från strömuxekvering.
- Uppdatering av grafer och villkorliga exekveringsnoder.
- Minskning av startlatens för iterativa arbetsbelastningar.
Integrationsmönster för befintliga applikationer
- Inpacka GPU-kod bakom C++-gränssnitt.
- Hantera flera GPU:er och NUMA-system.
- Integrering i byggsystem med CMake och CUDA.
- Felsökning av enhetskod med cuda-gdb.
Sammanfattning och bästa praxis
- Val mellan Thrust, CUB och anpassade kärnor.
- Prestationsportabilitet över olika GPU-arkitekturer.
- Kodorganisation och RAII för CUDA-resurser.
- Nästa steg och avancerade inlärningsvägar för CUDA.
Krav
- Grundläggande C++-kompetens inklusive lambdauttryck, mallar (templates) och STL.
- Kunskap om standardalgoritmer, containrar och iteratorer.
- Bekantskap med loopar, villkorssatser och funktioner.
- Ingen tidigare kunskap inom CUDA eller GPU-programmering krävs.
Målgrupp
- C++-utvecklare som söker accelerera beräkningsintensiva applikationer med GPUs.
- Mjukvaruingenjörer som övergår från enbart CPU-baserad programmering till heterogen parallellprogrammering.
- Prestandaingenjörer och kvantitativa utvecklare som arbetar med stora dataset.
Vittnesmål (3)
Detaljerad förklaring, en ganska subtil återupprepning av punkterna som verkligen fastsatte kunskapen på ett bra sätt. Rods vilja att dubbelkolla de mera oklarfrågor vi ställde för att vara säker på att hans svar var 100% korrekta. Dessutom, hans intresse för att diskutera fördelarna och nackdelarna med alternativa programmeringstilar så att vi inte bara lärde oss hur man använder C++ på den tänkta sättet, utan också varför det ska göras på det sättet.
Nick Dillon - cellxica Ltd
Kurs - Using C++ in Embedded Systems - Applying C++11/C++14
Maskintolkat
Erfarenhetsdelning, lärarens kunskap och värde är betydande.
Carey Fan - Logitech
Kurs - C/C++ Secure Coding
Maskintolkat
Det faktum att det var online betydde att vi kunde spara mycket tid. Mycket uppskattat. Dessutom hjälpte det att utbildaren kände till både c# och Cpp, eftersom han kunde förklara allt med hjälp av kunskap vi redan hade.
Gabor - Rheinmetall Electronics Hungary Kft
Kurs - Advanced C++
Maskintolkat