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 OpenCL?
- OpenCL im Vergleich zu CUDA und SYCL
- Überblick über die Funktionen und Architektur von OpenCL
- Einrichten der Entwicklungsumgebung
Erste Schritte
- Erstellen eines neuen OpenCL-Projekts mit Visual Studio Code
- Erkunden der Projektstruktur und -dateien
- Kompilieren und Ausführen des Programms
- Anzeigen der Ausgabe mittels printf und fprintf
OpenCL API
- Verständnis der Rolle der OpenCL-API im Host-Programm
- Nutzung der OpenCL-API zur Abfrage von Geräteinformationen und Fähigkeiten
- Nutzung der OpenCL-API zum Erstellen von Kontexten, Befehlswarteschlangen, Puffern, Kernels und Events
- Nutzung der OpenCL-API zum Enqueuing von Befehlen, wie Lesen, Schreiben, Kopieren, Mappen, Unmappe, Ausführen und Warten
- Handhabung von Fehlern und Ausnahmen mit der OpenCL-API
OpenCL C
- Verständnis der Rolle von OpenCL C im Gerät-Programm
- Nutzung von OpenCL C zum Schreiben von Kernels, die auf dem Gerät ausgeführt werden und Daten manipulieren
- Verwendung von Datentypen, Qualifizierern, Operatoren und Ausdrücken in OpenCL C
- Nutzung von eingebauten Funktionen in OpenCL C, wie mathematische, geometrische und relationale Funktionen
- Verwendung von Erweiterungen und Bibliotheken in OpenCL C, wie atomare Operationen, Bildverarbeitung, cl_khr_fp16 usw.
OpenCL Speichermodell
- Verständnis des Unterschieds zwischen den Speichermodellen von Host und Gerät
- Nutzung der OpenCL-Speicherbereiche, wie global, lokal, konstant und privat
- Verwendung von OpenCL-Speicherobjekten, wie Puffer, Bilder und Pipes
- Nutzung der OpenCL-Speicherzugriffsmodi, wie schreibgeschützt, nur schreiben, lesen/schreiben usw.
- Verständnis des OpenCL-Konsistenzmodells für Speicher und von Synchronisierungsmechanismen
OpenCL Ausführungsmodell
- Verständnis des Unterschieds zwischen den Ausführungsmodellen von Host und Gerät
- Definition der Parallelität mittels Work-Items, Work-Groups und ND-Ranges in OpenCL
- Nutzung von Work-Item-Funktionen in OpenCL, wie get_global_id, get_local_id, get_group_id usw.
- Nutzung von Work-Group-Funktionen in OpenCL, wie Barrieren, work_group_reduce, work_group_scan usw.
- Nutzung von Gerätspezifischen Funktionen in OpenCL, wie get_num_groups, get_global_size, get_local_size usw.
Debugging
- Verständnis der häufigen Fehler und Bugs in OpenCL-Programmen
- Nutzung des Debuggers in Visual Studio Code zur Inspektion von Variablen, Breakpoints, Call-Stacks usw.
- Nutzung von CodeXL zum Debuggen und Analysieren von OpenCL-Programmen auf AMD-Geräten
- Nutzung von Intel VTune zum Debuggen und Analysieren von OpenCL-Programmen auf Intel-Geräten
- Nutzung von NVIDIA Nsight zum Debuggen und Analysieren von OpenCL-Programmen auf NVIDIA-Geräten
Optimierung
- Verständnis der Faktoren, die die Performance von OpenCL-Programmen beeinflussen
- Nutzung von Vektordatentypen und Vektorisierungstechniken in OpenCL zur Verbesserung des arithmetischen Durchsatzes
- Nutzung von Loop-Unrolling und Loop-Tiling-Techniken in OpenCL zur Reduzierung der Steuerungsüberlastung und Erhöhung der Lokalität
- Nutzung von lokalem Speicher und lokalen Speicherfunktionen in OpenCL zur Optimierung von Speicherzugriffen und Bandbreite
- Nutzung von Profiling und Profiling-Tools in OpenCL zur Messung und Verbesserung der Ausführungszeit und Ressourcennutzung
Zusammenfassung und Nächste Schritte
Voraussetzungen
- Kenntnisse in der C/C++-Sprache und in Konzepten der parallelen Programmierung
- Grundlegende Kenntnisse in Computerarchitektur und Speicherhierarchie
- Erfahrung mit Kommandozeilen-Tools und Code-Editoren
Zielgruppe
- Entwickler, die lernen möchten, wie man OpenCL zur Programmierung heterogener Geräte nutzt und deren Parallelität ausschöpft
- 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 Performance ihres Codes optimieren möchten
28 Stunden