Kontakt aufnehmen

Schulungsübersicht

Einführung

  • Was ist CUDA?
  • CUDA im Vergleich zu OpenCL und SYCL
  • Übersicht über die Funktionen und die Architektur von CUDA
  • Einrichten der Entwicklungsumgebung

Erste Schritte

  • Erstellen eines neuen CUDA-Projekts mit Visual Studio Code
  • Erkunden der Projektstruktur und der Dateien
  • Kompilieren und Ausführen des Programms
  • Anzeigen der Ausgabe mittels printf und fprintf

CUDA-API

  • Verständnis der Rolle der CUDA-API im Host-Programm
  • Nutzung der CUDA-API zur Abfrage von Geräteinformationen und -fähigkeiten
  • Nutzung der CUDA-API zur Zuweisung und Freigabe von Gerätespeicher
  • Nutzung der CUDA-API zum Kopieren von Daten zwischen Host und Gerät
  • Nutzung der CUDA-API zum Starten von Kernels und Synchronisieren von Threads
  • Nutzung der CUDA-API zur Behandlung von Fehlern und Ausnahmen

CUDA C/C++

  • Verständnis der Rolle von CUDA C/C++ im Device-Programm
  • Nutzung von CUDA C/C++ zum Schreiben von Kernels, die auf der GPU ausgeführt werden und Daten manipulieren
  • Nutzung der Datentypen, Qualifier, Operatoren und Ausdrücke in CUDA C/C++
  • Nutzung der eingebauten Funktionen in CUDA C/C++, wie Mathematik-, Atomic- und Warp-Funktionen usw.
  • Nutzung der eingebauten Variablen in CUDA C/C++, wie threadIdx, blockIdx, blockDim usw.
  • Nutzung der Bibliotheken in CUDA C/C++, wie cuBLAS, cuFFT, cuRAND usw.

CUDA-Speichermodell

  • Verständnis des Unterschieds zwischen Host- und Device-Speichermodellen
  • Einsatz von CUDA-Speicherbereichen wie global, shared, constant und local
  • Nutzung von CUDA-Speicherobjekten wie Zeigern, Arrays, Texturen und Surfaces
  • Nutzung der Lese- und Schreibzugriffsmodi in CUDA-Speichern, wie read-only, write-only, read-write usw.
  • Verständnis des CUDA-Speicher-Konsistenzmodells und der Synchronisierungsmechanismen

CUDA-Ausführungsmodell

  • Verständnis des Unterschieds zwischen Host- und Device-Ausführungsmodellen
  • Nutzung von CUDA-Threads, -Blöcken und -Grids zur Definition der Parallelität
  • Nutzung von CUDA-Thread-Funktionen wie threadIdx, blockIdx, blockDim usw.
  • Nutzung von CUDA-Block-Funktionen wie __syncthreads, __threadfence_block usw.
  • Nutzung von CUDA-Grid-Funktionen wie gridDim, gridSync und Cooperative Groups usw.

Fehlersuche (Debugging)

  • Verständnis der häufigsten Fehler und Bugs in CUDA-Programmen
  • Nutzung des Debuggers in Visual Studio Code zur Inspektion von Variablen, Haltepunkten, dem Callstack usw.
  • Nutzung von CUDA-GDB zum Debuggen von CUDA-Programmen unter Linux
  • Nutzung von CUDA-MEMCHECK zur Erkennung von Speicherfehlern und -lecks
  • Nutzung von NVIDIA Nsight zum Debuggen und Analysieren von CUDA-Programmen unter Windows

Optimierung

  • Verständnis der Faktoren, die die Leistung von CUDA-Programmen beeinflussen
  • Einsatz von CUDA-Coalescing-Techniken zur Verbesserung des Speicher-Durchsatzes
  • Nutzung von CUDA-Caching- und Prefetching-Techniken zur Reduzierung der Speicherlatenz
  • Einsatz von CUDA-Shared-Memory- und Local-Memory-Techniken zur Optimierung von Speicherzugriffen und Bandbreite
  • Nutzung von CUDA-Profilings und Profiling-Tools zum Messen und Verbessern der Ausführungszeit und Ressourcenauslastung

Zusammenfassung und nächste Schritte

Voraussetzungen

  • Verständnis der C/C++-Sprache und paralleler Programmierkonzepte
  • Grundkenntnisse in Computerarchitektur und Speicherebenen-Hierarchie
  • Erfahrung mit Befehlszeilentools und Code-Editoren

Zielgruppe

  • Entwickler, die lernen möchten, wie sie CUDA zur Programmierung von NVIDIA-GPUs nutzen und deren Parallelität ausschöpfen können.
  • Entwickler, die hocheffizienten und skalierbaren Code schreiben wollen, der auf verschiedenen CUDA-Geräten ausgeführt werden kann.
  • Programmierer, die die Low-Level-Aspekte der GPU-Programmierung erkunden und die Leistung ihres Codes optimieren möchten.
 28 Stunden

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Kommende Kurse

Verwandte Kategorien