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
- Einrichten der Entwicklungsumgebung
Erste Schritte
- Erstellen eines neuen OpenCL-Projekts mit Visual Studio Code
- Untersuchen der Projektstruktur und der Dateien
- Kompilieren und Ausführen des Programms
- Ausgabe der Ergebnisse mit printf und fprintf
OpenCL-API
- Verständnis der Rolle der OpenCL-API im Hostprogramm
- Verwendung der OpenCL-API zur Abfrage von Geräteinformationen und -fähigkeiten
- Verwendung der OpenCL-API zur Erstellung von Kontexten, Warteschlangen, Puffern, Kernen und Ereignissen
- Verwendung der OpenCL-API zum Einreichen von Befehlen, wie z. B. Lesen, Schreiben, Kopieren, Mappen, Unmappen, Ausführen und Warten
- Verwendung der OpenCL-API zur Behandlung von Fehlern und Ausnahmen
OpenCL C
- Verständnis der Rolle von OpenCL C im Geräteprogramm
- Verwendung von OpenCL C zum Schreiben von Kernen, die auf dem Gerät ausgeführt werden und Daten verarbeiten
- Verwendung von OpenCL C-Datentypen, Qualifikatoren, Operatoren und Ausdrücken
- Verwendung von eingebauten OpenCL C-Funktionen, wie z. B. mathematische, geometrische, relationale Funktionen usw.
- Verwendung von OpenCL C-Erweiterungen und Bibliotheken, wie z. B. atomar, image, cl_khr_fp16 usw.
OpenCL-Speichermodell
- Verständnis des Unterschieds zwischen Host- und Gerätespeichermodell
- Verwendung von OpenCL-Speicherräumen, wie z. B. global, lokal, konstant und privat
- Verwendung von OpenCL-Speicherobjekten, wie z. B. Puffer, Bilder und Pipes
- Verwendung von OpenCL-Speicherzugriffsmodi, wie z. B. nur Lesezugriff, nur Schreibzugriff, Lese-/Schreibzugriff usw.
- Verwendung des OpenCL-Speicherkonsistenzmodells und von Synchronisationsmechanismen
OpenCL-Ausführungsmodell
- Verständnis des Unterschieds zwischen Host- und Geräteausführungsmodell
- Verwendung von OpenCL-Arbeitselementen, Arbeitsgruppen und ND-Bereichen zur Definition der Parallelität
- Verwendung von OpenCL-Arbeitselementfunktionen, wie z. B. get_global_id, get_local_id, get_group_id usw.
- Verwendung von OpenCL-Arbeitsgruppenfunktionen, wie z. B. barrier, work_group_reduce, work_group_scan usw.
- Verwendung von OpenCL-Gerätefunktionen, wie z. B. get_num_groups, get_global_size, get_local_size usw.
Debugging
- Verständnis von häufigen Fehlern und Bugs in OpenCL-Programmen
- Verwendung des Visual Studio Code-Debuggers zur Prüfung von Variablen, Unterbrechungen, Aufrufstapel 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 der arithmetischen Durchsatzleistung
- Verwendung von OpenCL-Loop-Unrolling- und Loop-Tiling-Techniken zur Reduzierung der Steuerungsüberkopflast und Steigerung der Lokalität
- Verwendung von OpenCL-lokalen Speicher und lokalen Speicherfunktionen zur Optimierung der Speicherzugriffe und des Durchsatzs
- Verwendung von OpenCL-Profiling und Profiling-Tools zur Messung und Verbesserung der Laufzeit und der Ressourcennutzung
Voraussetzungen
- Verständnis der C/C++-Sprache und von Konzepten der parallelen Programmierung
- Grundkenntnisse der Computerarchitektur und der Speicherhierarchie
- Erfahrung mit Befehlszeilentools und Code-Editoren
Zielgruppe
- Entwickler, die lernen möchten, wie OpenCL zur Programmierung heterogener Geräte und zur Nutzung ihrer Parallelität eingesetzt wird
- Entwickler, die portablen und skalierbaren Code schreiben möchten, der auf verschiedenen Plattformen und Geräten ausgeführt werden kann
- Programmierer, die die Low-Level-Aspekte der heterogenen Programmierung erkunden und die Leistungsfähigkeit ihres Codes optimieren möchten