Course Outline

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

Requirements

  • 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 Hours

Getuigenissen (1)

Related Courses

GPU Programming - OpenCL vs CUDA vs ROCm

28 Hours

Related Categories