Tack för att du skickade din fråga! En av våra teammedlemmar kontaktar dig snart.
Tack för att du skickade din bokning! En av våra teammedlemmar kontaktar dig snart.
Kursplan
Introduktion
- Vad är CUDA?
- CUDA vs OpenCL vs SYCL
- Översikt över CUDA-funktioner och arkitektur
- Att sätta upp utvecklingsmiljön
Komma igång
- Skapa ett nytt CUDA-projekt med Visual Studio-koden
- Utforska projektstrukturen och filerna
- Kompilera och köra programmet
- Visar utdata med printf och fprintf
CUDA API
- Förstå rollen för CUDA API i värdprogrammet
- Använder CUDA API för att fråga enhetsinformation och funktioner
- Använder CUDA API för att allokera och avallokera enhetsminne
- Använder CUDA API för att kopiera data mellan värd och enhet
- Använder CUDA API för att starta kärnor och synkronisera trådar
- Använder CUDA API för att hantera fel och undantag
CUDA C/C++
- Förstå rollen för CUDA C/C++ i enhetsprogrammet
- Använda CUDA C/C++ för att skriva kärnor som körs på GPU och manipulera data
- Använder CUDA C/C++ datatyper, kvalificerare, operatorer och uttryck
- Använda CUDA C/C++ inbyggda funktioner, såsom matematik, atomic, warp, etc.
- Använda CUDA C/C++ inbyggda variabler, såsom threadIdx, blockIdx, blockDim, etc.
- Använda CUDA C/C++ bibliotek, såsom cuBLAS, cuFFT, cuRAND, etc.
CUDA minnesmodell
- Förstå skillnaden mellan värd- och enhetsminnesmodeller
- Använda CUDA-minnesutrymmen, såsom globala, delade, konstanta och lokala
- Använda CUDA-minnesobjekt, såsom pekare, arrayer, texturer och ytor
- Använda CUDA-minnesåtkomstlägen, såsom skrivskyddad, skrivskyddad, läs-skriv, etc.
- Använder CUDA minneskonsistensmodell och synkroniseringsmekanismer
CUDA Execution Model
- Förstå skillnaden mellan värd- och enhetsexekveringsmodeller
- Använder CUDA-trådar, block och rutnät för att definiera parallelliteten
- Använda CUDA trådfunktioner, såsom threadIdx, blockIdx, blockDim, etc.
- Använda CUDA-blockfunktioner, såsom __syncthreads, __threadfence_block, etc.
- Använda CUDA-gridfunktioner, såsom gridDim, gridSync, kooperativa grupper, etc.
Felsökning
- Förstå vanliga fel och buggar i CUDA-program
- Användning av Visual Studio kodfelsökning för att inspektera variabler, brytpunkter, anropsstack, etc.
- Använda CUDA-GDB för att felsöka CUDA-program på Linux
- Använder CUDA-MEMCHECK för att upptäcka minnesfel och läckor
- Använder NVIDIA Nsight för att felsöka och analysera CUDA-program på Windows
Optimering
- Förstå de faktorer som påverkar prestandan för CUDA-program
- Använder CUDA-koalesceringstekniker för att förbättra minneskapaciteten
- Använder CUDA-caching och förhämtning för att minska minneslatens
- Använder CUDA delat minne och lokala minnestekniker för att optimera minnesåtkomster och bandbredd
- Använda CUDA-profilerings- och profileringsverktyg för att mäta och förbättra exekveringstiden och resursutnyttjandet
Sammanfattning och nästa steg
Krav
- En förståelse för C/C++ språk och parallella programmeringskoncept
- Grundläggande kunskaper om datorarkitektur och minneshierarki
- Erfarenhet av kommandoradsverktyg och kodredigerare
Publik
- Utvecklare som vill lära sig hur man använder CUDA för att programmera NVIDIA GPU och utnyttja deras parallellitet
- Utvecklare som vill skriva högpresterande och skalbar kod som kan köras på olika CUDA-enheter
- Programmerare som vill utforska lågnivåaspekterna av GPU programmering och optimera sin kodprestanda
28 timmar