Khronos veröffentlicht SYCL 2020 für heterogene Parallelprogrammierung
In der finalen Spezifikation des SYCL-Standards für OpenCL ist neben Features von oneAPI Data Parallel C++ auch Unified Shared Memory enthalten.
- Silke Hahn
Die Khronos Group, ein offenes Konsortium von Industrieunternehmen, hat die finale Spezifikation von SYCL 2020 vorgelegt. Der SYCL-Standard ist eine eingebettete, domänenspezifische Programmiersprache, die in der Parallelprogrammierung beim Schreiben von C++-Programmen als Abstraktionsschicht für die OpenCL (Open Compute Language) dient. Das Ziel des Standards ist eine erhöhte Ausdrucksfähigkeit und Vereinfachung für heterogenes Programmieren mit Modernem C++.
Langjährige Entwicklung mündet in finaler Spezifikation
Die Spezifikation ist das Ergebnis mehrjähriger Entwicklung mit Feedback aus der Industrie, und SYCL 2020 ist auf die Pläne des ISO-Komitees für die Weiterentwicklung von C++ abgestimmt. Die finale Ausgabe beruht auf C++17 und enthält rund 40 neue Features zur Reduktion des Codeumfangs sowie zur Beschleunigung von C++-Standardanwendungen. Ein Highlight dürfte Unified Shared Memory (USM) sein, wodurch laut Herausgeber Pointer im C++-Code ohne Puffer und Accessoren auskommen. Ebenfalls in der finalen Spezifikation enthalten sind neue Features von oneAPI Data Parallel C++ (DPC++) für herstellerneutrale und architekturübergreifende Schnittstellen, die neue Industriestandards setzen sollen.
Boilerplate-Code reduzieren bei der Parallelprogrammierung
Die Algorithmen der Work Groups und ihrer Untergruppen sollen nun Prozesse zwischen Work Items leichter parallel ausführen können. Beim Einsatz auf Hardware, die Beschleunigung für Reduktions-Operationen bietet, sollen Parallel Reductions Boilerplate Code vermeiden und die Performance steigern. Ähnliches gilt für den Einsatz von Zugriffsfunktionen mit integrierten Reduktions-Operationen, die ohne Boilerplate-Code auskommen und das Umsetzen von C++-Design-Patterns ermöglichen.
Im Bereich von Backend-APIs, die zur Beschleunigung dienen, ist laut Blogankündigung nun die Interoperabilität erweitert. Die Atomic Operations von SYCL sollen sich enger an den Standard-Atomics von C++ orientieren, was laut Herausgeber die Freiheit beim parallelen Programmieren erhöht. Weitere Änderungen betreffen die Class Template Argument Deduction (CTAD), die Instanzbildung von Klassen-Templates soll durch die neue Deduktion und ergänzende Template Deduction Guides einfacher geworden sein.
Hintergrund zum Hardware-Ökosystem von SYCL
SYCL (sprich: "sickle") ist übrigens kein Akronym, sondern der ursprüngliche Eigenname für das Programmiermodell, das OpenCL nach C++ bringen soll. Der OpenCL-Standard definiert wiederum Schnittstellen zur Parallelprogrammierung von Anwendungen, die auf unterschiedlichen, aber OpenCL-kompatiblen Prozessoren laufen. Die Entwicklung von SYCL hat zahlreiche Plattformen eines wachsenden Hardware-Ökosystems in den Blick gefasst – wie unter anderem GPUs (Graphic Processing Units), kundenspezifischen Chipsätze, Accelerators, DSP (Digitale Signalprozessoren) und FPGA-Chips (Field Programmable Gate Arrays).
SYCL erlaubt die parallele Ausführung auf den genannten Hardware-Komponenten und soll portierbare, wiederverwendbare Middleware-Libraries sowie -Anwendungen ermöglichen. Die wesentlichen Einsatzbereiche sind neben Künstlicher Intelligenz und Machine Learning (KI/ML) autonome Fahrzeuge, High-Performance Computing (HPC) und eingebettete beziehungsweise kundenspezifische Geräte.
Mehr Informationen lassen sich der Ankündigung im Blog der Khronos Group entnehmen. Einen kompakten Überblick bieten die FAQ zu SYCL 2020, die Khronos flankierend ins Netz gestellt hat.
(sih)