[博客翻译]AMD资助了一项基于ROCm构建的CUDA实现,实现了无缝对接:如今已开源。


原文地址:https://www.phoronix.com/review/radeon-cuda-zluda


多年来,AMD一直致力于简化将针对NVIDIA CUDA API编写的代码库移植到HIP/ROCm平台的过程,尽管如此,开发者仍需付出努力。工具集已得到改进,如HIPIFY帮助自动生成代码,但这并非简单、即时且有保障的解决方案,尤其是在追求最佳性能时。过去两年,AMD悄然资助了一项计划,旨在实现二进制兼容性,使许多基于CUDA的应用程序能够在库级别上运行于AMD ROCm堆栈之上——无需修改源代码即可直接替换。对于许多实际工作负载而言,这为终端用户提供了一种无须开发者介入就能运行CUDA软件的解决方案。以下是对这一现已成为开源项目的“秘密工程”的更多介绍,以及我对在Radeon GPU上构建的这种CUDA实现进行的一些测试和性能基准测试。

数年前,您可能还记得ZLUDA,这是一个旨在使CUDA支持Intel图形的项目。这个开源项目旨在为Intel图形提供一个可以直接替代CUDA的实现,建立在Intel oneAPI Level Zero之上。由于个人原因,ZLUDA项目最终停止了开发。然而,事实证明,该项目的开发者安杰伊·扬尼克(Andrzej Janik,当时也是Intel的雇员)在2022年被AMD雇佣,有效地将ZLUDA改编用于AMD GPU上的HIP/ROCm。在AMD与扬尼克签约之前,Intel曾考虑过发展ZLUDA,但最终放弃了这个想法,并未为该项目提供资金支持。

在过去两年中,安杰伊·扬尼克将ZLUDA应用于Radeon GPU,并取得了成功:许多CUDA软件可以在未经任何修改的情况下在HIP/ROCm上运行——或者换句话说,只需像平常一样运行二进制文件,确保加载了ZLUDA库以替代CUDA。出于未知的原因,AMD今年决定停止资助该项目,并不将其作为软件产品发布。但好消息是,合同中有一个条款规定,在这种情况下,如果合同结束,扬尼克可以将工作开源。

安杰伊·扬尼克主动联系并提供了访问AMD ROCm版新ZLUDA实现的机会,让我得以提前测试并在今天的公开宣布前进行基准测试。经过几天的测试,我的体验非常积极:确实能在ROCm上运行CUDA启用的软件,而且无需任何改动。即使是专有的渲染器等也能在这种“Radeon上的CUDA”实现中正常工作。

3.png

不过,ZLUDA的实施并不完全可靠,因为NVIDIA OptiX的支持尚未完全到位,一些不使用PTX汇编代码的功能目前也无法处理。但总体来说,作为一个单人开发者的工作,这一实现令人惊讶地强大。

对于那些关心开源代码的人,它遵循Apache 2.0或MIT双许可。Rust编程语言的爱好者会很高兴知道,该Radeon实现利用了Rust语言。

注意:在我的屏幕截图和过去两年的开发过程中,通过CUDA在Radeon GPU上暴露的设备名称仅为“图形设备”,而不是实际的AMD Radeon图形适配器与ROCm。这是因为CUDA基准测试会自动报告结果,以及其他可能具有自动化遥测的软件,为了避免泄露在CUDA下使用Radeon GPU的事实,设备名称设置为通用的“图形设备”字符串。据我所知,在今天将此Radeon上的ZLUDA代码开源后,将会更改以显示实际的Radeon显卡字符串,而不是隐藏的“图形设备”字符串。