Vielen Dank für die Zusendung Ihrer Anfrage! Eines unserer Teammitglieder wird Sie in Kürze kontaktieren.
Vielen Dank, dass Sie Ihre Buchung abgeschickt haben! Eines unserer Teammitglieder wird Sie in Kürze kontaktieren.
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