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 die 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
- Ausgabe anzeigen mit printf und fprintf
OpenCL-API
- Verstehen 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 Ereignissen
- Nutzung der OpenCL-API zum Einfügen von Befehlen wie Lesen, Schreiben, Kopieren, Map pen, Unmap pen, Ausführen und Warten
- Umgang mit Fehlern und Ausnahmen mittels OpenCL-API
OpenCL-C
- Verstehen der Rolle von OpenCL-C im Geräteprogramm
- Nutzung von OpenCL-C zum Schreiben von Kernels, die auf dem Gerät ausgeführt werden und Daten manipulieren
- Nutzung von Datentypen, Qualifiern, Operatoren und Ausdrücken in OpenCL-C
- Nutzung eingebauter Funktionen in OpenCL-C, wie z.B. mathematische, geometrische oder relationale Funktionen
- Nutzung von Erweiterungen und Bibliotheken in OpenCL-C, wie z.B. atomare Operationen, Bildverarbeitung, cl_khr_fp16 usw.
OpenCL-Speichermodell
- Verstehen des Unterschieds zwischen den Speichermodellen von Host und Gerät
- Nutzung der Speicherräume in OpenCL, wie globaler, lokaler, konstanter und privater Speicher
- Nutzung von Speicherobjekten in OpenCL, wie Puffer, Bilder und Pipes
- Nutzung der Speicherzugriffsmodi in OpenCL, wie schreibgeschützt, nur-schreibend, Lese-und-Schreibzugriff usw.
- Nutzung des Speicherkonsistenzmodells und der Synchronisationsmechanismen in OpenCL
OpenCL-Ausführungsmodell
- Verstehen des Unterschieds zwischen den Ausführungsmodellen von Host und Gerät
- Nutzung von Work-Items, Work-Groups und ND-Ranges in OpenCL zur Definition der Parallelität
- 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 Barrier, work_group_reduce, work_group_scan usw.
- Nutzung von Gerätefunktionen in OpenCL, wie get_num_groups, get_global_size, get_local_size usw.
Debugging
- Verständnis gängiger Fehler und Bugs in OpenCL-Programmen
- Nutzung des Debuggers von Visual Studio Code zum Inspektionieren von Variablen, Breakpoints, Callstacks 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 Performanz von OpenCL-Programmen beeinflussen
- Nutzung von Vektordatentypen und Vektorisierungstechniken in OpenCL zur Verbesserung des arithmetischen Durchsatzes
- Nutzung von Techniken wie Schleifenentrollung und Tiling in OpenCL zur Reduzierung der Steuerungskosten und Erhöhung der Lokalität
- Nutzung von lokalem Speicher und lokalen Speicherfunktionen in OpenCL zur Optimierung von Speicherzugriffen und Bandbreite
- Nutzung des Profilings und entsprechender 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 Konzepten der parallelen Programmierung
- Grundlegende Kenntnisse der Computerarchitektur und Speicherschichtstruktur
- Erfahrung mit Kommandozeilentools 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 Performanz ihres Codes optimieren möchten
28 Stunden