Schulungsübersicht
Einführung in die GPU-beschleunigte Berechnung
- Heterogene Berechnung und CPU-GPU-Architektur.
- CUDA-Ausführung und Speicherräume.
- 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.
- Refaktorierung von STL-Algorithmen für die GPU-Ausführung.
- Thrust Device-Vektoren und Ausführungsrichtlinien.
- CUB-Geräteprinzipien (device-wide primitives) für benutzerdefinierte Pipelines.
GPU-Speicherarchitektur und -Verwaltung
- Typen von Global-, Konstanten- und Texture-Speicher.
- Explizite Gerätespeicherallokation und Datenübertragungen.
- Unified Memory für den vereinfachten Datenzugriff.
- Speicherzusammenfassung (Memory Coalescing) und Optimierung der Zugriffsmuster.
Asynchrone Ausführung mit CUDA Streams
- Erstellung und Verwaltung von CUDA-Streams.
- Überlappung der Kernel-Ausführung mit Datenübertragungen.
- CUDA-Events zur Abhängigkeitsverwaltung.
- Stream-Prioritäten und Optimierung der Nebenläufigkeit.
Schreiben benutzerdefinierter CUDA-Kernels
- Das SIMT-Programmiersmodell und die Ausführung von Warps.
- Konfiguration des Kernel-Launches und Grid-Stride-Schleifen.
- Thread-Indizierung und mehrdimensionale Grids.
- Fehlerbehandlung und CUDA-Runtime-API-Überprüfungen.
Thread-Hierarchie und Ausführungsmodell
- Grids, Blocks und Threads im Device-Code.
- Primitiven auf Warp-Ebene und ballot-Operationen.
- Synchronisation auf Block-Ebene und Barrieren.
- Analyse der Auslastung (Occupancy) und Ressourcenverwendung.
Kooperative Gruppen für flexible Parallelität
- Die cooperative_groups-API und Gruppentypen.
- Thread-Block-Kacheln (tiles) und tiled_partition.
- Kooperative Starts auf Grid-Ebene.
- Synchronisationsmuster für mehrere Grids.
Shared-Memory-Optimierungstechniken
- Bänke des Shared Memory und Vermeidung von Bankkonflikten.
- Kachelstrategien (Tiling) für Matrixoperationen.
- Gemäß Shared Memory als vom Benutzer verwalteter Cache.
- cuda::shared_memory_mdspan für mehrdimensionale Ansichten.
Kernel-Fusion und erweiterte parallele Muster
- Fusion mehrerer Kernels zur Reduzierung der Launch-Überkopfkosten.
- 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 der Datenübertragung.
- Profiling der Kernel-Leistung und Auslastung.
- 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.
- Unterstützung von C++23 in nvcc und CCCL 3.x.
CUDA-Graphen und erweiterte Asynchronität
- Definition und Start von CUDA-Graphen.
- Aufzeichnung von Graphen aus der Stream-Ausführung.
- Aktualisierung von Graphen und bedingte Ausführungsknoten.
- Reduzierung der Launch-Latenz für iterative Arbeitslasten.
Integrationsmuster für bestehende Anwendungen
- Einkapslung von GPU-Code hinter C++-Schnittstellen.
- Verwaltung multipler GPUs und NUMA-Systeme.
- Integration des Build-Systems mit CMake und CUDA.
- Debuggen von Device-Code mit cuda-gdb.
Zusammenfassung und Best Practices
- Entscheidungshilfe: Thrust, CUB oder benutzerdefinierte Kernels?
- Performance-Portabilität über verschiedene GPU-Architekturen hinweg.
- Code-Strukturierung und RAII für CUDA-Ressourcen.
- Weiterführende Schritte und vertiefende Lernpfade für CUDA.
Voraussetzungen
- Grundlegende C++-Kompetenzen, einschließlich Lambda-Ausdrücke, Templates und der STL.
- Vertrautheit mit standardisierten Algorithmen, Containern und Iteratoren.
- Sicherheit im Umgang mit Schleifen, Bedingungen und Funktionen.
- Vorkenntnisse in CUDA oder GPU-Programmierung werden nicht vorausgesetzt.
Zielgruppe
- C++-Entwickler, die rechenintensive Anwendungen mit GPUs beschleunigen möchten.
- Softwareingenieure, die vom reinen CPU-Umfeld zur heterogenen Parallelprogrammierung wechseln.
- Performance-Ingenieure und quantitative Entwickler, die mit großen Datenmengen 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