Bedankt voor uw aanvraag! Een van onze medewerkers neemt binnenkort contact met u op
Bedankt voor uw boeking! Een van onze medewerkers neemt binnenkort contact met u op.
Cursusaanbod
Invoering
- Wat is CUDA?
- CUDA versus OpenCL versus SYCL
- Overzicht van CUDA-functies en architectuur
- Het opzetten van de ontwikkelomgeving
Aan de slag
- Een nieuw CUDA-project maken met behulp van Visual Studio Code
- Het verkennen van de projectstructuur en bestanden
- Het compileren en uitvoeren van het programma
- De uitvoer weergeven met printf en fprintf
CUDA-API
- Inzicht in de rol van CUDA API in het hostprogramma
- CUDA API gebruiken om apparaatinformatie en -mogelijkheden op te vragen
- CUDA API gebruiken om apparaatgeheugen toe te wijzen en de toewijzing ongedaan te maken
- CUDA API gebruiken om gegevens tussen host en apparaat te kopiëren
- CUDA API gebruiken om kernels te starten en threads te synchroniseren
- CUDA API gebruiken om fouten en uitzonderingen af te handelen
CUDA C/C++
- Inzicht in de rol van CUDA C/C++ in het apparaatprogramma
- CUDA C/C++ gebruiken om kernels te schrijven die op de GPU worden uitgevoerd en gegevens manipuleren
- Gebruik van CUDA C/C++-gegevenstypen, kwalificaties, operators en expressies
- Gebruik van ingebouwde CUDA C/C++-functies, zoals wiskunde, atomic, warp, etc.
- Met behulp van CUDA C/C++ ingebouwde variabelen, zoals threadIdx, blockIdx, blockDim, enz.
- Gebruik van CUDA C/C++-bibliotheken, zoals cuBLAS, cuFFT, cuRAND, enz.
CUDA-geheugenmodel
- Het verschil begrijpen tussen host- en apparaatgeheugenmodellen
- CUDA-geheugenruimten gebruiken, zoals globaal, gedeeld, constant en lokaal
- CUDA-geheugenobjecten gebruiken, zoals pointers, arrays, texturen en oppervlakken
- Gebruik van CUDA-geheugentoegangsmodi, zoals alleen-lezen, alleen-schrijven, lezen-schrijven, enz.
- Gebruik van CUDA-geheugenconsistentiemodel en synchronisatiemechanismen
CUDA-uitvoeringsmodel
- Het verschil begrijpen tussen host- en apparaatuitvoeringsmodellen
- Het gebruik van CUDA-threads, blokken en rasters om het parallellisme te definiëren
- Gebruik van CUDA-threadfuncties, zoals threadIdx, blockIdx, blockDim, enz.
- Gebruik van CUDA-blokfuncties, zoals __syncthreads, __threadfence_block, enz.
- Gebruik van CUDA-rasterfuncties, zoals gridDim, gridSync, coöperatieve groepen, enz.
Foutopsporing
- Inzicht in de veelvoorkomende fouten en bugs in CUDA-programma's
- Gebruik Visual Studio Code debugger om variabelen, breekpunten, call-stack, enz. te inspecteren.
- CUDA-GDB gebruiken om CUDA-programma's te debuggen op Linux
- CUDA-MEMCHECK gebruiken om geheugenfouten en lekken te detecteren
- NVIDIA Nsight gebruiken om CUDA-programma's op Windows te debuggen en analyseren
Optimalisatie
- Inzicht in de factoren die de prestaties van CUDA-programma's beïnvloeden
- Het gebruik van CUDA-coalescentietechnieken om de geheugendoorvoer te verbeteren
- Het gebruik van CUDA-caching en prefetching-technieken om de geheugenlatentie te verminderen
- Gebruik van CUDA gedeeld geheugen en lokale geheugentechnieken om geheugentoegang en bandbreedte te optimaliseren
- Gebruik van CUDA-profilering en profileringstools om de uitvoeringstijd en het gebruik van middelen te meten en te verbeteren
Samenvatting en volgende stappen
Vereisten
- Een goed begrip van de C/C++-taal en parallelle programmeerconcepten
- Basiskennis van computerarchitectuur en geheugenhiërarchie
- Ervaring met opdrachtregelprogramma's en code-editors
Publiek
- Ontwikkelaars die willen leren hoe ze CUDA kunnen gebruiken om NVIDIA GPU's te programmeren en hun parallelliteit te exploiteren
- Ontwikkelaars die hoogwaardige en schaalbare code willen schrijven die op verschillende CUDA-apparaten kan worden uitgevoerd
- Programmeurs die de lagere aspecten van GPU programmeren willen verkennen en hun codeprestaties willen optimaliseren
28 Uren