Schulungsübersicht

Einführung

  • Was ist OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Übersicht der Funktionen und Architektur von OpenCL
  • Einrichtung der Entwicklungsumgebung

Erste Schritte

  • Erstellen eines neuen OpenCL-Projekts mit Visual Studio Code
  • Untersuchung des Projekterzeichnungs und -dateistrukturs
  • Kompilieren und Ausführen des Programms
  • Anzeigen der Ausgabe 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 zum Erstellen von Kontexten, Befehlsreihenfolgen, Puffern, Kernen und Ereignissen
  • Verwendung der OpenCL-API zur Ausführung von Befehlen wie Lesen, Schreiben, Kopieren, Zuordnen, Rückkoppelung, Ausführen und Warten
  • Fehler- und Ausnahmehandling mit der OpenCL-API

OpenCL C

  • Verständnis der Rolle von OpenCLC im Geräteprogramm
  • Schreiben von Kernen mit OpenCLC, die auf dem Gerät ausgeführt und Daten manipulieren
  • Verwendung von OpenCLC-Datentypen, Qualifizierern, Operatoren und Ausdrücken
  • Verwendung eingebaute Funktionen in OpenCLC wie mathematische, geometrische, relationale usw.
  • Verwendung von Erweiterungen und Bibliotheken in OpenCLC wie atomic, image, cl_khr_fp16 usw.

OpenCL Speicherschema

  • Unterschiede zwischen Host- und Gerätespeicherschemata verstehen
  • Verwendung von OpenCL-Speicherbereichen wie global, local, constant und private
  • Verwendung von OpenCL-Speichergegenständen wie Puffer, Bilder und Pipes
  • Verwendung der Zugriffsmodi in OpenCL, wie read-only, write-only, read-write usw.
  • Verwendung des Konsistenzschemas und Synchronisationsmechanismen in OpenCL

OpenCL Ausführungsmodell

  • Unterschiede zwischen Host- und Geräteausführungsmodellen verstehen
  • Verwendung von Work-Items, -Gruppen und ND-Bereichen in OpenCL, um die Parallelität zu definieren
  • Verwendung von Work-Item-Funktionen in OpenCL wie get_global_id, get_local_id, get_group_id usw.
  • Verwendung von Work-Gruppenfunktionen in OpenCL wie barrier, work_group_reduce, work_group_scan usw.
  • Verwendung von Geräte-Funktionen in OpenCL wie get_num_groups, get_global_size, get_local_size usw.

Debugging

  • Häufige Fehler und Bugs in OpenCL-Programmen verstehen
  • Verwendung des Visual Studio Code-Debuggers zum Überprüfen von Variablen, Haltepunkten, Aufrufstapel usw.
  • Verwendung von CodeXL zur Debugging und Analyse von OpenCL auf AMD-Geräten
  • Verwendung von Intel VTune zur Debugging und Analyse von OpenCL-Programmen auf Intel-Geräten
  • Verwendung von NVIDIA Nsight zur Debugging und Analyse von OpenCL-Programmen auf NVIDIA-Geräten

Optimierung

  • Faktoren, die die Leistung von OpenCL beeinflussen verstehen
  • Verwendung von Vektordatentypen und -verdichtungs-Techniken in OpenCL, um den Rechenleistung zu verbessern
  • Verwendung von Loop-Unrolling und Loop-Tiling Techniken, um Steuerungen zu reduzieren und die Lokalität zu erhöhen
  • Verwendung des lokalen Speichers und der entsprechenden Funktionen in OpenCL zur Optimierung von Speicherzugriffen und -bandbreite
  • Profilierungs-Techniken und Werkzeuge in OpenCL, um die Ausführungszeit und Ressourcennutzung zu messen und zu verbessern

Zusammenfassung und Weitere Schritte

Voraussetzungen

  • Grundkenntnisse der C/C++-Sprache und paralleler Programmierkonzepte
  • Grundlegende Kenntnisse der Computerausstattung und des Speicherschemas
  • Erfahrung mit Kommandozeilenwerkzeugen und Code-Editoren

Zielgruppe

  • Entwickler, die lernen möchten, wie man OpenCL zur Programmierung heterogener Geräte nutzt und deren Parallelität ausnutzt
  • Entwickler, die portable und skalierbare Code schreiben möchten, der auf verschiedenen Plattformen und Geräten ausgeführt werden kann
  • Programmierer, die sich mit den tieferen Aspekten der heterogenen Programmierung auseinandersetzen möchten und die Leistung ihres Codes optimieren wollen
 28 Stunden

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Kommende Kurse

Verwandte Kategorien