Cursusaanbod
Inleiding tot versnelde computatie met GPU’s
- Heterogene computatie en de architectuur van CPU-GPU-systemen.
- CUDA-uitvoering en de verschillende geheugenruimtes.
- CUDA C++ compileren met nvcc en CMake.
- Het controleren van de GPU-ontwikkelomgeving.
Parallelle algoritmen met Thrust en CUB
- GPU-versnelde sorteer-, reduceer- en transformatiealgoritmen.
- Het herschrijven van STL-algoritmen zodat deze op GPU’s draaien.
- Device vectors en uitvoeringsmethoden in Thrust.
- CUB-primitieven voor geavanceerde dataverwerking.
GPU-geheugenarchitectuur en beheer
- Soorten geheugen: globaal, constant en texture geheugen.
- Handmatige allocatie en overdracht van apparaatgeheugen.
- Gebruik van Unified Memory voor eenvoudigere datatoegang.
- Optimalisatie door coësiever geheugengebruik en juiste toegangsmodellen.
Asynchrone uitvoering via CUDA streams
- Het creëren en beheren van CUDA streams.
- Kernel-uitvoering combineren met datatransferoperaties.
- Gebruik van CUDA events voor het regelen van afhankelijkheden.
- Tuning van streamprioriteiten en parallellisme.
Eigen CUDA-kernels schrijven
- Het SIMT-programmeermodel en uitvoering binnen warps.
- Kernlanceringsconfiguratie en grid-stride lussen.
- Thread-indexering en meerdimensionale grids.
- Foutdetectie en controle via de CUDA runtime-API.
Hierarchie van threads en uitvoeringsmodel
- Structuur van grids, blokken en threads in apparaatcode.
- Operaties op warpniveau en ballot-mechanismen.
- Synchronisatie binnen blokken en barrier-functies.
- Analyse van resourcegebruik en processorbezettingsgraad.
Cooperative Groups voor flexibel parallelle programmeren
- Het cooperative_groups-API en de verschillende groepstypen.
- Toepassing van thread-blok tiles via tiled_partition.
- Gelijktijdige kernellanceringen op grid-niveau.
- Synchronisatiemethoden voor meerdere grids.
Optimalisatietechnieken voor shared memory
- Ontwijking van bankconflicten bij shared memory-gebruik.
- Toepassing van tilingstrategieën in matrixoperaties.
- Shared memory als eigen beheerde cache.
- Gebruik van cuda::shared_memory_mdspan voor multidimensionale representatie.
Kernel-fusie en geavanceerde parallelle patronen
- Het combineren van meerdere kernels om overhead te verminderen.
- Algoritmen zoals scan, reduce-by-key en gesegmenteerde verwerking.
- Toepassing van atomaire operaties en foutloze datastructuren.
- Gebruik van warp-aggregated atomics voor hogere doorvoer.
Profielen maken en optimaliseren met Nsight Systems
- Tijdlijnanalyse van CPU- en GPU-activiteiten.
- Het opsporen van belemmeringen bij datatransfer.
- Analyse van kernelprestaties en processorbezetting.
- Stapsgewijze optimalisatie met behulp van Nsight Compute.
Moderne C++-functies in CUDA-apparaatcode
- Lambda-expressies, constexpr en auto binnen kernels.
- C++17-parallele algoritmen en uitvoeringsmodellen.
- Concepten en ranges volgens C++20 op het apparaatniveau.
- Ondersteuning voor C++23 binnen nvcc en CCCL 3.x.
CUDA Graphs en geavanceerde asynchrone technieken
- Het definiëren en uitvoeren van CUDA-graphs.
- Grafiekregistratie op basis van stream-uitvoering.
- Grafiekupdates en conditionele node-executie.
- Vermindering van lanceringsvertraging bij iteratieve workloads.
Integratie met bestaande toepassingen
- Het insluiten van GPU-code achter C++-interfaces.
- Beheer van multi-GPU- en NUMA-systemen.
- Integratie van CUDA in buildsystemen met CMake.
- Debuggen van apparaatcode via cuda-gdb.
Samenvatting en beste praktijken
- Keuzes maken tussen Thrust, CUB en zelfgeschreven kernels.
- Prestatieoptimalisatie ongeacht GPU-architectuur.
- Codeorganisatie met behulp van RAII voor CUDA-resources.
- Volgende stappen en vervolgcursussen binnen het CUDA-domein.
Vereisten
- Basisvaardigheden in C++, waaronder lambda-expressies, templates en het gebruik van de STL
- Kennis van standaardalgoritmen, containers en iterators
- Gebruik van lussen, conditionals en functies zonder problemen
- Erfarenheid met CUDA of GPU-programmeren is niet vereist
Doelgroep
- C++-ontwikkelaars die rekenintensieve toepassingen willen versnellen met behulp van GPU’s.
- Software-engineers die van puur CPU-gebaseerde naar heterogene parallelle programmeermethoden overstappen.
- Prestatie-engineers en datawetenschappers die werken met grote datasets.
Getuigenissen (3)
Gedetailleerde uitleg, herhaling van punten op een subtielere manier die het kennisproces echt ten goede kwam. Rods bereidheid om de af en toe gestelde obscure vragen dubbel te checken, om zeker te zijn dat zijn antwoorden 100% juist waren. Bovendien was hij geïnteresseerd in het bespreken van de voordelen en nadelen van alternatieve coderingstijlen, zodat we niet alleen leerden hoe we C++ op onze beoogde manier konden gebruiken, maar ook waarom dat zo moest.
Nick Dillon - cellxica Ltd
Cursus - Using C++ in Embedded Systems - Applying C++11/C++14
Automatisch vertaald
Ervaring delen, de kennis en waarde van de docent.
Carey Fan - Logitech
Cursus - C/C++ Secure Coding
Automatisch vertaald
Het feit dat het online was betekende dat we veel tijd konden besparen. Zeer gewaardeerd. Bovendien hielp het enorm dat de trainer zowel c# als Cpp beheerste, waardoor hij alles kon uitleggen aan de hand van kennis die we al hadden.
Gabor - Rheinmetall Electronics Hungary Kft
Cursus - Advanced C++
Automatisch vertaald