Schulungsübersicht
Einführung in die GPU-beschleunigte Datenverarbeitung
- Heterogenes Computing und die CPU-GPU-Architektur
- Ausführungs- und Speicherräume von CUDA
- Kompilieren von CUDA C++ mit nvcc und CMake
- Überprüfung der GPU-Entwicklungsumgebung
Parallele Algorithmen mit Thrust und CUB
- GPU-beschleunigtes Sortieren, Reduzieren und Transformieren
- Refactoring von STL-Algorithmen für die GPU-Ausführung
- Thrust Device-Vektoren und Ausführungsrichtlinien
- CUB-Device-primitive Operationen für benutzerdefinierte Pipelines
GPU-Speicherarchitektur und -Verwaltung
- Typen von Global-, Konstanten- und Texturem Speicher
- Explizite Zuweisung und Übertragung von Gerätespeicher
- Unified Memory für vereinfachten Datenzugriff
- Speicher-Zusammenfassung (Memory Coalescing) und Optimierung der Zugriffsmuster
Asynchrone Ausführung mit CUDA-Streams
- Erstellen und Verwalten von CUDA-Streams
- Überlappung der Kernel-Ausführung mit Datenübertragungen
- CUDA-Events zur Verwaltung von Abhängigkeiten
- Stream-Prioritäten und Feinabstimmung der Parallelität
Schreiben benutzerdefinierter CUDA-Kernels
- Das SIMT-Programmiersmodell und Warp-Ausführung
- Konfiguration des Kernel-Launches und Grid-Stride-Schleifen
- Thread-Indizierung und multidimensionale Grids
- Fehlerbehandlung und CUDA-Laufzeit-API-Prüfungen
Thread-Hierarchie und Ausführungsmodell
- Grids, Blocks und Threads im Device-Code
- Warp-level primitive Operationen und Stimmabgabe-Funktionen (Ballot)
- Block-Level-Synchronisation und Barriers
- Analyse der Auslastung (Occupancy) und Ressourcennutzung
Cooperative Groups für flexible Parallelität
- Die cooperative_groups-API und Gruppentypen
- Thread-Block-Kacheln und tiled_partition
- Kooperative Grid-Weite-Launches
- Muster zur Multi-Grid-Synchronisierung
Shared-Memory-Optimierungstechniken
- Bänke im Shared Memory und Vermeidung von Bankkonflikten
- Kachelstrategien für Matrixoperationen
- Shared Memory als vom Benutzer verwalteter Cache
- cuda::shared_memory_mdspan für multidimensionale Ansichten
Kernel-Fusion und erweiterte Parallelmuster
- Zusammenfassung mehrerer Kernels zur Reduzierung der Launch-Overheads
- Scan, Reduce-by-Key und segmentierte Algorithmen
- Atomare Operationen und sperrfreie Datenstrukturen
- Warp-aggregierte atomare Operationen für den Durchsatz
Profiling und Optimierung mit Nsight Systems
- Zeitstrahlanalyse der CPU- und GPU-Aktivität
- Identifizierung von Engpässen bei Datenübertragungen
- Profilierung der Kernel-Leistung und Occupancy
- Iterative Optimierung mit Nsight Compute
Moderner C++-Code in CUDA-Device-Code
- Lambdas, constexpr und auto in Kernels
- C++17-parallele Algorithmen und Ausführungsrichtlinien
- C++20-Konzepte und Ranges auf dem Gerät
- C++23-Unterstützung in nvcc und CCCL 3.x
CUDA Graphs und erweiterte Asynchronität
- Definieren und Starten von CUDA Graphs
- Aufnahme von CUDA Graphs aus der Stream-Ausführung
- Graph-Updates und Knoten für bedingte Ausführung
- Reduzierung der Launch-Latenz für iterative Arbeitslasten
Integrationsmuster für bestehende Anwendungen
- Einpacken von GPU-Code hinter C++-Schnittstellen
- Verwaltung von Multi-GPU- und NUMA-Systemen
- Integration in das Build-System mit CMake und CUDA
- Fehlersuche im Device-Code mit cuda-gdb
Zusammenfassung und Best Practices
- Entscheidungshilfe zwischen Thrust, CUB und benutzerdefinierten Kernels
- Performance-Portabilität über GPU-Architekturen hinweg
- Code-Organisation und RAII für CUDA-Ressourcen
- Weitere Schritte und fortgeschrittene Lernpfade für CUDA
Voraussetzungen
- Grundlegende C++-Kompetenzen, einschließlich Lambda-Ausdrücke, Templates und die STL
- Vertrautheit mit Standardalgorithmen, Containern und Iteratoren
- Sicherheit im Umgang mit Schleifen, Konditionen und Funktionen
- Keine Vorkenntnisse in CUDA oder GPU-Programmierung erforderlich
Zielgruppe
- C++-Entwickler, die rechenintensive Anwendungen mit GPUs beschleunigen möchten
- Softwareentwickler, die vom ausschließlichen CPU-Einsatz zur heterogenen Parallelprogrammierung wechseln
- Performance-Ingenieure und quantitative Entwickler, die mit großen Datensätzen arbeiten
Erfahrungsberichte (3)
Anfangs wirkte das Tempo des Trainers für mich etwas zu schnell, aber nachdem ich während der Schulung entsprechendes Feedback gegeben hatte, erkannte er dies an und reduzierte das Tempo, ohne dabei an der Qualität der Vorträge zu verlieren. Er baute eine gute Beziehung zum Publikum auf, war sehr freundlich und offen für Diskussionen.
Alexandru Ostafi - Siemens
Kurs - Advanced C++ : Practical workshop
Maschinelle Übersetzung
Detaillierte Erklärungen und subtile Wiederholungen der Punkte, die das Wissen wirklich nachhaltig verankert haben. Rods Bereitschaft, auch selten gestellte Fragen zu überprüfen, um sicherzustellen, dass seine Antworten 100% korrekt waren. Ebenso sein Interesse daran, die Vor- und Nachteile alternativer Programmierstile zu diskutieren, sodass wir nicht nur lernten, wie man C++ in der beabsichtigten Weise verwendet, sondern auch, warum es so gemacht werden sollte.
Nick Dillon - cellxica Ltd
Kurs - Using C++ in Embedded Systems - Applying C++11/C++14
Maschinelle Übersetzung
Erfahrungstechnik, es ist das Wissen und die wertvollen Kenntnisse des Lehrers.
Carey Fan - Logitech
Kurs - C/C++ Secure Coding
Maschinelle Übersetzung