Projekt ZLUDA on valmistanud avatud rakenduse CUDA tehnoloogia GPU AMD jaoks, võimaldades käitada muudetud CUDA-rakendusi lähedase jõudlusega, nagu ka rakendusi, mis töötavad ilma kihita. Avaldatud tööriistakomplekt tagab binaarse ühilduvuse olemasolevate CUDA-rakendustega, mis on kompileeritud NVIDIA GPU ja CUDA kompilaatori abil. Rakendus töötab AMD arendatava ROCm ja HIP (Heterogeneous-computing Interface for Portability) ajakava kohal. Projekti kood on kirjutatud Rust keeles ning seda levitatakse MIT ja Apache 2.0 litsentside alusel. Toetatakse tööd Linuxis ja Windowsis.
CUDA rakenduste korraldamise kiht AMD GPU süsteemides on arendatud viimased kaks aastat, kuid projekt on vanema ajalooga ja loodi algselt CUDA töö kindlustamiseks Intel GPU-del. GPU toetamist muudeti seetõttu, et ZLUDA arendaja oli algselt Intel'i töötaja, kuid 2021. aastal pidas ettevõte CUDA-rakenduste käivitamise võimalust Intel GPU-del ärihuvide seisukohalt ebaoluliseks ning ei sooritanud initsiatiivi arendamist.
2022. aasta alguses lahkus arendaja Intelist ja sõlmis lepingu AMD-ga, et arendada CUDA ühilduvuse kihti. AMD palus arenduse käigus mitte avaldada huvi ZLUDA projekti vastu ning mitte teha commite avalikku ZLUDA repositooriumisse. Kahe aasta pärast otsustas AMD, et CUDA-rakenduste käivitamine AMD GPU-del ei ole äri jaoks huvitav, mis lepingutingimuste kohaselt võimaldas arendajal oma tööd avada. Kuna GPU tootjad lõpetasid projekti rahastamise, sõltub selle saatus nüüd kogukonna huvist ja pakkumistest teistele ettevõtetele. Ilma välise toeta saab projekt areneda ainult autorile isiklikult huvipakkuvates suundades, näiteks DLSS (Deep Learning Super Sampling).
Praeguses vormis hinnatakse teostuse kvaliteedi taset alfa-versiooniks. Sellegipoolest saab ZLUDA juba kasutada paljude CUDA-rakenduste, sealhulgas Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM ja Arnold, käivitamiseks. Tagatud on minimaalne tugi primitiividele ja teekidele cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL ja NVML.
CUDA-rakenduste esimene käivitamine ZLUDA all toimimise ajal toimub märgatavate viivitustega, kuna ZLUDA kompileerib GPU koodi. Järgmiste käivitustega selline viivitus puudub, kuna kompileeritud kood salvestatakse vahemällu. Kompileeritud koodi täitmise ajal on jõudlus lähedane natiivsele. Geekbench paketi täitmisel AMD Radeon 6800 XT GPU-l saavutas CUDA testikomplekt, mille töötlemiseks kasutati ZLUDA-d, märgatavalt parema jõudluse kui OpenCL-põhine variant.

ZLUDA-s on ametlik CUDA Driver API toetus ja tagasi inseneritehnika kaudu avastatud osa dokumenteerimata CUDA API-st rakendatud funktsioonikutsungite asendamise kaudu analoogsete funktsioonidega, mida pakub HIP runtime, mis sarnaneb suures osas CUDA-le. Näiteks asendatakse funktsioon cuDeviceGetAttribute() hipDeviceGetAttribute() funktsiooniga. Samuti tagatakse ühilduvus NVIDIA raamatukogudega, nagu NVML, cuBLAS ja cuSPARSE — selliste raamatukogude jaoks pakub ZLUDA ülekanderaamatukogusid sama nime ja sama funktsioonide koguga, mis on üles ehitatud sarnaste AMD raamatukogude peale.
GPU rakenduste kood, kompileeritud PTX (Paralleelne Niit Täitmine) formaati, tõlgitakse spetsiaalse kompilaatori abil alguses LLVM IR vaheformaati, mille alusel genereeritakse binaarne kood AMD GPU-dele.

Allikas: opennet.ru
