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.
Dauer 28 Stunden
Schulungsübersicht
Einführung
- Was ist CUDA?
- CUDA im Vergleich zu OpenCL und SYCL
- Übersicht über Funktionen sowie Architektur von CUDA
- Einrichtung der Entwicklungsumgebung
Erste Schritte
- Erstellung eines neuen CUDA-Projekts mittels Visual Studio Code
- Betrachtung der Projektstruktur samt zugehörigen Dateien
- Kompilierung und Ausführung des Programms
- Ausgabeanzeige über printf bzw. fprintf veranlassen
CUDA-API
- Rolle der CUDA-API im Host-Programm verstehen
- Nutzung der API, um Geräteinformationen abzufragen
- Dynamische Reservierung sowie Freigabe von Speicher auf dem Device per API
- Übertragung von Daten zwischen Host und Device mittels API-Funktionen<\/li>
- Ausführung von Kerneln sowie Synchronisation der Threads steuern
- Behandlung von Fehlern und Ausnahmen durch Nutzung der API
CUDA C/C++
- Bedeutung von CUDA C/C++ für Device-Programme erkennen
- Verwendung der Sprache zur Entwicklung von Kerneln, die Daten auf der GPU verarbeiten.
- Einsatz von Datentypen, Qualifikatoren, Operatoren und Ausdrücken in CUDA C/C++.
- Nutzung integrierter Funktionen wie mathematischer Operationen oder Warp-Operationen.
- Verwendung systemeigener Variablen wie threadIdx, blockIdx oder blockDim.
- Einbindung von Bibliotheken wie cuBLAS, cuFFT sowie cuRAND in die Programmierung.
CUDA-Speichermodell
- Unterschiede zwischen Host- und Device-Speicherstrukturen erkennen
- Einsatz verschiedener Speicherbereiche wie global, shared, constant oder local zur Leistungssteigerung.
- Nutzung von Objekten wie Zeigern, Arrays oder Texturen als Speicherelemente.
- Auswahl passender Zugriffsmodi (Lesen nur, Schreiben nur etc.)
- Verständnis des Konsistenzmodells sowie von Mechanismen zur Synchronisation des Speichers.
CUDA-Ausführungsmodell
- Abgrenzung der Ausführungsmodelle auf Host- und Device-Ebene erkennen.
- Verwendung von Threads, Blöcken sowie Gittern zur Konfiguration paralleler Berechnungen.
- Bewusste Nutzung funktioneller Merkmale wie threadIdx oder blockDim im Rahmen der Programmierung.
- Einsatz synchronisierender Funktionen auf Block-Ebene, etwa __syncthreads oder __threadfence_block.
- Konfiguration von Netzstrukturen mit gridDim, gridSync sowie Kooperativen Gruppen im Hintergrund steuern.
Debugging
- Häufige Fehlerquellen und Programmfehler in CUDA-Programmen verstehen.
- Nutzung des Visual Studio Code Debuggers für das Inspektieren von Variablen, Breakpoints sowie Aufrufstapeln.
- Anwendung von CUDA-GDB zur Analyse von Fehlern auf Linux-Systemen.
- Erkennung fehlerhafter Speichervorgänge mittels CUDA-MEMCHECK.
- Verwendung von NVIDIA Nsight zur Diagnose und Analyse von Programmen unter Windows.
Optimierung
- Wesentliche Einflussfaktoren auf die Performance von CUDA-Programmen kennenlernen.
- Coalescing-Methoden verwenden, um den Datendurchsatz zu steigern.
- Caching und Prefetching zur Reduzierung der Zugriffszeiten effektiv einsetzen.
- Nutzung von Shared Memory sowie lokalem Speicher zur Vermeidung von Engpässen im Datenfluss.
- Anwendung von Profilwerkzeugen, um Laufzeit und Ressourcenverbrauch präzise zu ermitteln und zu verbessern.
Zusammenfassung sowie weitere Perspektiven
Voraussetzungen
- Solides Wissen in der C/C++-Programmiersprache sowie Kenntnisse zu Konzepten des Parallelprogramms.
- Grundsätzliche Einsicht in Computerarchitektur und Hierarchie der Speichersysteme.
- Erfahrung mit Kommandozeilenwerkzeugen sowie Code-Editoren.
Zielgruppe
- Entwickler, die CUDA erlernen möchten, um NVIDIA-GPUs effizient zu programmieren und Parallelität bestmöglich auszunutzen.
- Programmierer, die leistungsfähigen und skalierbaren Code erstellen wollen, der auf unterschiedlichen CUDA-fähigen Geräten läuft.
- Fachleute, die tiefergehende Einblicke in die GPU-Programmierung gewinnen sowie ihre Programme verbessern möchten.