OpenCL (Open Computing Language) ist ein offener, lizenzkostenfreier Standard der Khronos Group für die parallele Programmierung heterogener Systeme – also Rechnern, die verschiedene Beschleuniger kombinieren: GPUs, CPUs, DSPs und FPGAs. Die Spezifikation 1.0 erschien im Dezember 2008; initiiert wurde OpenCL von Apple, erste Implementierung war Mac OS X Snow Leopard (2009). OpenCL ist damit die offene Alternative zu Nvidias proprietärer Plattform CUDA.
So funktioniert OpenCL
Ein OpenCL-Programm besteht aus einem Host-Teil (läuft auf der CPU) und Kerneln: Funktionen in der C-basierten Sprache OpenCL C, die zur Laufzeit für das jeweilige Gerät kompiliert werden. Der Host verwaltet Command Queues, über die er Kernel zur Ausführung einreiht. Tausende Arbeitseinheiten (Work-Items) laufen dabei parallel – ähnlich wie beim GPGPU-Prinzip.
Speichermodell
- Globaler Speicher: groß, langsam, für alle Work-Items sichtbar
- Lokaler Speicher: schnell, pro Arbeitsgruppe geteilt
- Privater Speicher: Register, nur je Work-Item
- Konstanter Speicher: schreibgeschützt für alle
Die effiziente Nutzung dieser Hierarchie entscheidet über die erzielbare Leistung – derselbe Engpass wie bei CUDA.
Abgrenzung zu CUDA und OpenMP
CUDA ist Nvidias proprietäre Plattform und läuft nur auf Nvidia-Hardware; OpenCL unterstützt Geräte aller Hersteller. Während OpenMP auf geteilten Speicher (eine CPU, viele Threads) zielt, adressiert OpenCL vor allem Beschleuniger. Mit MPI kombiniert man OpenCL in großen Clustern, um viele Rechenknoten zu koppeln. OpenCL 3.0 (2020) machte viele Features optional und stellt die Kompatibilität mit älteren Versionen sicher; der moderne C++-Nachfolger aus demselben Gremium heißt SYCL.
Einsatzgebiete
- Maschinelles Lernen und neuronale Netze (siehe maschinelles Lernen)
- Bild- und Videoverarbeitung
- Wissenschaftliches Rechnen, Simulationen
- Kryptografie und Passwort-Hashing
Verwandte Grundlagen: GPGPU, Nebenläufigkeit, SIMD, OpenCL-Befehle.