Projektet ZLUDA har utvecklat en öppen implementation av CUDA-teknologin för AMD GPU:er, vilket möjliggör körning av oförÀndrade CUDA-applikationer med prestanda som ligger nÀra den för applikationer som körs utan mellanlager. Den publicerade programvaran sÀkerstÀller binÀr kompatibilitet med befintliga CUDA-applikationer som har byggts med hjÀlp av NVIDIA:s CUDA-kompilator. Implementeringen fungerar ovanpÄ AMD:s ROCm-stapel och runtime HIP (Heterogeneous-computing Interface for Portability). Projektets kod Àr skriven i Rust och distribueras under MIT- och Apache 2.0-licenser. Stödet för Linux och Windows finns.
Lager för att organisera CUDA-operationer pĂ„ system med AMD GPU:er har utvecklats under de senaste tvĂ„ Ă„ren, men projektet har en lĂ€ngre historia och skapades ursprungligen för att möjliggöra CUDA-drift pĂ„ Intel GPU:er. Ăndringen i GPU-stödpolitiken förklaras av att ZLUDA:s utvecklare först var anstĂ€lld pĂ„ Intel, men 2021 ansĂ„g företaget att möjligheten att köra CUDA-applikationer pĂ„ Intel GPU:er inte var av intresse för deras affĂ€rsverksamhet och slutade att driva utvecklingen av initiativet.
I början av 2022 sade utvecklaren upp sig frÄn Intel och tecknade ett kontrakt med AMD för att utveckla ett lager för kompatibilitet med CUDA. Under utvecklingen bad AMD att inte offentliggöra deras intresse för projektet ZLUDA och att inte göra commits i den offentliga ZLUDA-repositoriet. Efter tvÄ Är beslutade AMD att körning av CUDA-applikationer pÄ AMD GPU:er inte var av intresse för deras affÀrsverksamhet, vilket enligt kontraktsvillkoren möjliggjorde för utvecklaren att öppna sina arbeten. Eftersom GPU-tillverkare har slutat finansiera projektet beror dess framtid nu pÄ intresset frÄn gemenskapen och inkommande samarbetserbjudanden frÄn andra företag. Utan extern support kan projektet möjligtvis bara utvecklas i riktningar som Àr personligt intressanta för författaren, sÄsom DLSS (Deep Learning Super Sampling).
I sin nuvarande form bedöms kvalitetsnivÄn för implementationen som en alfa-version. ZLUDA kan dock redan anvÀndas för att köra mÄnga CUDA-applikationer, inklusive Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM och Arnold. Minimal support för primitiva och bibliotek som cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL och NVML sÀkerstÀlls.
Den första körningen av CUDA-applikationer under ZLUDA har mÀrkbara fördröjningar, eftersom ZLUDA kompilerar GPU-kod. Vid efterföljande körningar finns dessa fördröjningar inte, eftersom den komplierade koden sparas i cachen. Under körningen med den komplierade koden ligger prestandan nÀra den inhemska. Vid körningen av Geekbench-paketet pÄ GPU AMD Radeon 6800 XT visade testsatsen för CUDA, körd med ZLUDA, avsevÀrt högre prestanda Àn versionen baserad pÄ OpenCL.

Stödet för det officiella CUDA Driver API och den del av den icke-dokumenterade API CUDA som studerats genom reverse engineering implementeras i ZLUDA genom att ersÀtta funktionsanrop med liknande funktioner som tillhandahÄlls i HIP-runtime, som pÄ mÄnga sÀtt liknar CUDA. Till exempel ersÀtts funktionen cuDeviceGetAttribute() med hipDeviceGetAttribute(). PÄ liknande sÀtt sÀkerstÀlls kompatibilitet med NVIDIA-bibliotek, sÄsom NVML, cuBLAS och cuSPARSE; för sÄdana bibliotek tillhandahÄller ZLUDA översÀttande bibliotek med samma namn och samma uppsÀttning funktioner, byggda som överbyggnader över liknande AMD-bibliotek.
GPU-koden för applikationer, kompilerad till PTX (Parallel Thread Execution) representation, översÀtts av en speciell kompilator först till en mellanrepresentation av LLVM IR, varifrÄn den binÀra koden för GPU AMD genereras.

KĂ€lla: opennet.ru
