Proiectul ZLUDA a pregătit o implementare deschisă a tehnologiei CUDA pentru GPU AMD, care permite executarea aplicațiilor CUDA nemodificate cu performanțe apropiate de cele ale aplicațiilor rulate fără straturi intermediare. Toolkitul publicat oferă compatibilitate binară cu aplicațiile CUDA existente, compilate folosind compilatorul CUDA pentru GPU NVIDIA. Implementarea funcționează deasupra stivei ROCm dezvoltată de AMD și a runtime-ului HIP (Heterogeneous-computing Interface for Portability). Codul proiectului este scris în limbajul Rust și este distribuit sub licențele MIT și Apache 2.0. Se susține funcționarea pe Linux și Windows.
Stratul pentru organizarea funcționării CUDA pe sistemele cu GPU AMD a fost dezvoltat în ultimii doi ani, dar proiectul are o istorie mai îndelungată și a fost inițial creat pentru a asigura funcționarea CUDA pe GPU Intel. Schimbarea politicii de suport pentru GPU este explicată prin faptul că, la început, dezvoltatorul ZLUDA era angajat al Intel, dar în 2021, această companie a considerat că oferirea posibilității de a rula aplicații CUDA pe GPU Intel nu mai este de interes pentru afacere și nu a mai continuat dezvoltarea inițiativei.
La începutul anului 2022, dezvoltatorul a renunțat la Intel și a semnat un contract cu compania AMD pentru dezvoltarea unui strat de compatibilitate cu CUDA. Compania AMD a solicitat, în timpul dezvoltării, să nu fie făcut public interesul AMD pentru proiectul ZLUDA și să nu se facă commit-uri în depozitul public ZLUDA. După doi ani, compania AMD a decis că rularea aplicațiilor CUDA pe GPU AMD nu mai reprezintă un interes pentru afacere, ceea ce, conform contractului, a permis dezvoltatorului să își deschidă lucrările. Deoarece producătorii de GPU au încetat să financeze proiectul, soarta acestuia depinde acum de interesul comunității și de propunerile de colaborare din partea altor companii. Fără suport extern, proiectul ar putea evolua doar în direcțiile care interesează personal autorul, cum ar fi DLSS (Deep Learning Super Sampling).
În forma actuală, nivelul de calitate al implementării este evaluat ca o versiune alpha. Cu toate acestea, ZLUDA poate fi deja folosit pentru a rula multe aplicații CUDA, inclusiv Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM și Arnold. Este asigurată o suport minim pentru primitivele și bibliotecile cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL și NVML.
Primul start al aplicațiilor CUDA sub controlul ZLUDA se realizează cu întârzieri semnificative, deoarece ZLUDA compilează codul GPU. În execuțiile ulterioare, această întârziere este absentă, deoarece codul compilat este păstrat în cache. În timpul execuției codului compilat, performanța este aproape de nativ. La rularea pachetului Geekbench pe GPU AMD Radeon 6800 XT, variația setului de teste pentru CUDA, efectuată cu ajutorul ZLUDA, a arătat o performanță semnificativ mai bună decât variația bazată pe OpenCL.

Suportul pentru API-ul oficial al driverului CUDA și pentru o parte a API-ului CUDA nedocumentat, studiat prin inginerie inversă, este implementat în ZLUDA prin înlocuirea apelurilor de funcții cu funcții similare furnizate în runtime HIP, care seamănă mult cu CUDA. De exemplu, funcția cuDeviceGetAttribute() este înlocuită cu hipDeviceGetAttribute(). Similar, compatibilitatea cu bibliotecile NVIDIA, cum ar fi NVML, cuBLAS și cuSPARSE, este asigurată în ZLUDA prin furnizarea de biblioteci de translație cu același nume și același set de funcții, construite ca suprapunerii peste bibliotecile similare AMD.
Codul GPU al aplicațiilor, compilat în reprezentarea PTX (Parallel Thread Execution), este translatat de un compilator special, mai întâi în reprezentarea intermediară LLVM IR, pe baza căreia se generează cod binar pentru GPU AMD.

Sursa: opennet.ro
