OpenCL

OpenCL
Basisdaten
Entwickler Khronos Group
Erscheinungsjahr 28. August 2009
Aktuelle Version 3.1.2
(18. September 2026)
Aktuelle Vorabversion 3.0 provisional
(27. April 2020)
Betriebssystem plattformunabhängig
Programmier­sprache C++, C
Kategorie Programmierschnittstelle
Lizenz verschieden
www.khronos.org/opencl

OpenCL (englisch Open Computing Language) ist eine Schnittstelle für uneinheitliche Parallelrechner, die z. B. mit Haupt-, Grafik- oder digitalen Signalprozessoren ausgestattet sind. Dazu gehört die Programmiersprache „OpenCL C“. OpenCL wurde ursprünglich von der Firma Apple entwickelt, um die Leistung der aktuellen Grafikprozessoren auch für nicht-grafische Anwendungen nutzbar zu machen.

Architektur

Plattform-Modell

Ein OpenCL-System besteht aus einem Host und einem oder mehreren OpenCL-Geräten. Ein Gerät besteht aus einer oder mehreren unabhängigen Recheneinheiten (englisch „compute unit“, kurz „CU“). Dies sind bei einem Mehrkernprozessor die verfügbaren Kerne, die zusammengefasst die Central Processing Unit ergeben, und für die Grafikkarte die Shader. Die Compute Unit ist in ein oder mehrere ausführende Elemente (englisch „processing element“, kurz „PE“) unterteilt. Der Host verteilt dabei die Kernel (Programme, dt. Kerne) zur Laufzeit auf die verfügbaren Geräte.

Es gibt zwei Arten von Kernel:

OpenCL-Kernel
Diese sind in der Programmiersprache OpenCL C geschrieben. OpenCL C basiert auf ISO C99 und wurde um Funktionen und Datentypen zur parallelen Verarbeitung erweitert.
Native Kernel
Diese Kernel sind optional und implementierungsspezifisch.

Die OpenCL-Kernel werden zur Laufzeit vom OpenCL-Compiler übersetzt und danach von einem OpenCL-Gerät ausgeführt. Hierdurch braucht zur Entwicklungszeit nicht bekannt zu sein, auf welcher Hardware das Programm später ausgeführt wird.

Die Berechnungen werden zur Laufzeit von den sogenannten Work-Items durchgeführt. Diese Work-Items werden zu einem ein-, zwei- oder dreidimensionalen Gitter angeordnet, über das die Work-Items adressiert werden können. Work-Items werden zu Work-Groups gruppiert, in denen eine Synchronisation möglich ist und die auf einen gemeinsamen Speicher zugreifen können. Ein einzelnes Work-Item kann also absolut, durch seine Koordinate und relativ, durch die Koordinate der es enthaltenden Work-Group und die Koordinate innerhalb der Work-Group angesprochen werden.

Speichermodell

Speichermodell

In OpenCL werden fünf Arten von Speicher unterschieden:

OpenCL C

Die Sprache OpenCL C basiert auf der Syntax von ISO C99, erweitert um zusätzliche Datentypen und Funktionen zur parallelen Verarbeitung, wurde an anderer Stelle aber auch eingeschränkt (siehe unten). Es handelt sich somit nicht um eine Obermenge von C, dennoch haben beide Sprachen viele Gemeinsamkeiten.

Ergänzend zu den C99-Datentypen unterstützt OpenCL C folgende Datentypen:

Folgende Datentypen wurden zudem für spätere Versionen von OpenCL reserviert:

Arithmetische Operationen (+, -, *, /, %, ++, --), Vergleichsoperationen (>, >=, ==, !=, <= <), Bitoperatoren (&, |, ^, ~) sowie logische Operatoren (&&, ||) sind sowohl für skalare Datentypen definiert als auch für Vektoren. Werden sie auf Vektoren angewendet, so wird die Operation komponentenweise durchgeführt. Hier verhält sich OpenCL analog zu bekannten Shadersprachen wie zum Beispiel GLSL.

Ebenfalls den Shader-Sprachen entlehnt sind eine Reihe mathematischer Funktionen, die ebenfalls komponentenweise durchgeführt werden, beispielsweise Sinus, Cosinus, Wurzel, Minimum, Maximum etc.

