Разработчик Анджей Яник (Andrzej Janik) опубликовал на GitHub исходный код инструментария ZLUDA для запуска CUDA-приложений на GPU AMD. Изначально проект представлял собой встроенную реализацию CUDA для работы через Intel OneAPI. В 2022 году AMD предложила разработчику финансирование для продолжения развития проекта в рамках работы по портированию инструмента для работы на графических процессорах AMD через платформу HIP/ROCm.
В настоящее время AMD фактически прекратила поддержку проекта, а Яник решил опубликовать в открытом доступе свои наработки под лицензиями Apache License 2.0 и MIT.
Профильные эксперты из Phoronix протестировали проект ZLUDA и подтвердили, что библиотека с поддержкой CUDA работает на ROCm без каких-либо необходимых модификаций.
Фактически ZLUDA позволяет разработчикам иметь доступ к поддержке CUDA для программного обеспечения, которое не оптимизировано специально для оборудования AMD. Они теперь могут использовать CUDA в качестве API рендеринга для Blender 4.0 или V-Ray. Для Blender, в котором также доступен вычислительный рендер Radeon HIP, это означает, что графические процессоры Radeon могут работать быстрее через библиотеку ZLUDA, чем через HIP.
Яник пояснил, что продолжит работу над проектом. Он планирует изучить включение Nvidia DLSS через ZLUDA на графических процессорах Radeon. Разработчик также поделился результатами собственных тестов по сравнению с реализацией OpenCL.
По информации OpenNET, в текущем виде уровень качества реализации проекта оценивается как альфа-версия. При этом ZLUDA уже может использоваться для выполнения многих CUDA-приложений, включая Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM и Arnold. Там обеспечена минимальная поддержка примитивов и библиотек cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL и NVML, а также добавлен прототип реализации фреймворка OptiX.
Первый запуск CUDA-приложений под управлением ZLUDA производится с заметными задержками, из-за того, что ZLUDA выполняет компиляцию GPU-кода. В последующих запусках подобная задержка отсутствует, так как скомпилированный код сохраняется в кэше. В процессе выполнения скомпилированного кода производительность близка к нативной.
Поддержка официального 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.
Источник: habr.com