Schulungsübersicht
Einführung in die GPU-beschleunigte Datenverarbeitung
- Heterogene Datenverarbeitung und CPU-GPU-Architektur
- CUDA-Ausführungsspeicher- und Speicherbereiche
- 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-Geräteprimitiven für benutzerdefinierte Datenpipelines
GPU-Speicherarchitektur und Speichermanagement
- Globale, konstante und Texturspeicherarten
- Explizite Zuweisung und Übertragung von Gerätespeicher
- Unified Memory für vereinfachten Datenzugriff
- Memory Coalescing und Optimierung der Zugriffsmuster
Asynchrone Ausführung mit CUDA Streams
- Erstellen und Verwalten von CUDA Streams
- Überlappen der Kernel-Ausführung mit Datenübertragungen
- CUDA Events zur Abhängigkeitsverwaltung
- Stream-Prioritäten und Feinabstimmung der Parallelität
Schreiben benutzerdefinierter CUDA-Kernels
- Das SIMT-Programmiermodell und die Warp-Ausführung
- Konfiguration des Kernel-Aufrufs und Grid-Stride-Schleifen
- Thread-Indexierung und multidimensionale Grids
- Fehlerbehandlung und Überprüfungen der CUDA Runtime API
Thread-Hierarchie und Ausführungsmodell
- Grids, Blöcke und Threads in Device Code
- Warp-level-Primitiven und Ballot-Operationen
- Blockweise Synchronisation und Barrieren
- Analyse der Auslastung (Occupancy) und Ressourcenverwendung
Cooperative Groups für flexible Parallelität
- Die cooperative_groups-API und Gruppentypen
- Thread-Block-Kacheln und tiled_partition
- Grid-weite kooperative Aufrufe
- Multi-Grid-Synchronisationsmuster
Shared-Memory-Optimierungstechniken
- Shared Memory Banks 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 fortschrittliche Parallelmuster
- Fusion mehrerer Kernels zur Reduzierung der Aufruf-Overheads
- Scan, Reduzieren pro Schlüssel 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äten
- Identifizieren von Engpässen bei Datenübertragungen
- Kernalleistungs- und Occupancy-Profilierung
- Iterative Optimierung mit Nsight Compute
Moderne C++-Features in CUDA Device Code
- Lambdas, constexpr und auto in Kernels
- C++17-parallele Algorithmen und Ausführungsrichtlinien
- C++20-Konzepte (Concepts) und Ranges auf dem Gerät
- C++23-Unterstützung in nvcc und CCCL 3.x
CUDA Graphs und fortschrittliche Asynchronität
- Definition und Ausführung von CUDA Graphs
- Aufzeichnung (Capture) von Streams in Graphs
- Aktualisierung von Graphen und bedingte Ausführungsknoten
- Reduzierung der Aufruflatenz für iterative Arbeitslasten
Integrationsmuster für bestehende Anwendungen
- Kapselung von GPU-Code hinter C++-Schnittstellen
- Verwaltung mehrerer GPUs und NUMA-Systeme
- Integration in Build-Systemen mit CMake und CUDA
- Debuggen von Device Code mit cuda-gdb
Zusammenfassung und Best Practices
- Auswahl zwischen Thrust, CUB und benutzerdefinierten Kernels
- Leistungsportabilität über verschiedene GPU-Architekturen hinweg
- Codeorganisation und RAII für CUDA-Ressourcen
- Weitere Schritte und fortgeschrittene Lernpfade für CUDA
Voraussetzungen
- Grundlegende C++-Kenntnisse, einschließlich Lambda-Ausdrücken, Templates und der STL
- Vertrautheit mit standardmässigen Algorithmen, Containern und Iteratoren
- Sicherheit im Umgang mit Schleifen, Bedingungen und Funktionen
- Vorkenntnisse in CUDA oder GPU-Programmierung sind nicht erforderlich
Zielgruppe
- C++-Entwickler, die rechenintensive Anwendungen mit GPUs beschleunigen möchten
- Softwareingenieure, die vom ausschliesslichen CPU-Einsatz zu heterogener paralleler Programmierung wechseln
- Performance-Ingenieure und quantitative Entwickler, die mit grossen 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