Der Khronos-Konzern, der für die Entwicklung der Spezifikationen der OpenGL-, Vulkan- und OpenCL-Familie verantwortlich ist, hat die finalen Spezifikationen , veröffentlicht, die die API und Erweiterungen der Programmiersprache C zur Durchführung plattformübergreifender paralleler Berechnungen unter Verwendung von Mehrkern-CPUs, GPUs, FPGAs, DSPs und anderen spezialisierten Chips definieren. Diese reichen von den in Supercomputern und Cloud-Servern eingesetzten Chips bis hin zu denjenigen, die in mobilen Geräten und eingebetteten Systemen zu finden sind. Der OpenCL-Standard ist vollständig offen und erfordert keine Lizenzgebühren.
Gleichzeitig Ein offenes OpenCL SDK mit Werkzeugen, Beispielen, Dokumentation, Header-Dateien, C++-Bindungen und C-Bibliotheken zur Entwicklung von Anwendungen, die mit OpenCL 3.0 kompatibel sind. Außerdem eine erste Implementierung von OpenCL 3.0 basierend auf dem Clang-Compiler, die sich in der Phase der Überprüfung der Patches für die Einbeziehung in die Hauptkomponente von LLVM befindet. An der Arbeit an dem Standard waren Unternehmen wie IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments und Toshiba beteiligt.
Die bemerkenswertesten :
- API OpenCL 3.0 umfasst nun alle Versionen von OpenCL (1.2, 2.x), ohne separate Spezifikationen für jede Version bereitzustellen. OpenCL 3.0 ermöglicht die Erweiterung der grundlegenden Funktionalitäten durch die Integration zusätzlicher Spezifikationen, die in Form von Optionen hinzugefügt werden, ohne den monolithischen Charakter von OpenCL 1.2/2.x zu beeinträchtigen.
- Die grundlegende Funktionalität, die der OpenCL 1.2 entspricht, wird als verpflichtend angesehen, während alle in den Spezifikationen von OpenCL 2.x angebotenen Funktionen als optional betrachtet werden. Dieser Ansatz vereinfacht die Erstellung spezialisierter Implementierungen, die mit OpenCL 3.0 kompatibel sind, und erweitert den Bereich der Geräte, auf denen OpenCL 3.0 verwendet werden kann. So können Hersteller OpenCL 3.0 unterstützen, ohne separate Funktionen von OpenCL 2.x implementieren zu müssen. Eine Abfragemethode wurde zu OpenCL 3.0 hinzugefügt, um den Zugriff auf die optionalen Funktionen der Sprache zu ermöglichen, sowie spezielle Makros.
- Die Vereinheitlichung mit zuvor veröffentlichten Spezifikationen erleichtert die Migration von Anwendungen auf OpenCL 3.0. Anwendungen, die auf OpenCL 1.2 basieren, können ohne Änderungen auf Geräten mit OpenCL 3.0 betrieben werden. Auch Anwendungen von OpenCL 2.x benötigen keinen Codewechsel, jedoch wird empfohlen, bei Nutzung von OpenCL 3.0 Prüfanforderungen hinzuzufügen, um die Unterstützung der gewünschten OpenCL 2.x-Funktionen zu evaluieren, um zukünftige Portabilität zu gewährleisten. Treiberentwickler, die Implementierungen von OpenCL besitzen, können ihre Produkte problemlos auf OpenCL 3.0 aktualisieren, indem sie lediglich die Verarbeitung von Anfragen zu bestimmten API-Aufrufen hinzufügen und im Laufe der Zeit die Funktionalität schrittweise erweitern.
- Die OpenCL 3.0-Spezifikation wurde an die Umgebung, Erweiterungen und Spezifikationen des universalen Zwischenformats SPIR-V angepasst, das ebenfalls in der Vulkan-API verwendet wird. Die Unterstützung der SPIR-V 1.3-Spezifikation wurde als optionale Funktion in den Kern von OpenCL 3.0 integriert. Durch die Nutzung des Zwischenformats wurde die Unterstützung für Untergruppenoperationen zu den Rechenkernen hinzugefügt.
- Die Unterstützung für die Erweiterung zur Ausführung von asynchronen DMA-Operationen (Asynchronous DMA), die in DSP-ähnlichen Chips mit direktem Speicherzugriff unterstützt wird, wurde hinzugefügt. Asynchronous DMA ermöglicht den Einsatz von DMA-Transaktionen für den Datenübertrag zwischen globalem und lokalem Speicher im asynchronen Modus, parallel zu den durchgeführten Berechnungen oder anderen Datenübertragungsoperationen.
- Die Spezifikation der Erweiterungen für paralleles Programmieren in der Programmiersprache C wurde auf , und die Entwicklung der Sprach-Erweiterungen OpenCL für C++ wird zugunsten des Projekts „C++ for OpenCL“ eingestellt. C++ for OpenCL ist ein Compiler, der auf Clang/LLVM basiert, und Kerne in C++ und OpenCL C in eine Zwischenrepräsentation SPIR-V oder in maschinennahe Codes. Durch die Transformation in SPIR-V wird auch die Erstellung von C++-Anwendungen ermöglicht, die die SYCL-Template-Bibliothek nutzen und die Entwicklung paralleler Anwendungen erleichtern.
- Für die Transformation von OpenCL über die Vulkan-API sind der Compiler , der OpenCL-Kerne in die Vulkan SPIR-V-Darstellung umwandelt, und die Schicht vorgesehen, um die Ausführung der OpenCL-API über Vulkan zu gewährleisten.
Quelle: opennet.ru