Gegenüber C ist OpenCL C unter anderem in folgenden Punkten eingeschränkt:

Nutzung von OpenGL- und DirectX-Objekten

OpenCL kann direkt auf Objekte von OpenGL oder DirectX (nur unter Windows) zugreifen, etwa auf Texturen. Somit kann OpenCL genutzt werden, um beispielsweise Texturen zu ändern, ohne die Daten umkopieren zu müssen.

Erweiterungen

Wie OpenGL kann auch OpenCL durch herstellerspezifische Erweiterungen um zusätzliche Funktionen ergänzt werden. Beispiele für bereits definierte Erweiterungen sind:

Versionsgeschichte

OpenCL wurde ursprünglich von der Firma Apple entwickelt.

In Zusammenarbeit mit den Firmen AMD, IBM, Intel und Nvidia wurde der erste Entwurf ausgearbeitet und schließlich von Apple bei der Khronos Group zur Standardisierung eingereicht. Die Spezifikation für OpenCL 1.0 wurde am 8. Dezember 2008 veröffentlicht. Es folgte 1.1 im Juni 2010. Am 16. November 2011 folgte die Spezifikation 1.2 mit Verbesserungen, die zu 1.0 abwärtskompatibel bleibt. Zwei Jahre später, am 18. November 2013, wurde dann die OpenCL-2.0-Spezifikation eingeführt.

OpenCL 1.0 wurde erstmals am 28. August 2009 von Apple mit dem Betriebssystem Mac OS X Snow Leopard 10.6 auf den Markt gebracht, die dazugehörigen Programme („Kernel“) können zur Laufzeit auf verschiedene vorhandene OpenCL-fähige Geräte verteilt werden. Derzeit wird abhängig von der Hardware nur OpenCL 1.0 bis 1.2 von Apple unterstützt. Weiterer Hauptunterstützer ist AMD mit vorherigem AtiStream in Konkurrenz zu Nvidia mit CUDA. Trotz seiner primären Unterstützung von CUDA unterstützt Nvidia wegen der Nachfrage der Nutzer auch OpenCL 1.2, später mit einigen Elementen aus 2.0 und nun 2021 auch 3.0.

Mit OpenCL 2.0 kompatible Hardware unterstützt mit aktualisierten Treibern auch die höheren Versionen 2.1 und 2.2 laut Khronos-Group.

OpenCL 2.1 wurde im November 2015 offiziell freigegeben. Eine entscheidende Neuerung in OpenCL 2.1 ist die Integration von SPIR-V, dem SPIR-Nachfolger (Standard Portable Intermediate Representation). SPIR-V ist eine Zwischensprache mit nativer Unterstützung für Grafik-Shader und Prozessor-Kernels. Sie ermöglicht die Aufteilung der Compiler-Kette auf die unterschiedlichen Recheneinheiten. Somit können High-Level-Sprachen über SPIR-V die heterogene Architektur ansprechen, ohne sich selbst um die Übersetzung auf die unterschiedlichen Hardware-Komponenten zu kümmern. SPIR-V wird außer in OpenCL auch in der Vulkan-Grafik-API genutzt.

OpenCL 2.2 wurde offiziell freigegeben im Mai 2017. Als wichtigste Änderung nennt die Bekanntmachung die Integration der OpenCL C++ Kernel Language in OpenCL, was unter anderem beim Schreiben parallel arbeitender Programme helfen soll. Die im Rahmen der Open Computing Language als statische Untermenge des C++14-Standards definierte Kernel-Sprache enthält Klassen, Templates, Lambda-Ausdrücke und andere Konstrukte. Im Mai 2018 erschien ein „maintenance update“ mit Fehlerkorrekturen und Aktualisierungen in den Headern von Spir-V.

In Zukunft soll OpenCL mit Vulkan so weit wie möglich verschmelzen und so noch breitere Unterstützung gewinnen. Dies wurde mit dem Premiere Rush von Apple gezeigt, der den Open Source Compiler clspv benutzt, um einen großen Teil des OpenCL C Kernel Codes für eine Vulkan-Umgebung auf Android-Geräten zu kompilieren. Zuletzt wurde nun OpenCL Next für 2019 angekündigt mit neuen Informationen und dabei auch betont, dass die „roadmap“ von OpenCL von der von Vulkan unabhängig ist, also beide Projekte nicht völlig fusionieren werden.

