Kontakt aufnehmen

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

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Erfahrungsberichte (3)

Kommende Kurse

Verwandte Kategorien