Vielen Dank für die Zusendung Ihrer Anfrage! Eines unserer Teammitglieder wird Sie in Kürze kontaktieren.
Vielen Dank, dass Sie Ihre Buchung abgeschickt haben! Eines unserer Teammitglieder wird Sie in Kürze kontaktieren.
Schulungsübersicht
Einführung
- Was ist CUDA?
- CUDA im Vergleich zu OpenCL und SYCL
- Übersicht über CUDA-Funktionen und Architektur
- Einrichten der Entwicklungsumgebung
Erste Schritte
- Erstellen eines neuen CUDA-Projekts mit Visual Studio Code
- Erforschen der Projektstruktur und Dateien
- Kompilieren und Ausführen des Programms
- Anzeigen der Ausgabe mittels printf und fprintf
CUDA API
- Verstehen der Rolle der CUDA API im Host-Programm
- Nutzen der CUDA API zur Abfrage von Geräteinformationen und Fähigkeiten
- Nutzen der CUDA API zum Allokieren und Freigeben des Gerätespeichers
- Nutzen der CUDA API zum Kopieren von Daten zwischen Host und Gerät
- Nutzen der CUDA API zum Starten von Kernels und Synchronisieren von Threads
- Verwalten von Fehlern und Ausnahmen mit der CUDA API
CUDA C/C++
- Verstehen der Rolle von CUDA C/C++ im Geräteprogramm
- Nutzen von CUDA C/C++ zur Erstellung von Kernels, die auf der GPU ausgeführt werden und Daten manipulieren
- Nutzen von Datentypen, Qualifizierern, Operatoren und Ausdrücken in CUDA C/C++
- Nutzen eingebauter Funktionen in CUDA C/C++, wie Mathematik-, Atom- und Warp-Funktionen
- Nutzen eingebauter Variablen in CUDA C/C++, wie threadIdx, blockIdx, blockDim usw.
- Nutzen von Bibliotheken in CUDA C/C++, wie cuBLAS, cuFFT, cuRAND usw.
CUDA-Speichermodell
- Unterschied zwischen Host- und Gerätespeichermodellen verstehen
- Nutzung von Speicherbereichen in CUDA, wie global, geteilt (shared), konstant (constant) und lokal
- Nutzung von Speicherobjekten in CUDA, wie Zeiger, Arrays, Texturen und Surfaces
- Nutzung von Speicherzugriffsmodi in CUDA, wie schreibgeschützt, write-only, read-write usw.
- Verstehen des Speicherkonsistenzmodells und der Synchronisationsmechanismen in CUDA
Ausführungsmodell von CUDA
- Unterschied zwischen Host- und Geräteausführungsmodellen verstehen
- Definition der Parallelität mittels CUDA Threads, Blöcke und Grids
- 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, Cooperative Groups usw.
Debuggen
- Häufige Fehler und Bugs in CUDA-Programmen verstehen
- Verwenden des Debuggers in Visual Studio Code zum Untersuchen von Variablen, Haltepunkten, Aufrufstapeln usw.
- Verwenden von CUDA-GDB zum Debuggen von CUDA-Programmen unter Linux
- Erkennen von Speicherfehlern und -lecks mittels CUDA-MEMCHECK
- Debuggen und Analysieren von CUDA-Programmen unter Windows mit NVIDIA Nsight
Optimierung
- Faktoren verstehen, die die Leistung von CUDA-Programmen beeinflussen
- Verbesserung des Speicherdurchsatzes mittels Coalescing-Techniken in CUDA
- Reduzierung der Speicherlatenz durch Caching- und Prefetching-Techniken in CUDA
- Optimieren von Speicherzugriffen und Bandbreite mittels shared memory und lokalem Speicher in CUDA
- Messen und Verbessern der Ausführungszeit und Ressourcennutzung mittels Profiling und entsprechenden Tools in CUDA
Zusammenfassung und nächste Schritte
Voraussetzungen
- Kenntnisse in der C/C++-Sprache und Konzepten der parallelen Programmierung
- Grundlegende Kenntnisse über Computerarchitektur und Speicherebenen
- Erfahrung mit Kommandozeilentools und Code-Editoren
Zielgruppe
- Entwickler, die lernen möchten, wie sie CUDA zur Programmierung von NVIDIA-GPUs nutzen und deren Parallelität ausnutzen können.
- Entwickler, die leistungsstarke und skalierbaren Code schreiben möchten, 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