Schulungsübersicht

Einführung

  • Was ist GPU-Programmierung?
  • Warum sollte man GPU-Programmierung verwenden?
  • Was sind die Herausforderungen und Kompromisse der GPU-Programmierung?
  • Welche Frameworks und Tools gibt es für die GPU-Programmierung?
  • Die Wahl des richtigen Frameworks und Tools für Ihre Anwendung

OpenCL

  • Was ist OpenCL?
  • Was sind die Vor- und Nachteile von OpenCL?
  • Einrichten der Entwicklungsumgebung für OpenCL
  • Erstellen eines grundlegenden OpenCL-Programms, das Vektoraddition durchführt
  • Verwendung der OpenCL-API, um Geräteinformationen abzufragen, Gerätespeicher zuzuweisen und freizugeben, Daten zwischen Host und Gerät zu kopieren, Kernel zu starten und Threads zu synchronisieren
  • Verwendung der Sprache OpenCL C, um Kernel zu schreiben, die auf dem Gerät ausgeführt werden und Daten manipulieren
  • Verwendung von OpenCL eingebauten Funktionen, Variablen und Bibliotheken, um allgemeine Aufgaben und Operationen durchzuführen
  • Verwendung von OpenCL Speicherbereichen wie global, lokal, konstant und privat, um Datenübertragungen und Speicherzugriffe zu optimieren
  • Verwendung des OpenCL-Ausführungsmodells zur Steuerung der Work-Items, Work-Groups und ND-Ranges, die die Parallelität definieren
  • Debuggen und Testen von OpenCL-Programmen mithilfe von Tools wie CodeXL
  • Optimieren von OpenCL-Programmen mithilfe von Techniken wie Coalescing, Caching, Prefetching und Profiling

CUDA

  • Was ist CUDA?
  • Was sind die Vor- und Nachteile von CUDA?
  • Einrichten der Entwicklungsumgebung für CUDA
  • Erstellen eines grundlegenden CUDA-Programms, das eine Vektoraddition durchführt
  • Verwendung der CUDA API, um Geräteinformationen abzufragen, Gerätespeicher zuzuweisen und freizugeben, Daten zwischen Host und Gerät zu kopieren, Kernel zu starten und Threads zu synchronisieren
  • Verwendung der Sprache CUDA C/C++ zum Schreiben von Kernels, die auf dem Gerät ausgeführt werden und Daten manipulieren
  • Verwendung der in CUDA integrierten Funktionen, Variablen und Bibliotheken zur Ausführung allgemeiner Aufgaben und Operationen
  • Verwendung von CUDA-Speicherbereichen, wie z. B. globale, gemeinsam genutzte, konstante und lokale Speicherbereiche, um Datenübertragungen und Speicherzugriffe zu optimieren
  • Verwendung des CUDA-Ausführungsmodells zur Steuerung von Threads, Blöcken und Gittern, die die Parallelität definieren
  • Debuggen und Testen von CUDA Programmen mit Tools wie CUDA-GDB, CUDA-MEMCHECK und NVIDIA Nsight
  • Optimieren von CUDA Programmen mit Techniken wie Coalescing, Caching, Prefetching und Profiling

ROCm

  • Was ist ROCm?
  • Was sind die Vor- und Nachteile von ROCm?
  • Einrichten der Entwicklungsumgebung für ROCm
  • Erstellen eines grundlegenden ROCm-Programms, das eine Vektoraddition durchführt
  • Verwendung der ROCm-API, um Geräteinformationen abzufragen, Gerätespeicher zuzuweisen und freizugeben, Daten zwischen Host und Gerät zu kopieren, Kernel zu starten und Threads zu synchronisieren
  • Verwendung der ROCm-Sprache C/C++, um Kernel zu schreiben, die auf dem Gerät ausgeführt werden und Daten manipulieren
  • Verwendung der in ROCm eingebauten Funktionen, Variablen und Bibliotheken, um allgemeine Aufgaben und Operationen durchzuführen
  • Verwendung von ROCm-Speicherbereichen, wie global, lokal, konstant und privat, um Datenübertragungen und Speicherzugriffe zu optimieren
  • Verwendung des ROCm-Ausführungsmodells zur Steuerung der Threads, Blöcke und Grids, die die Parallelität definieren
  • Debuggen und Testen von ROCm-Programmen mit Werkzeugen wie ROCm Debugger und ROCm Profiler
  • Optimieren von ROCm-Programmen mithilfe von Techniken wie Coalescing, Caching, Prefetching und Profiling

HIP

  • Was ist HIP?
  • Was sind die Vor- und Nachteile von HIP?
  • Einrichten der Entwicklungsumgebung für HIP
  • Erstellen eines grundlegenden HIP-Programms, das Vektoraddition durchführt
  • Verwendung der HIP-Sprache zum Schreiben von Kernels, die auf dem Gerät ausgeführt werden und Daten manipulieren
  • Verwendung von in HIP integrierten Funktionen, Variablen und Bibliotheken zur Durchführung allgemeiner Aufgaben und Operationen
  • Verwendung von HIP-Speicherbereichen, wie z. B. globale, gemeinsam genutzte, konstante und lokale Speicher, zur Optimierung von Datenübertragungen und Speicherzugriffen
  • Verwendung des HIP-Ausführungsmodells zur Steuerung der Threads, Blöcke und Grids, die die Parallelität definieren
  • Debuggen und Testen von HIP-Programmen mithilfe von Tools wie ROCm Debugger und ROCm Profiler
  • Optimieren von HIP-Programmen mit Techniken wie Coalescing, Caching, Prefetching und Profiling

Vergleich

  • Vergleich der Funktionen, Leistung und Kompatibilität von OpenCL, CUDA, ROCm und HIP
  • Evaluierung von GPU-Programmen anhand von Benchmarks und Metriken
  • Erlernen der besten Praktiken und Tipps für die GPU-Programmierung
  • Erforschung der aktuellen und zukünftigen Trends und Herausforderungen der GPU-Programmierung

Zusammenfassung und nächster Schritt

Voraussetzungen

  • Kenntnisse der Sprache C/C++ und paralleler Programmierkonzepte
  • Grundkenntnisse der Computerarchitektur und der Speicherhierarchie
  • Erfahrung im Umgang mit Befehlszeilentools und Code-Editoren

Zielgruppe

  • Entwickler, die die Grundlagen der GPU-Programmierung und die wichtigsten Frameworks und Tools für die Entwicklung von GPU-Anwendungen erlernen möchten
  • Entwickler, die portablen und skalierbaren Code schreiben möchten, der auf verschiedenen Plattformen und Geräten ausgeführt werden kann
  • Programmierer, die die Vorteile und Herausforderungen der GPU-Programmierung und -Optimierung kennenlernen möchten
 21 Stunden

Teilnehmerzahl


Price per participant (excl. VAT)

Erfahrungsberichte (2)

Kommende Kurse