Spezifikation von OpenCL 3.0 vorgestellt

Der Khronos-Konsortium, verantwortlich für die Entwicklung von Spezifikationen für die OpenGL-, Vulkan- und OpenCL-Familien, gab bekannt kündigt den Abschluss der Entwicklung der Spezifikationen OpenCL 3.0 an, die die API und Erweiterungen der Programmiersprache C für die Umsetzung plattformübergreifender paralleler Berechnungen unter Verwendung von Multi-Core-CPUs, GPUs, FPGAs, DSPs und anderen spezialisierten Chips definieren, von denen einige in Supercomputern und Cloud-Servern eingesetzt werden, bis hin zu Chips, die in mobilen Geräten und eingebetteten Systemen zu finden sind. Der OpenCL-Standard ist vollständig offen und erfordert keine Lizenzgebühren. An der Arbeit am Standard waren Unternehmen wie IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments und Toshiba beteiligt.

In der aktuellen Phase wurde der Spezifikation der Status vorläufig (provisional) zugewiesen, was die Möglichkeit einer Überarbeitung basierend auf Feedback, das über GitHubgesendet wurde, beinhaltet. Nachdem die Anmerkungen berücksichtigt wurden, erhält die Spezifikation den Status final und ein endgültiges Testset wird zur Überprüfung der Kompatibilität vorhandener Implementierungen veröffentlicht.

Spezifikation von OpenCL 3.0 vorgestellt

Die auffälligsten Beispielcodes OpenCL 3.0:

  • Die API von OpenCL 3.0 deckt nun alle Versionen von OpenCL (1.2, 2.x) ab, ohne separate Spezifikationen für jede Version bereitzustellen. OpenCL 3.0 ermöglicht die Erweiterung der grundlegenden Funktionalität durch die Integration zusätzlicher Spezifikationen, die in Form von Optionen übereinanderliegen, ohne die monolithische Natur von OpenCL 1.2/2.x zu blockieren.
  • Als verpflichtend wird nur die Funktionalität betrachtet, die OpenCL 1.2 entspricht, während alle in den Spezifikationen von OpenCL 2.x vorgeschlagenen Funktionen als optional angesehen werden. Dieser Ansatz vereinfacht die Erstellung spezialisierter Implementierungen, die mit OpenCL 3.0 kompatibel sind, und erweitert die Palette der Geräte, auf denen OpenCL 3.0 verwendet werden kann. Beispielsweise können Hersteller die Unterstützung für OpenCL 3.0 implementieren, ohne die einzelnen Funktionen von OpenCL 2.x bereitzustellen. Um auf die optionalen Funktionen der Sprache in OpenCL 3.0 zuzugreifen, wurde ein System von Abfrageprüfungen hinzugefügt, das die Unterstützung einzelner API-Elemente einschätzen lässt sowie spezielle Makros.
  • Die Vereinheitlichung mit zuvor veröffentlichten Spezifikationen erleichtert die Portierung von Anwendungen auf OpenCL 3.0. Anwendungen von OpenCL 1.2 können auf Geräten mit Unterstützung für OpenCL 3.0 ohne Änderungen betrieben werden. Anwendungen von OpenCL 2.x erfordern ebenfalls keine Codeänderungen, aber wenn die OpenCL 3.0-Umgebung die erforderliche Funktionalität bereitstellt (um die Portabilität zukünftiger OpenCL 2.x-Anwendungen zu gewährleisten, wird empfohlen, Überprüfungsanfragen hinzuzufügen, um die Unterstützung vorhandener OpenCL 2.x-Funktionen zu bewerten). Treiberentwickler mit OpenCL-Implementierungen können ihre Produkte einfach auf OpenCL 3.0 aktualisieren, indem sie lediglich die Verarbeitung von Anfragen zu bestimmten API-Aufrufen hinzufügen und im Laufe der Zeit schrittweise die Funktionalität erweitern.
  • Die Spezifikation OpenCL 3.0 wurde angepasst an die Umgebung, Erweiterungen und Spezifikationen der universellen Zwischenrepräsentation SPIR-V, die auch in der Vulkan-API verwendet wird. Die Unterstützung für die SPIR-V-Spezifikation 1.3 wurde als optionale Möglichkeit in den Kern von OpenCL 3.0 aufgenommen. Durch die Verwendung der Zwischenrepräsentation SPIR-V wurde Unterstützung für Operationen mit Untergruppen hinzugefügt.
    Spezifikation von OpenCL 3.0 vorgestellt
  • Unterstützung für die Erweiterung zur Durchführung von asynchronen DMA-Operationen (Asynchronous DMA) wurde hinzugefügt, die in DSP-ähnlichen Chips mit direktem Speicherzugriff unterstützt wird. Asynchronous DMA ermöglicht die Verwendung von DMA-Transaktionen zum Übertragen von Daten 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 Version 3.0, und die Entwicklung von Sprach-Erweiterungen für OpenCL in C++ wurde zugunsten des Projekts „C++ for OpenCL“ eingestellt. C++ for OpenCL ist ein auf Clang/LLVM basierender Compiler und transformiert Kerne in C++ und OpenCL C in die Zwischenrepräsentation SPIR-V oder niedrigstufigen Maschinencode. Durch die Transformation in SPIR-V wird auch das Zusammenstellen von C++-Anwendungen ermöglicht, die die Template-Bibliothek SYCL nutzen, die die Erstellung paralleler Anwendungen vereinfacht.

    Spezifikation von OpenCL 3.0 vorgestellt
  • Für die Übersetzung von OpenCL über die Vulkan-API werden die Compiler clspv, der OpenCL-Kerne in das Vulkan SPIR-V-Format umwandelt, und die Schicht clvk bereitgestellt, um die Ausführung der OpenCL-API über Vulkan zu ermöglichen.

    Spezifikation von OpenCL 3.0 vorgestellt

Quelle: opennet.ru

60GB SSD 8Gb DDR4