Am 27. April 2020 wurde OpenCL 3.0 (provisional) veröffentlicht. Der Status Final wurde am 30. September 2020 erreicht.

Auf der IWOCL 2021 wurde Version 3.0.7 mit einigen optionalen Erweiterungen angekündigt.

Implementierungen

OpenCL kann für beliebige Betriebssysteme und Hardwareplattformen – genau wie OpenGL und OpenAL – implementiert werden. So ist in der Spezifikation von CPUs, GPUs, DSPs und dem Cell-Prozessor die Rede. Es existiert zudem eine Spezifikation für eingebettete Systeme mit reduzierten Anforderungen.

Aktuelle Implementierungen, in der Regel Open Source (mit Ausnahme von Nvidia):

Eine Liste zertifizierter Produkte liegt bei Khronos vor.

Diese müssen wie die Implementierungen die Tests der Khronos Conformance Test Suite (CTS) bestehen.

Veraltete Implementierungen

Anwendungssoftware

Viele rechenintensive Programme nutzen OpenCL zur Beschleunigung:

Grafikprogramme

3D-Renderer

Eine Software für 3D-Rendering unterstützt OpenCL

Audio

Video

Simulation

Web

Bibliotheken

Sprachenkopplung

Tutorials

Einzelnachweise

  1. ↑ V3.1.2. 18. September 2026 (abgerufen am 19. September 2026).
  2. ↑ Khronos OpenCL API Registry Spezifikation und Headerdateien (englisch)
  3. ↑ developer.amd.com (PDF)
  4. ↑ khronos.org (PDF; 1,1 MB)
  5. ↑ khronos.org (PDF; 2,8 MB)
  6. ↑ khronos.org (PDF; 0,8 MB)
  7. ↑ khronos.org (PDF; 2,8 MB)
  8. ↑ khronos.org (PDF; 1 MB)
  9. ↑ khronos.org (PDF; 2,5 MB)
  10. ↑ khronos.org (PDF; 1 MB)
  11. ↑ OpenCL im Mac. Heise, 2014.
  12. ↑ OpenCL auf dem Mac-Rechnern. Apple-Support; nur OpenCL 1.0 bis 1.2 auf den macOS-Rechnern, kein OpenCL 2.x (Stand April 2016)
  13. ↑ developer.amd.com (PDF)
  14. ↑ developer.download.nvidia.com (PDF; 1,5 MB)
  15. ↑ Khronos OpenCL Overview 2.1. (PDF; 0,7 MB) Überblick von OpenCL 2.1 (englisch).
  16. ↑ Rainald Menge-So: Khronos aktualisiert Spezifikationen für OpenCL 2.1 und SPIR-V 1.0. In: heise.de. 17. November 2015, abgerufen am 3. Februar 2024.
  17. ↑ khronos.org (PDF; 2,7 MB)
  18. ↑ khronos.org (PDF; 1,1 MB)
  19. ↑ Julia Schmidt: Khronos veröffentlicht vorläufige Spezifikation für OpenCL 2.2. In: heise.de. 19. April 2016, abgerufen am 3. Februar 2024.
  20. ↑ khronos.org
  21. ↑ khronos.org
  22. ↑ khronos.org (PDF; 3,5 MB)
  23. ↑ khronos.org (PDF; 1,4 MB)
  24. ↑ pcper.com
  25. ↑ phoronix.com
  26. ↑ github.com
  27. ↑ Vulkan Update SIGGRAPH 2019. (PDF) S. 24, abgerufen am 18. Mai 2020 (englisch).
  28. ↑ phoronix.com
  29. ↑ phoronix.com
  30. ↑ khronos.org (PDF; 2 MB)
  31. ↑ khronos.org (PDF; 1,1 MB)
  32. ↑ iwocl.org (PDF)
  33. ↑ github.com
  34. ↑ phoronix.com
  35. ↑ phoronix.com
  36. ↑ Michael Larabel: Radeon ROCm 2.4 Released With TensorFlow 2.0 Compatibility, Infinity Fabric Support. In: Phoronix. 8. Mai 2019, abgerufen am 8. Mai 2019 (englisch).
  37. ↑ phoronix.com
  38. ↑ ROCm 5.x-Versionen im AMD Documentation-Portal. In: docs.amd.com. AMD, abgerufen am 1. Dezember 2022 (englisch).
  39. ↑ Website des Clover-Projekts, Blog des Clover-Entwicklers
  40. ↑ x.org (PDF; 0,1 MB)
  41. ↑ mesamatrix.net
  42. ↑ github.com
  43. ↑ Michael Larabel: Intel Open-Sources LLVM Graphics Compiler, Compute Runtime With OpenCL 2.1+. phrononix, 16. Februar 2018, abgerufen am 22. April 2018.
  44. ↑ github.com
  45. ↑ Nvidia zu OpenCL (28. September 2009)
  46. ↑ de.download.nvidia.com (PDF; 2,2 MB)
  47. ↑ streamcomputing.eu
  48. ↑ geeks3d.com
  49. ↑ developer.nvidia.com
  50. ↑ portablecl.org
  51. ↑ portablecl.org
  52. ↑ phoronix.com
  53. ↑ portablecl.org
  54. ↑ portablecl.org
  55. ↑ portablecl.org
  56. ↑ github.com
  57. ↑ github.com
  58. ↑ github.com
  59. ↑ portablecl.org
  60. ↑ portablecl.org
  61. ↑ portablecl.org
  62. ↑ portablecl.org
  63. ↑ iwocl.org (PDF)
  64. ↑ portablecl.org
  65. ↑ portablecl.org
  66. ↑ portablecl.org
  67. ↑ phoronix.com
  68. ↑ phoronix.com
  69. ↑ phoronix.com
  70. ↑ phoronix.com
  71. ↑ phoronix.com
  72. ↑ phoronix.com
  73. ↑ s3.amazonaws.com/connect.linaro.org (Memento des Originals vom 26. Juli 2020 im Internet Archive; PDF)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
  74. ↑ git.linaro.org
  75. ↑ github.com
  76. ↑ khronos.org
  77. ↑ github.com
  78. ↑ AMD zu ATI Stream und OpenCL (Memento vom 9. August 2009 im Internet Archive) (1. Oktober 2009)
  79. ↑ amd.com
  80. ↑ geeks3d.com
  81. ↑ ARM Introduces New Graphics Processor with OpenCL Support. (Memento vom 14. November 2010 im Internet Archive) 10. Oktober 2010
  82. ↑ Intel springt mit „Sandy Bridge“ auf den OpenCL-Zug auf. 13. August 2010
  83. ↑ S3 Graphics launched the Chrome 5400E embedded graphics processor. (Memento des Originals vom 2. Dezember 2009 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis. 27. Oktober 2009
  84. ↑ VIA Brings Enhanced VN1000 Graphics Processor. (Memento vom 15. Dezember 2009 im Internet Archive) 10. Dezember 2009
  85. ↑ OpenCL Development Kit for Linux on Power (Memento des Originals vom 9. August 2011 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis. (30. Oktober 2009)
  86. ↑ freedesktop.org
  87. ↑ phoronix.com
  88. ↑ phoronix.com
  89. ↑ phoronix.com
  90. ↑ software.intel.com
  91. ↑ software.intel.com
  92. ↑ software.intel.com
  93. 1 2 github.com
  94. ↑ Need cl_khr_gl_sharing · Issue #166 · intel/compute-runtime. Abgerufen am 4. Januar 2025 (englisch).
  95. ↑ feature: add experimental support for cl-gl sharing on Linux · intel/compute-runtime@4919c7c. Abgerufen am 4. Januar 2025 (englisch).
  96. ↑ Release 23.13.26032.30 · intel/compute-runtime. Abgerufen am 4. Januar 2025 (englisch).
  97. ↑ CL/GL sharing support more texture formats · Issue #667 · intel/compute-runtime. Abgerufen am 4. Januar 2025 (englisch).
  98. ↑ amd.com
  99. ↑ khronos.org
  100. ↑ tomshardware.de
  101. ↑ phoronix.com
  102. ↑ wiki.gimp.org
  103. ↑ amd.com
  104. ↑ tomshardware.de
  105. ↑ ImageMagick: Architecture. Abgerufen am 7. August 2015.
  106. ↑ imagemagick.org
  107. ↑ agisoft.com
  108. ↑ cgpress.org
  109. ↑ darktable.org
  110. ↑ darktable.org (Memento vom 2. Mai 2016 im Internet Archive)
  111. ↑ phoronix.com
  112. ↑ phoronix.com
  113. ↑ blurate.com
  114. ↑ halcon.com
  115. ↑ tomshardware.de
  116. ↑ github.com
  117. ↑ iwocl.org (PDF)
  118. ↑ github.com
  119. ↑ ufo-core.readthedocs.io
  120. ↑ semiaccurate.com
  121. ↑ streamcomputing.eu
  122. ↑ developer.amd.com
  123. ↑ Mark Mantel: Blender 3: Künftige Cycles-X-Engine des Open-Source-Renderers ohne OpenCL. In: heise.de. 3. Mai 2021, abgerufen am 3. Februar 2024.
  124. ↑ wiki.luxcorerender.org
  125. ↑ Vergleich Konvertierung mit CPU Core i7 und verschiedenen GPU mit FLACCL
  126. ↑ github.com
  127. ↑ handbrake.fr
  128. ↑ FFmpeg mit OpenCL. Heise.de
  129. ↑ support.apple.com
  130. ↑ streamcomputing.eu
  131. ↑ streamcomputing.eu
  132. ↑ streamcomputing.eu
  133. ↑ sonycreativesoftware.com
  134. ↑ vegascreativesoftware.com
  135. ↑ s-a-m.com
  136. ↑ tomshardware.com
  137. ↑ tomshardware.de
  138. ↑ tomshardware.de
  139. ↑ asl.org.il
  140. ↑ web-docs.gsi.de (PDF; 3,4 MB)
  141. ↑ multithreadingandvfx.org (PDF; 2,3 MB)
  142. ↑ bulletphysics.org
  143. ↑ ti.com (PDF; 1,8 MB)
  144. ↑ khronos.org (PDF; 3,2 MB)
  145. ↑ software.intel.com
  146. ↑ software.intel.com
  147. ↑ manual.gromacs.org
  148. ↑ github.com
  149. ↑ iwocl.org (PDF)
  150. ↑ cadplace.de
  151. ↑ amd.com (PDF)
  152. ↑ amd.com (PDF)
  153. ↑ community.plm.automation.siemens.com (Memento vom 14. Oktober 2016 im Internet Archive; PDF)
  154. ↑ github.com
  155. ↑ github.com
  156. ↑ github.com
  157. ↑ Frederic Lardinois: WebCL Will Soon Let Web Developers Harness The Power Of Multi-Core GPUs And CPUs From The Browser. In: techcrunch.com. 19. März 2014, abgerufen am 10. März 2024 (englisch).
  158. ↑ Frederic Lardinois: WebCL Will Soon Let Web Developers Harness The Power Of Multi-Core GPUs And CPUs From The Browser. In: techcrunch.com. 19. März 2014, abgerufen am 10. März 2024 (englisch).
  159. ↑ developer.amd.com (Memento vom 16. November 2016 im Internet Archive)
  160. ↑ github.com
  161. ↑ github.com
  162. ↑ github.com
  163. ↑ github.com
  164. ↑ github.com
  165. ↑ arrayfire.com
  166. ↑ developer.amd.com (Memento vom 16. März 2015 im Internet Archive)
  167. ↑ github.com
  168. ↑ github.com
  169. ↑ github.com
  170. ↑ icl.cs.utk.edu
  171. ↑ icl.utk.edu (Memento vom 29. April 2016 im Internet Archive)
  172. ↑ github.com
  173. ↑ github.com
  174. ↑ github.com
  175. ↑ github.com
  176. ↑ github.com
  177. ↑ netlib.org
  178. ↑ github.com
  179. ↑ paralution.com
  180. ↑ thesalmons.org
  181. ↑ github.com
  182. ↑ viennacl.sourceforge.net
  183. ↑ github.com
  184. ↑ phoronix.com
  185. ↑ iwocl.org (PDF)
  186. ↑ github.com
  187. ↑ github.com
  188. ↑ github.com
  189. ↑ github.com
  190. ↑ github.com
  191. ↑ github.com
  192. ↑ github.com