Proiectul ZLUDA a dezvoltat o implementare open source a tehnologiei CUDA pentru GPU-uri AMD, permițând execuția aplicațiilor CUDA nemodificate cu performanțe apropiate de cele ale aplicațiilor care rulează fără intermediari. Setul de instrumente publicat asigură compatibilitate binară cu aplicațiile CUDA existente construite folosind compilatorul CUDA pentru GPU-uri NVIDIA. Implementarea rulează pe stiva ROCm de la AMD și pe runtime-ul Heterogeneous Computing Interface for Portability (HIP). Codul proiectului este scris în Rust și distribuit sub licențele MIT și Apache 2.0. Acesta acceptă... Linux и Windows.
Stratul pentru organizarea lucrului CUDA pe sisteme cu GPU-uri AMD a fost dezvoltat în ultimii doi ani, dar proiectul are o istorie mai lungă și a fost creat inițial pentru a asigura funcționarea CUDA pe GPU-uri Intel. Schimbarea politicii de suport pentru GPU se explică prin faptul că la început dezvoltatorul ZLUDA a fost un angajat Intel, dar în 2021 această companie a considerat că furnizarea capacității de a rula aplicații CUDA pe GPU-uri Intel nu are interes comercial și nu a accelerat. dezvoltarea initiativei.
La începutul anului 2022, dezvoltatorul a părăsit Intel și a fost contractat de AMD pentru a dezvolta un strat pentru compatibilitatea CUDA. În timpul dezvoltării, AMD a cerut să nu facă publicitate interesului AMD față de proiectul ZLUDA și să nu facă angajări în depozitul public ZLUDA. Doi ani mai târziu, AMD a decis că rularea aplicațiilor CUDA pe GPU-uri AMD nu prezintă interes pentru afaceri, ceea ce, conform termenilor contractului, a permis dezvoltatorului să-și descopere munca. Deoarece producătorii de GPU au încetat să finanțeze proiectul, soarta acestuia depinde acum de interesul comunității și de primirea propunerilor de cooperare de la alte companii. Fără sprijin extern, proiectul se va putea dezvolta doar în direcții care sunt personal interesante pentru autor, cum ar fi DLSS (Deep Learning Super Sampling).
În forma sa actuală, nivelul de calitate al implementării este evaluat ca o versiune alfa. 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. Oferă suport minim pentru primitivele și bibliotecile cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL și NVML.
Prima lansare a aplicațiilor CUDA care rulează ZLUDA are loc cu întârzieri vizibile datorită faptului că ZLUDA compilează codul GPU. Nu există o astfel de întârziere în rulările ulterioare, deoarece codul compilat este stocat în cache. Când rulați cod compilat, performanța este aproape de cea nativă. Când rulați Geekbench pe un GPU AMD Radeon 6800 XT, versiunea ZLUDA a suitei de benchmark CUDA a funcționat considerabil mai bine decât versiunea OpenCL.

Suportul pentru API-ul oficial CUDA Driver și porțiunea de inginerie inversă a API-ului CUDA nedocumentat este implementat în ZLUDA prin înlocuirea apelurilor de funcții cu funcții similare furnizate în timpul de execuție HIP, care este similar în multe privințe cu CUDA. De exemplu, funcția cuDeviceGetAttribute() este înlocuită cu hipDeviceGetAttribute(). Compatibilitatea cu bibliotecile NVIDIA precum NVML, cuBLAS și cuSPARSE este asigurată într-un mod similar - pentru astfel de biblioteci, ZLUDA oferă biblioteci de traducere cu același nume și același set de funcții, construite ca suplimente peste biblioteci AMD similare.
Codul aplicației GPU compilat în reprezentarea PTX (Parallel Thread Execution) este mai întâi tradus de un compilator special în reprezentarea intermediară LLVM IR, pe baza căreia este generat codul binar pentru GPU-urile AMD.

Sursa: opennet.ru
