Праект ZLUDA падрыхтаваў адкрытую рэалізацыю тэхналогіі CUDA для GPU AMD, якая дазваляе выконваць немадыфікаваныя CUDA-прыкладанні з прадукцыйнасцю, блізкай да прадукцыйнасці прыкладанняў, якія выконваюцца без праслоек. Апублікаваны інструментар забяспечвае бінарную сумяшчальнасць з існуючымі CUDA-прыкладаннямі, сабранымі пры дапамозе кампілятара CUDA для GPU NVIDIA. Рэалізацыя працуе па-над развіваецца кампаніяй AMD стэка ROCm і runtime HIP (Heterogeneous-computing Interface for Portability). Код праекту напісаны на мове Rust і распаўсюджваецца пад ліцэнзіямі MIT і Apache 2.0. Падтрымліваецца праца ў Linux и Windows.
Пласт для арганізацыі працы CUDA на сістэмах з GPU AMD распрацоўваўся апошнія два гады, але праект мае даўнейшую гісторыю і першапачаткова ствараўся для забеспячэння працы CUDA на GPU Intel. Змена палітыкі падтрымкі GPU тлумачыцца тым, што спачатку распрацоўшчык ZLUDA з'яўляўся супрацоўнікам Intel, але ў 2021 году дадзеная кампанія палічыла падаванне магчымасці запуску CUDA-прыкладанняў на GPU Intel не ўяўлялым цікавасці для бізнэсу і не стала фарсіраваць развіццё ініцыятывы.
У пачатку 2022 года распрацоўшчык звольніўся з Intel і заключыў кантракт кампаніяй AMD на распрацоўку пласта для сумяшчальнасці з CUDA. Кампанія AMD папрасіла падчас распрацоўкі не афішаваць цікавасць AMD да праекту ZLUDA і не рабіць комітаў у публічны рэпазітар ZLUDA. Праз два гады кампанія AMD вырашыла, што запуск CUDA-прыкладанняў на GPU AMD не ўяўляе цікавасці для бізнэсу, што па ўмове кантракту дазволіла распрацоўніку адкрыць свае напрацоўкі. Бо вытворцы GPU перасталі фінансаваць праект, яго лёс зараз залежыць ад цікавасці супольнасці і паступленні прапаноў аб супрацоўніцтве ад іншых кампаній. Без знешняй падтрымкі праект магчыма будзе развівацца толькі ў напрамках, цікавых асабіста аўтару, такіх як DLSS (Deep Learning Super Sampling).
У бягучым выглядзе ўзровень якасці рэалізацыі ацэньваецца як альфа-версія. Пры гэтым ZLUDA ужо можа выкарыстоўвацца для выканання шматлікіх CUDA-прыкладанняў, у тым ліку Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM і Arnold. Забяспечана мінімальная падтрымка прымітываў і бібліятэк cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL і NVML.
Першы запуск CUDA-прыкладанняў пад кіраваннем ZLUDA вырабляецца з прыкметнымі затрымкамі, з-за таго, што ZLUDA выконвае кампіляцыю GPU-кода. У наступных запусках падобная затрымка адсутнічае, бо скампіляваны код захоўваецца ў кэшы. У працэсе выканання скампіляванага кода прадукцыйнасць блізкая да натыўнай. Пры выкананні пакета Geekbench на GPU AMD Radeon 6800 XT варыянт тэставага набору для CUDA, які выконваецца пры дапамозе ZLUDA, паказаў прыкметна больш высокую прадукцыйнасць, чым варыянт на базе OpenCL.

Падтрымка афіцыйнага CUDA Driver API і вывучанай пры дапамозе зваротнага інжынірынгу часткі недакументаванага API CUDA рэалізавана ў ZLUDA праз замену выклікаў функцый на аналагічныя функцыі, якія прадстаўляюцца ў HIP runtime, які шмат у чым паходзіць на CUDA. Напрыклад, функцыя cuDeviceGetAttribute() замяняецца на hipDeviceGetAttribute(). Падобнай выявай забяспечваецца і сумяшчальнасць з бібліятэкамі NVIDIA, такімі як NVML, cuBLAS і cuSPARSE, — для падобных бібліятэк у ZLUDA падаюцца якія транслююць бібліятэкі з тым жа імем і тым жа наборам функцый, пабудаваныя ў выглядзе надбудоў над падобнымі бібліятэкамі AMD.
GPU-код прыкладанняў, скампіляваны ў прадстаўленне PTX (Parallel Thread Execution), транслюецца спецыяльным кампілятарам спачатку ў прамежкавае прадстаўленне LLVM IR, на аснове якога генеруецца бінарны код для GPU AMD.

Крыніца: opennet.ru
