Die heutigen GPU-Compute-APIs
(threedots.ovh)Nvidia
Der Pionier des Marktes, mit einem ausgereiften Toolkit. Es entwickelt sich weiterhin schnell weiter, insbesondere die höherstufigen APIs. Alle von Nvidia verkauften GPUs unterstützen CUDA.
Das früher als PGI bekannte HPC SDK, das nur unter Linux nutzbar ist, hat Unterstützung für OpenACC, C++-Standardparallelisierung (stdpar) und OpenMP (Beta) hinzugefügt.
Eines der Probleme bei der Lizenzierung von Nvidias HPC SDK ist die folgende Klausel:
You shall strictly prohibit the further distribution of the Run-Time Files by users of an End-User Application
Da Nutzer eine App möglicherweise nicht weiterverteilen dürfen, wenn sie die für eine gebündelte Anwendung benötigten Laufzeitdateien enthält, könnte es sein, dass man die Anwendung überhaupt nicht verteilen kann. Dieses Problem betrifft das von den meisten verwendete CUDA SDK nicht.
AMD
Das wichtigste GPGPU-Programmiermodell auf AMD-Hardware ist ROCm. Neben HIP, das AMD gehört, werden offiziell OpenMP und OpenACC unterstützt.
Dabei gibt es einige klare Nachteile:
-
Nur Linux, und damit für einen erheblichen Teil des Marktes keine Option.
-
Mit der ROCm-Toolchain erzeugte Binärdateien zielen nicht auf eine IR, sondern sind an die Hardware gebunden. Wenn eine neue Generation erscheint, müssen die Binärdateien neu kompiliert werden.
-
Über längere Zeit nach einem Release gibt es faktisch keine Unterstützung für neue Hardware.
Diese Nachteile machen den praktischen Nutzen auf dem Desktop nahezu null und lassen OpenCL als einzige vom Hersteller bereitgestellte API für AMD-GPU-Hardware übrig.
Intel
oneAPI wird von allen kürzlich erschienenen Intel-GPUs unterstützt, bietet aber noch keine hohe Performance. Neben Intels Level Zero sind OpenMP und SYCL die offiziell unterstützten APIs.
Level Zero in oneAPI nutzt SPIR-V als IR und ermöglicht dadurch nahtlose Unterstützung für künftig erscheinende Hardware. Windows wird ebenfalls unterstützt.
Khronos
Stellt Industriestandards bereit, die bei verschiedenen Herstellern verwendet werden können.
Der als OpenCL 3.0 bekannte Reset hat bislang noch keine große Wirkung. Die Kombination aus SYCL und Vulkan Compute könnte ein besserer Weg sein, um mit guter Developer Experience ein einzelnes Binärformat über mehrere Hersteller hinweg nutzbar zu machen.
Tatsächliche OpenCL-Unterstützung:
Heute bietet Nvidia OpenCL 1.2 mit Unterstützung für Extensions an.
AMD bietet eine brauchbare OpenCL-1.2-Implementierung zusammen mit einer extrem fehlerbehafteten OpenCL-2.x-Implementierung (ohne brauchbare Möglichkeit, sie sauber zu debuggen).
Intel bietet eine OpenCL-3.0-Implementierung für Intel-GPUs an.
OpenCL 1.2 wird auch unter macOS unterstützt, einschließlich Apple Silicon, aber die Dokumentation ist als deprecated markiert.
Microsoft
C++ AMP wirkt tot. Es war vendor-unabhängig und wurde von Visual C++ unterstützt, hat aber seit D3D11 kein Update mehr erhalten. Ältere ROCm-Versionen wurden ebenfalls unterstützt.
Apple
Metal Compute ist nur für macOS/iOS/… gedacht. Im GPGPU-Bereich ist es deutlich weniger attraktiv, besonders bei der GPU-Compute-Performance.
1 Kommentare
Bei GPGPU unterscheiden sich die Gegebenheiten je nach Anbieter und OS so stark, dass ich hoffe, dass es irgendwann einmal vereinheitlicht wird.
Übrigens gibt es keine Erwähnung von DirectML unter Windows. Die breite Hardware-Unterstützung ist interessant, und in letzter Zeit wurde es sogar so eingerichtet, dass es auch unter WSL läuft.