Projektet ZLUDA har udviklet en direkte implementering af CUDA-teknologi til AMD GPU'er, hvilket gør det muligt at køre uforandrede CUDA-applikationer med en ydeevne, der tæt på ydeevnen af apps, der kører uden lag. Det offentliggjorte værktøj sikrer binær kompatibilitet med eksisterende CUDA-applikationer, der er bygget med CUDA-kompilatoren til NVIDIA GPU'er. Implementeringen fungerer oven på AMD's udviklede ROCm-stak og runtime HIP (Heterogeneous-computing Interface for Portability). Projektkoden er skrevet i Rust og distribueres under MIT- og Apache 2.0-licenserne. Der er support til at køre på Linux og Windows.
Lag til organisering af CUDA-arbejde på systems med AMD GPU'er har været under udvikling i de sidste to år, men projektet har en længere historie og blev oprindeligt oprettet for at muliggøre CUDA-arbejde på Intel GPU'er. Ændringen af støttestrategien for GPU'er forklares ved, at udvikleren ZLUDA i starten var ansat hos Intel, men i 2021 besluttede denne virksomhed, at muligheden for at køre CUDA-applikationer på Intel GPU'er ikke var af interesse for forretningen, og de ønskede ikke at fremme udviklingen af initiativet.
I begyndelsen af 2022 sagde udvikleren op fra Intel og indgik en kontrakt med AMD om udvikling af et lag for kompatibilitet med CUDA. AMD bad under udviklingen om ikke at offentliggøre deres interesse i projektet ZLUDA og om ikke at foretage commits i den offentlige ZLUDA-repository. Efter to år besluttede AMD, at kørsel af CUDA-applikationer på AMD GPU'er ikke var af interesse for forretningen, hvilket ifølge kontraktens bestemmelser gjorde det muligt for udvikleren at offentliggøre sine resultater. Da GPU-producenterne er stoppet med at finansiere projektet, afhænger dets skæbne nu af interessen fra fællesskabet og anmodninger om samarbejde fra andre firmaer. Uden ekstern støtte vil projektet kun kunne udvikles i retninger, der personligt interesserer forfatteren, såsom DLSS (Deep Learning Super Sampling).
I sin nuværende form vurderes kvaliteten af implementeringen som en alpha-version. ZLUDA kan dog allerede bruges til at køre mange CUDA-applikationer, herunder Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM og Arnold. Minimal support er givet for primitivere og biblioteker som cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL og NVML.
Den første kørsel af CUDA-applikationer under ZLUDA har signifikante forsinkelser, fordi ZLUDA kompilerer GPU-kode. I de efterfølgende kørsel er sådanne forsinkelser fraværende, da den kompilerede kode gemmes i cachen. Under udførelsen af den kompilerede kode er ydeevnen tæt på den native. Ved udførelsen af Geekbench-pakken på GPU AMD Radeon 6800 XT viste CUDA-testpakken, der blev kørt ved hjælp af ZLUDA, signifikant højere ydeevne end den baserede på OpenCL.

Understøttelse af det officielle CUDA Driver API og dele af den u-dokumenterede CUDA API, som blev studeret ved hjælp af reverse engineering, er implementeret i ZLUDA ved at erstatte funktion kald med tilsvarende funktioner, der leveres i HIP runtime, som ligner CUDA. For eksempel bliver funktionen cuDeviceGetAttribute() erstattet med hipDeviceGetAttribute(). På samme måde sikres der kompatibilitet med NVIDIA-biblioteker som NVML, cuBLAS og cuSPARSE - for sådanne biblioteker tilbyder ZLUDA transponerende biblioteker med samme navn og samme funktioner, bygget som overlays over lignende AMD-biblioteker.
GPU-koden for applikationer, der er kompileret til PTX (Parallel Thread Execution) format, bliver først transpileret af en specialkompilator til et mellemformat LLVM IR, hvorpå der genereres binærkode til AMD GPU'er.

Kilde: opennet.ru
