ZLUDA 项目开发了一个适用于 AMD GPU 的开源 CUDA 技术实现,使得未经修改的 CUDA 应用程序能够在 AMD GPU 上以接近于不使用中间件的应用程序的性能运行。该工具包确保与使用 NVIDIA GPU 的 CUDA 编译器构建的现有 CUDA 应用程序的二进制兼容性。该实现基于 AMD 的 ROCm 协议栈和异构计算接口可移植性 (HIP) 运行时环境运行。项目代码使用 Rust 编写,并以 MIT 和 Apache 2.0 许可证发布。它支持 Linux и Windows.
用于在 AMD GPU 系统上组织 CUDA 工作的层已经在过去两年中开发出来,但该项目的历史更长,最初是为了确保 CUDA 在 Intel GPU 上工作而创建的。 GPU支持政策的变化可以解释为,最初ZLUDA开发人员是英特尔员工,但到2021年这家公司认为提供在英特尔GPU上运行CUDA应用程序的能力没有商业利益,因此没有加速该倡议的发展。
2022 年初,该开发人员离开英特尔,并与 AMD 签约,开发 CUDA 兼容层。在开发过程中,AMD 要求不要宣传 AMD 对 ZLUDA 项目的兴趣,也不要向公共 ZLUDA 存储库做出承诺。两年后,AMD 认为在 AMD GPU 上运行 CUDA 应用程序对企业不感兴趣,根据合同条款,这允许开发人员发现他的工作。由于 GPU 制造商已停止资助该项目,该项目的命运现在取决于社区的利益以及是否收到其他公司的合作提案。如果没有外部支持,该项目将只能向作者个人感兴趣的方向发展,例如DLSS(深度学习超级采样)。
在目前的形式中,实施的质量水平被评估为 alpha 版本。然而,ZLUDA 已经可用于运行许多 CUDA 应用程序,包括 Geekbench、3DF Zephyr、Blender、Reality Capture、LAMMPS、NAMD、waifu2x、OpenFOAM 和 Arnold。为 cuDNN、cuBLAS、cuSPARSE、cuFFT、NCCL 和 NVML 原语和库提供最低限度的支持。
由于 ZLUDA 编译 GPU 代码,运行 ZLUDA 的 CUDA 应用程序的首次启动会出现明显的延迟。由于编译后的代码存储在缓存中,因此后续运行不会出现此类延迟。运行编译代码时,性能接近本机。在 AMD Radeon 6800 XT GPU 上运行 Geekbench 时,CUDA 基准套件的 ZLUDA 版本的性能明显优于 OpenCL 版本。

对官方 CUDA 驱动程序 API 和未记录的 CUDA API 的逆向工程部分的支持是在 ZLUDA 中实现的,方法是将函数调用替换为 HIP 运行时中提供的类似函数,这在很多方面与 CUDA 相似。例如,cuDeviceGetAttribute()函数被替换为hipDeviceGetAttribute()。以类似的方式确保与 NVML、cuBLAS 和 cuSPARSE 等 NVIDIA 库的兼容性 - 对于此类库,ZLUDA 提供具有相同名称和相同功能集的翻译库,作为类似 AMD 库的附加组件构建。
编译为 PTX(并行线程执行)表示形式的 GPU 应用程序代码首先由特殊编译器翻译为 LLVM IR 中间表示形式,在此基础上生成 AMD GPU 的二进制代码。

来源: opennet.ru
