Kursplan
Innføring i GPU-akselerert computing
- Heterogen computing og CPU-GPU-arkitekturen
- CUDA-kjøring og minneområder
- Kompilering av CUDA C++ med nvcc og CMake
- Verifisering av GPU-utviklingsmiljøet
Parallelle algoritmer med Thrust og CUB
- GPU-akselerert sortering, reduksjon og transformasjon
- Refaktorering av STL-algoritmer for GPU-kjøring
- Thrust-enhetsvektorer og kjøringsspolicyer
- CUB-enhetsprimitiver for tilpassede pipeline-ar
GPU-minnearkitektur og -administrasjon
- Globalt, konstant- og teksturminnetyper
- Eksplisitt tildeling og overføring av enhetsminne
- Unified Memory for forenklet dataadgang
- Minnekoaliesering og optimalisering av tilgangs mønstre
Asynkron kjøring med CUDA-strømmer
- Oppretting og håndtering av CUDA-strømmer
- Tilove kjernekjøring med dataoverføringer
- CUDA-hendelser for avhengighetshåndtering
- Strøm prioritering og tilpasning av konkurranse
Skriving av tilpassede CUDA-kjerner
- SIMT-programmeringsmodellen og strupekjøring (warp execution)
- Konfigurasjon for kjernelansering og grid-stride-løkker
- Trådinndeksering og flerdimensionelle gratia
- Feilhåndtering og sjekking av CUDA runtime API
Trådhiarki og kjøremode ll
- Gratia, blokker og tråder i enhetskoden
- Strupenivå-primitiver og ballot-operasjoner
- Blokkningsnivå synkronisering og barrierer
- Analyse av opptakelse og ressursutnyttelse
Cooperative Groups for fleksibel parallelisme
- cooperative_groups-API-et og gruppetyper
- Trådblokk-fliser og tiled_partition
- Grati-nivå cooperative lanseringer
- Multi-gratia synkroniseringsmønstre
Teknikker for optimalisering av delt minne (shared memory)
- Delt minne-banker og unngåelse av bankkonflikter
- Flisestrategier for matriseoperasjoner
- Delt minne som brukeradministrert cache
- cuda::shared_memory_mdspan for flerdimensjonale visninger
Kjernesmeltning og avanserte parallelle mønstre
- Smelte flere kjerner sammen for å redusere lanseringsoverhead
- Scan, reduce-by-key og segmenterte algoritmer
- Atomare operasjoner og låsfrie datastrukturer
- Strupe-aggregerte atomare operasjoner for ytelse
Profivering og optimalisering med Nsight Systems
- Tidslinjeanalyse av CPU- og GPU-aktivitet
- Identifisering av flaskehalser i dataoverføring
- Profiling av kjernens ytelse og opptakelse
- Itrativ optimalisering med Nsight Compute
Moderne C++-funksjoner i CUDA-enhetskoden
- Lambda, constexpr og auto i kjerner
- C++17 parallelle algoritmer og kjøringsspolicyer
- C++20 begrep (concepts) og rekker på enheten
- C++23-støtte i nvcc og CCCL 3.x
CUDA-grafer og avansert asynkronitet
- Definere og lansere CUDA-grafer
- Opptak av grafer fra strømkjøring
- Oppdatering av grafer og betingede eksekveringsnodler
- Redusering av lanseringslatens for iterative arbeidsbelastninger
Integrasjonsmønstre for eksisterende applikasjoner
- Inneslutning av GPU-kode bak C++-grensesnitt
- Håndtering av multi-GPU og NUMA-systemer
- Integrasjon i bygg-systemet med CMake og CUDA
- Fejlsøking av enhetskoden med cuda-gdb
Oppsummering og beste praksis
- Valg mellom Thrust, CUB og tilpassede kjerner
- Ytelsesportabilitet på tvers av GPU-arkitekturer
- Kodeorganisering og RAII for CUDA-resurser
- Neste steg og avanserte læringsbaner for CUDA
Krav
- Grunnleggende C++-kompetanse inkludert lambda-uttrykk, maler (templates) og STL
- Fortrolighet med standard algoritmer, beholdere og iteratorer
- Behagelighet med løkker, betingelser og funksjoner
- Ingen tidligere kunnskap om CUDA eller GPU-programmering kreves
Målgruppe
- C++-utviklere som ønsker å akselerere beregningsintensive applikasjoner med GPU-er
- Programvareingeniører som går over fra CPU-baserte systemer til heterogen parallel programmering
- Ytelsesingeniører og kvantitative utviklere som arbeider med store datasett
Referanser (3)
Detaljert forklaring, gjenopprettelse av punkter på en subtil måte som virkelig feste kunnskapen godt. Rods villighet til å dobbeltsjekke de mer ukjente spørsmålene vi oppkastet, for å være sikker på at svarene hans var 100% riktige. Dessuten, hans interesse for å diskutere for- og nackdelene med alternative kodingstiler slik at vi ikke bare lærte hvordan man bruker C++ på den måten vi mente, men også hvorfor det bør gjøres på den måten.
Nick Dillon - cellxica Ltd
Kurs - Using C++ in Embedded Systems - Applying C++11/C++14
Maskinoversatt
Erfargingdeling, lærerens kunnskap og verdi.
Carey Fan - Logitech
Kurs - C/C++ Secure Coding
Maskinoversatt
Den digitale formen gjorde at vi kunne spare mye tid. Mye sett med til. Dessuten var det en stor hjelp at instruktøren kjente både c# og Cpp, ettersom han kunne forklare alt gjennom kunnskaper vi allerede hadde.
Gabor - Rheinmetall Electronics Hungary Kft
Kurs - Advanced C++
Maskinoversatt