Kontakt aufnehmen

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

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Erfahrungsberichte (3)

Kommende Kurse

Verwandte Kategorien