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
Einleitung
- Was ist OpenCL?
- OpenCL im Vergleich zu CUDA und SYCL
- Überblick über die Funktionen und Architektur von OpenCL
- Einrichtung der Entwicklungsumgebung
Erste Schritte
- Erstellung eines neuen OpenCL-Projekts in Visual Studio Code
- Untersuchung der Projektstruktur und der enthaltenen Dateien
- Kompilieren und Ausführen des Programms
- Anzeige von Ausgaben mittels printf und fprintf
Die OpenCL API
- Verständnis der Rolle der OpenCL-API im Host-Programm
- Abfrage von Geräteinformationen und -fähigkeiten mithilfe der OpenCL-API
- Erstellen von Kontexten, Befehlswarteschlangen, Puffern, Kerneln sowie Ereignissen über die OpenCL-API
- Einreichen von Befehlen wie Lesen, Schreiben, Kopieren, Zuordnen, Aufheben der Zuordnung, Ausführen und Warten via OpenCL-API
- Behandlung von Fehlern und Ausnahmen mittels der OpenCL-API
OpenCL C
- Verständnis der Rolle von OpenCL C bei der Entwicklung von Geräte-Programmen
- Schreiben von Kerneln in OpenCL C, die auf dem Zielgerät ausgeführt werden und Daten verarbeiten
- Nutzung von Datentypen, Qualifikatoren, Operatoren sowie Ausdrücken in OpenCL C
- Einsatz integrierter Funktionen aus OpenCL C – etwa mathematische oder geometrische Operationen
- Verwendung von Erweiterungen und Bibliotheken wie atomic, image sowie cl_khr_fp16 in OpenCL C
Das OpenCL Speichermodell
- Unterschiede zwischen Host- und Gerätespeichermodellen verstehen
- Einsatz von Speicherabbildern wie global, lokal, konstant oder privat in OpenCL
- Nutzung von Speicherobjekten wie Puffern, Bildern und Kanälen in OpenCL
- Festlegung von Zugriffsmodi – etwa lese- oder schreibgeschützt sowie beidseitig zugänglich
- Verständnis des Konsistenzmodells und der Synchronisationsmechanismen im OpenCL Speichermodell
Das OpenCL Ausführungsmodell
- Unterschiede zwischen Host- und Geräte-Ausführungsmodellen erkennen
- Definition von Parallelität mithilfe von Arbeits-Elementen, Arbeit-Gruppen sowie ND-Ranges in OpenCL
- Nutzung von Funktionen wie get_global_id, get_local_id oder get_group_id innerhalb von Arbeits-Elementen
- Einsatz von Gruppenfunktionen wie barrier, work_group_reduce oder work_group_scan zur Koordination in Arbeit-Gruppen
- Verwendung von Funktionen auf Geräteebene – etwa get_num_groups, get_global_size und get_local_size
Debugging
- Erkennen häufiger Fehlerquellen in OpenCL-Programmen
- Analyse von Variablen, Haltepunkten sowie des Aufrufstacks mittels des Debuggers in Visual Studio Code
- Debugging und Analyse von OpenCL-Programmen auf AMD-Hardware mit Hilfe von CodeXL
- Fehlersuche und Performance-Analyse für Intel-Hardware mithilfe von Intel VTune
- Debugging sowie Analyse von OpenCL-Programmen auf NVIDIA-Geräten mit NVIDIA Nsight
Optimierung
- Bewertung der Faktoren, die die Leistungsfähigkeit von OpenCL-Programmen beeinflussen
- Verbesserung des Rechenaufkommens durch den Einsatz vektorisierter Datentypen in OpenCL
- Reduzierung des Steuerungsaufwands und Erhöhung der Lokalität durch Schleifenaufrollung in OpenCL
- Optimierung von Speicherzugriffen und -bandbreite mittels Nutzung des lokalen Speichers sowie dazu passender Funktionen
- Messung der Ausführungszeit sowie des Ressourceneinsatzes anhand von Profiling-Techniken in OpenCL
Zusammenfassung und weitere Schritte
Voraussetzungen
- Grundkenntnisse in der C-/C++-Programmierung sowie Verständnis von Konzepten der parallelen Programmierung
- Grundlegendes Wissen über Computerarchitektur und die Hierarchie des Speichers
- Erfahrung im Umgang mit Kommandozeilenwerkzeugen sowie Code-Editoren
Zielgruppe
- Entwickler, die lernen möchten, OpenCL zur Programmierung heterogener Geräte und zur Nutzung ihrer Parallelität einzusetzen
- Entwickler, die portable und skalierbare Software entwickeln wollen, die auf verschiedenen Plattformen und Geräten ausführbar ist
- Programmierer, die tiefergehende Einblicke in die Grundlagen der heterogenen Programmierung gewinnen sowie die Leistung ihrer Programme optimieren möchten
28 Stunden