Kontakt aufnehmen

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

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Erfahrungsberichte (3)

Kommende Kurse

Verwandte Kategorien