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.
Dauer 28 Stunden
Schulungsübersicht
Einführung
- Was ist OpenCL?
- OpenCL vs. CUDA vs. SYCL
- Überblick über OpenCL-Funktionen und -Architektur
- Einrichtung der Entwicklungsumgebung
Erste Schritte
- Erstellen eines neuen OpenCL-Projekts mit Visual Studio Code
- Erkundung der Projektstruktur und Dateien
- Kompilieren und Ausführen des Programms
- Anzeigen der Ausgabe mit printf und fprintf
OpenCL API
- Verständnis der Rolle der OpenCL-API im Host-Programm
- Verwendung der OpenCL-API zur Abfrage von Geräteinformationen und -fähigkeiten
- Verwendung der OpenCL-API zum Erstellen von Kontexten, Command Queues, Puffern, Kernels und Events
- Verwendung der OpenCL-API zum Enqueneing von Befehlen wie Lesen, Schreiben, Kopieren, Mappen, Unmapen, Ausführen und Warten
- Verarbeitung von Fehlern und Ausnahmen mit der OpenCL-API
OpenCL C
- Verständnis der Rolle von OpenCL C im Geräteprogramm
- Verwendung von OpenCL C zum Schreiben von Kernels, die auf dem Gerät ausgeführt werden und Daten manipulieren
- Verwendung von Datentypen, Qualifiern, Operatoren und Ausdrücken in OpenCL C
- Verwendung eingebaute Funktionen in OpenCL C, wie z. B. Mathematik, Geometrie, Relationen usw.
- Verwendung von Erweiterungen und Bibliotheken in OpenCL C, wie z. B. atomar, image, cl_khr_fp16 usw.
OpenCL-Speichermodell
- Verständnis des Unterschieds zwischen den Speichermodellen für Host und Gerät
- Verwendung von OpenCL-Speicherräumen wie global, lokal, konstant und privat
- Verwendung von OpenCL-Speicherobjekten wie Puffer, Bilder und Pipes
- Verwendung von OpenCL-Speicherzugriffsmodi wie nur-Lesen, nur-Schreiben, Lesen-Schreiben usw.
- Verwendung des OpenCL-Speicherkonsistenzmodells und von Synchronisationsmechanismen
OpenCL-Ausführungsmodell
- Verständnis des Unterschieds zwischen den Ausführungsmodellen für Host und Gerät
- Verwendung von OpenCL Work-Items, Work-Groups und ND-Ranges zur Definition der Parallelität
- Verwendung von OpenCL Work-Item-Funktionen wie get_global_id, get_local_id, get_group_id usw.
- Verwendung von OpenCL Work-Group-Funktionen wie barrier, work_group_reduce, work_group_scan usw.
- Verwendung von OpenCL-Gerätefunktionen wie get_num_groups, get_global_size, get_local_size usw.
Fehlerbehebung
- Verständnis häufiger Fehler und Bugs in OpenCL-Programmen
- Verwendung des Visual Studio Code-Debuggers zur Untersuchung von Variablen, Haltepunkten, Aufrufstack usw.
- Verwendung von CodeXL zum Debuggen und Analysieren von OpenCL-Programmen auf AMD-Geräten
- Verwendung von Intel VTune zum Debuggen und Analysieren von OpenCL-Programmen auf Intel-Geräten
- Verwendung von NVIDIA Nsight zum Debuggen und Analysieren von OpenCL-Programmen auf NVIDIA-Geräten
Optimierung
- Verständnis der Faktoren, die die Leistung von OpenCL-Programmen beeinflussen
- Verwendung von OpenCL-Vektordatentypen und Vektorisierungstechniken zur Verbesserung des arithmetischen Durchsatzs
- Verwendung von OpenCL-Loop-Unrolling und Loop-Tiling-Techniken zur Reduzierung der Steuerungsüberlastung und Erhöhung der Lokalität
- Verwendung von OpenCL-lokalen Speichern und lokalen Speicherfunktionen zur Optimierung von Speicherzugriffen und -bandbreite
- Verwendung von OpenCL-Profiling und Profiling-Werkzeugen zur Messung und Verbesserung der Ausführungszeit und Ressourcennutzung
Voraussetzungen
- Verständnis der C/C++-Programmiersprache und Konzepte der parallelen Programmierung
- Grundkenntnisse in der Computerarchitektur und der Speichenhierarchie
- Erfahrung mit Command-Line-Werkzeugen und Code-Editoren
Zielgruppe
- Entwickler, die lernen möchten, wie man OpenCL verwendet, um heterogene Geräte zu programmieren und deren Parallelität auszuschöpfen
- Entwickler, die portablen und skalierbaren Code schreiben möchten, der auf verschiedenen Plattformen und Geräten ausgeführt werden kann
- Programmierer, die die tieferen Ebenen der heterogenen Programmierung erkunden und die Code-Performance optimieren möchten