Kontakt aufnehmen

Schulungsübersicht

Einführung

  • Was ist GPU-Programmieren?
  • Warum sollte man GPU-Programmierung nutzen?
  • Welche Herausforderungen und Abwägungen sind mit dem GPU-Programmieren verbunden?
  • Welche Frameworks und Werkzeuge stehen für das GPU-Programmieren zur Verfügung?
  • Auswahl des passenden Frameworks bzw. Tools für die jeweilige Anwendung.

OpenCL

  • Was ist OpenCL?
  • Welche Vor- und Nachteile hat OpenCL?
  • Einrichtung der Entwicklungsumgebung für OpenCL.
  • Erstellung eines einfachen OpenCL-Programms zur Berechnung einer Vektorsumme.
  • Nutzung der OpenCL-API zum Abfragen von Geräteinformationen, Zuweisen und Freigeben von Speicher, Übertragen von Daten zwischen Host und GPU, Ausführen von Kerneln sowie Synchronisieren von Threads.
  • Verwendung der Programmiersprache OpenCL C zum Schreiben von Kerneln, die auf dem Gerät ausgeführt werden und mit Daten arbeiten.
  • Einsatz von integrierten Funktionen, Variablen sowie Bibliotheken in OpenCL für gängige Aufgaben.
  • Nutzung der Speicherbereiche – globaler, lokaler, konstanter sowie privater Speicher –, um Datentransfers und Zugriffe zu optimieren.
  • Verwendung des Ausführungsmodells von OpenCL zur Steuerung von Work-Items, Work-Groups sowie ND-Ranges, die die Parallelität bestimmen.
  • Debugging und Testen von OpenCL-Programmen mittels Tools wie CodeXL.
  • Optimierung von OpenCL-Programmen durch Techniken wie Coalescing, Caching, Vorabladung und Profiling.

CUDA

  • Was ist CUDA?
  • Welche Vor- und Nachteile bietet CUDA?
  • Einrichtung der Entwicklungsumgebung für CUDA.
  • Erstellung eines einfachen CUDA-Programms zur Berechnung einer Vektorsumme.
  • Nutzung der CUDA-API zum Abfragen von Geräteinformationen, Zuweisen und Freigeben von Speicher, Übertragen von Daten zwischen Host und GPU, Ausführen von Kerneln sowie Synchronisieren von Threads.
  • Verwendung der Programmiersprache CUDA C/C++ zum Schreiben von Kerneln, die auf dem Gerät ausgeführt werden und mit Daten arbeiten.
  • Einsatz integrierter Funktionen, Variablen sowie Bibliotheken in CUDA für häufige Aufgaben.
  • Nutzung der Speicherbereiche – globaler, gemeinsamer, konstanter sowie lokaler Speicher –, um Datentransfers und Zugriffe zu optimieren.
  • Steuerung der Parallelität durch das CUDA-Ausführungsmodell mit Threads, Blocks und Grids.
  • Debugging und Testen von CUDA-Programmen mittels Tools wie CUDA-GDB, CUDA-MEMCHECK sowie NVIDIA Nsight.
  • Optimierung von CUDA-Programmen durch Techniken wie Coalescing, Caching, Vorabladung und Profiling.

ROCm

  • Was ist ROCm?
  • Welche Vor- und Nachteile bietet ROCm?
  • Einrichtung der Entwicklungsumgebung für ROCm.
  • Erstellung eines einfachen ROCm-Programms zur Berechnung einer Vektorsumme.
  • Nutzung der ROCm-API zum Abfragen von Geräteinformationen, Zuweisen und Freigeben von Speicher, Übertragen von Daten zwischen Host und GPU, Ausführen von Kerneln sowie Synchronisieren von Threads.
  • Verwendung der Programmiersprache ROCm C/C++ zum Schreiben von Kerneln, die auf dem Gerät ausgeführt werden und mit Daten arbeiten.
  • Einsatz integrierter Funktionen, Variablen sowie Bibliotheken in ROCm für gängige Aufgaben.
  • Nutzung der Speicherbereiche – globaler, lokaler, konstanter sowie privater Speicher –, um Datentransfers und Zugriffe zu optimieren.
  • Verwendung des Ausführungsmodells von ROCm zur Steuerung von Threads, Blocks und Grids, die die Parallelität bestimmen.
  • Debugging und Testen von ROCm-Programmen mittels Tools wie dem ROCm Debugger sowie dem ROCm Profiler.
  • Optimierung von ROCm-Programmen durch Techniken wie Coalescing, Caching, Vorabladung und Profiling.

HIP

  • Was ist HIP?
  • Welche Vor- und Nachteile bietet HIP?
  • Einrichtung der Entwicklungsumgebung für HIP.
  • Erstellung eines einfachen HIP-Programms zur Berechnung einer Vektorsumme.
  • Verwendung der Programmiersprache HIP zum Schreiben von Kerneln, die auf dem Gerät ausgeführt werden und mit Daten arbeiten.
  • Einsatz integrierter Funktionen, Variablen sowie Bibliotheken in HIP für gängige Aufgaben.
  • Nutzung der Speicherbereiche – globaler, gemeinsamer, konstanter sowie lokaler Speicher –, um Datentransfers und Zugriffe zu optimieren.
  • Steuerung der Parallelität durch das HIP-Ausführungsmodell mit Threads, Blocks und Grids.
  • Debugging und Testen von HIP-Programmen mittels Tools wie dem ROCm Debugger sowie dem ROCm Profiler.
  • Optimierung von HIP-Programmen durch Techniken wie Coalescing, Caching, Vorabladung und Profiling.

Vergleich

  • Vergleich der Merkmale, Leistungsfähigkeit sowie Kompatibilität von OpenCL, CUDA, ROCm und HIP.
  • Evaluierung von GPU-Programmen anhand von Benchmarks und Metriken.
  • Verinnerlichung bewährter Praktiken sowie Tipps für das GPU-Programmieren.
  • Erforschung aktueller Trends und zukünftiger Herausforderungen im Bereich des GPU-Programmierens.

Zusammenfassung und nächste Schritte

Voraussetzungen

  • Grundkenntnisse in der Programmiersprache C/C++ sowie Verständnis paralleler Programmierkonzepte
  • Grundwissen über Computerkonstruktion und Speicherhierarchie
  • Erfahrung mit Kommandozeilenwerkzeugen sowie Code-Editoren

Zielgruppe

  • Entwickler, die die Grundlagen des GPU-Programmierens sowie die wichtigsten Frameworks und Tools kennenlernen möchten.
  • Entwickler, die portierbaren und skalierbaren Code schreiben wollen, der auf verschiedenen Plattformen und Geräten lauffähig ist.
  • Programmierer, die die Vorzüge und Herausforderungen des GPU-Programmierens sowie Optimierungstechniken erkunden möchten.
 21 Stunden

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Kommende Kurse

Verwandte Kategorien