Das ZLUDA-Projekt hat eine offene Implementierung der CUDA-Technologie für AMD-GPUs entwickelt, die es ermöglicht, unmodifizierte CUDA-Anwendungen mit einer Leistung auszuführen, die nahe an der Leistung von Anwendungen liegt, die ohne Abstraktionen ausgeführt werden. Das veröffentlichte Toolkit gewährleistet binäre Kompatibilität mit bestehenden CUDA-Anwendungen, die mit dem CUDA-Compiler für NVIDIA-GPUs erstellt wurden. Die Implementierung läuft auf dem von AMD entwickelten ROCm-Stack und dem HIP (Heterogeneous-computing Interface for Portability) Runtime. Der Code des Projekts ist in Rust geschrieben und wird unter den Lizenzen MIT und Apache 2.0 verteilt. Die Ausführung wird sowohl in Linux als auch in Windows unterstützt.
Die Schicht zur Organisation der CUDA-Arbeit auf Systemen mit AMD-GPUs wurde in den letzten zwei Jahren entwickelt, hat jedoch eine längere Geschichte, da sie ursprünglich zur Unterstützung von CUDA auf Intel-GPUs erstellt wurde. Die Änderung der GPU-Unterstützungspolitik erklärt sich dadurch, dass der Entwickler von ZLUDA früher Mitarbeiter von Intel war, das Unternehmen jedoch 2021 das Interesse an der Bereitstellung der Möglichkeit zum Ausführen von CUDA-Anwendungen auf Intel-GPUs als nicht geschäftsrelevant einstufte und die Entwicklung der Initiative nicht vorantrieb.
Anfang 2022 verließ ein Entwickler Intel und schloss einen Vertrag mit AMD zur Entwicklung einer Schicht für die Kompatibilität mit CUDA ab. Während der Entwicklung bat AMD darum, das Interesse an dem ZLUDA-Projekt nicht öffentlich zu machen und keine Commits im öffentlichen ZLUDA-Repository durchzuführen. Nach zwei Jahren entschied AMD, dass die Ausführung von CUDA-Anwendungen auf AMD-GPUs für das Geschäft uninteressant sei, was es dem Entwickler gemäß den Vertragsbedingungen ermöglichte, seine Arbeiten offenzulegen. Da die GPU-Hersteller das Projekt nicht mehr finanzierten, hängt dessen Schicksal nun vom Interesse der Community und von Angeboten zur Zusammenarbeit anderer Unternehmen ab. Ohne externe Unterstützung könnte das Projekt möglicherweise nur in den Richtungen weiterentwickelt werden, die dem Autor persönlich interessant sind, wie DLSS (Deep Learning Super Sampling).
In seinem aktuellen Zustand wird die Qualität der Implementierung als Alpha-Version bewertet. Dennoch kann ZLUDA bereits für die Ausführung vieler CUDA-Anwendungen verwendet werden, einschließlich Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM und Arnold. Eine minimale Unterstützung von primitiven und Bibliotheken wie cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL und NVML ist gewährleistet.
Der erste Start von CUDA-Anwendungen unter ZLUDA erfolgt mit deutlichen Verzögerungen, da ZLUDA den GPU-Code kompiliert. Bei nachfolgenden Starts treten diese Verzögerungen nicht auf, da der kompilierte Code im Cache gespeichert wird. Während der Ausführung des kompilierten Codes liegt die Leistung nahe der nativen. Bei der Durchführung des Geekbench-Pakets auf der AMD Radeon 6800 XT zeigte der CUDA-Test, der mit ZLUDA durchgeführt wurde, eine deutlich höhere Leistung als die OpenCL-Variante.

Die Unterstützung des offiziellen CUDA Driver API und der durch Reverse Engineering ermittelten Teile der undocumented CUDA API ist in ZLUDA durch den Austausch von Funktionsaufrufen gegen entsprechende Funktionen, die im HIP Runtime bereitgestellt werden, realisiert, welches CUDA in vielerlei Hinsicht ähnelt. Zum Beispiel wird die Funktion cuDeviceGetAttribute() durch hipDeviceGetAttribute() ersetzt. Ebenso wird die Kompatibilität mit NVIDIA-Bibliotheken wie NVML, cuBLAS und cuSPARSE gewährleistet – für solche Bibliotheken stellt ZLUDA Translationsbibliotheken mit demselben Namen und derselben Funktionalität zur Verfügung, die als Wrapper über ähnliche AMD-Bibliotheken konstruiert sind.
Der GPU-Code von Anwendungen, der in das PTX (Parallel Thread Execution) Format kompiliert wurde, wird zunächst von einem speziellen Compiler in eine Zwischenrepräsentation LLVM IR übersetzt, auf deren Grundlage der Binärcode für die GPU AMD generiert wird.

Quelle: opennet.ru
