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