Kontakt aufnehmen

Schulungsübersicht

Einleitung

  • Was ist OpenCL?
  • OpenCL im Vergleich zu CUDA und SYCL
  • Überblick über die Funktionen und Architektur von OpenCL
  • Einrichtung der Entwicklungsumgebung

Erste Schritte

  • Erstellung eines neuen OpenCL-Projekts in Visual Studio Code
  • Untersuchung der Projektstruktur und der enthaltenen Dateien
  • Kompilieren und Ausführen des Programms
  • Anzeige von Ausgaben mittels printf und fprintf

Die OpenCL API

  • Verständnis der Rolle der OpenCL-API im Host-Programm
  • Abfrage von Geräteinformationen und -fähigkeiten mithilfe der OpenCL-API
  • Erstellen von Kontexten, Befehlswarteschlangen, Puffern, Kerneln sowie Ereignissen über die OpenCL-API
  • Einreichen von Befehlen wie Lesen, Schreiben, Kopieren, Zuordnen, Aufheben der Zuordnung, Ausführen und Warten via OpenCL-API
  • Behandlung von Fehlern und Ausnahmen mittels der OpenCL-API

OpenCL C

  • Verständnis der Rolle von OpenCL C bei der Entwicklung von Geräte-Programmen
  • Schreiben von Kerneln in OpenCL C, die auf dem Zielgerät ausgeführt werden und Daten verarbeiten
  • Nutzung von Datentypen, Qualifikatoren, Operatoren sowie Ausdrücken in OpenCL C
  • Einsatz integrierter Funktionen aus OpenCL C – etwa mathematische oder geometrische Operationen
  • Verwendung von Erweiterungen und Bibliotheken wie atomic, image sowie cl_khr_fp16 in OpenCL C

Das OpenCL Speichermodell

  • Unterschiede zwischen Host- und Gerätespeichermodellen verstehen
  • Einsatz von Speicherabbildern wie global, lokal, konstant oder privat in OpenCL
  • Nutzung von Speicherobjekten wie Puffern, Bildern und Kanälen in OpenCL
  • Festlegung von Zugriffsmodi – etwa lese- oder schreibgeschützt sowie beidseitig zugänglich
  • Verständnis des Konsistenzmodells und der Synchronisationsmechanismen im OpenCL Speichermodell

Das OpenCL Ausführungsmodell

  • Unterschiede zwischen Host- und Geräte-Ausführungsmodellen erkennen
  • Definition von Parallelität mithilfe von Arbeits-Elementen, Arbeit-Gruppen sowie ND-Ranges in OpenCL
  • Nutzung von Funktionen wie get_global_id, get_local_id oder get_group_id innerhalb von Arbeits-Elementen
  • Einsatz von Gruppenfunktionen wie barrier, work_group_reduce oder work_group_scan zur Koordination in Arbeit-Gruppen
  • Verwendung von Funktionen auf Geräteebene – etwa get_num_groups, get_global_size und get_local_size

Debugging

  • Erkennen häufiger Fehlerquellen in OpenCL-Programmen
  • Analyse von Variablen, Haltepunkten sowie des Aufrufstacks mittels des Debuggers in Visual Studio Code
  • Debugging und Analyse von OpenCL-Programmen auf AMD-Hardware mit Hilfe von CodeXL
  • Fehlersuche und Performance-Analyse für Intel-Hardware mithilfe von Intel VTune
  • Debugging sowie Analyse von OpenCL-Programmen auf NVIDIA-Geräten mit NVIDIA Nsight

Optimierung

  • Bewertung der Faktoren, die die Leistungsfähigkeit von OpenCL-Programmen beeinflussen
  • Verbesserung des Rechenaufkommens durch den Einsatz vektorisierter Datentypen in OpenCL
  • Reduzierung des Steuerungsaufwands und Erhöhung der Lokalität durch Schleifenaufrollung in OpenCL
  • Optimierung von Speicherzugriffen und -bandbreite mittels Nutzung des lokalen Speichers sowie dazu passender Funktionen
  • Messung der Ausführungszeit sowie des Ressourceneinsatzes anhand von Profiling-Techniken in OpenCL

Zusammenfassung und weitere Schritte

Voraussetzungen

  • Grundkenntnisse in der C-/C++-Programmierung sowie Verständnis von Konzepten der parallelen Programmierung
  • Grundlegendes Wissen über Computerarchitektur und die Hierarchie des Speichers
  • Erfahrung im Umgang mit Kommandozeilenwerkzeugen sowie Code-Editoren

Zielgruppe

  • Entwickler, die lernen möchten, OpenCL zur Programmierung heterogener Geräte und zur Nutzung ihrer Parallelität einzusetzen
  • Entwickler, die portable und skalierbare Software entwickeln wollen, die auf verschiedenen Plattformen und Geräten ausführbar ist
  • Programmierer, die tiefergehende Einblicke in die Grundlagen der heterogenen Programmierung gewinnen sowie die Leistung ihrer Programme optimieren möchten
 28 Stunden

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Kommende Kurse

Verwandte Kategorien