可以在AMD显卡上跑CUDA软件么?

“ 感知技术 · 感触CG · 感受艺术 · 感悟心灵 ”

中国很有影响力影视特效CG动画领域自媒体

我们行业的工作多数流程环节,是高度依赖GPU显卡来进行高效工作的。如今,因为美国限制的原因,NVIDIA的高端卡受限;而另一边,由于好多软件不支持AMD的显卡,我们又无法使用有着高端卡的AMD,这就导致行业用户陷入到一个很尴尬的境地。但是如果有一种技术,可以让软件能在AMD卡上跑起来,并达到GPU显卡的功效,那岂不是美哉?今天,我们就来说说这样一种开源的技术。

近日,Andrzej Janik大神发布了ZLUDA 3,这个开源项目是为NVIDIA GPU设计的,可以让基于GPU的软件能够在其他显卡硬件上运行。

封装技术旨在使现有应用程序能够在新硬件上运行,且无需开发人员进行任何工作。之前版本的ZLUDA,可以让CUDA应用程序能够在英特尔GPU上运行,而最新发布的版本3已经支持AMD GPU。

ZLUDA已被证实可以与Blender、摄影测量应用程序3DF Zephyr和RealityCapture以及Arnold渲染器等软件一起工作,并取得了不同程度的成功。

项目开发的幕后故事

ZLUDA于2020年首次发布,最初是作为英特尔GPU上CUDA的替代品,在开源社区引起了广泛关注。

但在2021年版本2发布后不久,在没有给出任何理由的情况下,Janik宣布他无法继续开发这个项目。ZLUDA似乎就暂停了,开发者Janik从此也“销声匿迹”。然而就在本周,Janik更新了ZLUDA GitHub存储库的常见问题,并解释了他“消失”这么久的原因。

2021年,Janik在英特尔负责视觉技术团队的软件工程管理。那时候英特尔开始评估ZLUDA是否是一项潜在的官方技术,可惜英特尔最终判定“不存在在英特尔GPU上运行CUDA应用程序的商业理由”。2022年,Janik离开了公司,与AMD接洽。AMD对ZLUDA进行了两年的评估,最后也决定不再继续该项目,而后,Janik开源了更新的代码。

这个项目的开发,可以说一波三折。

ZLUDA第3版的目的,是使NVIDIA的CUDA API开发的GPU应用程序能够在AMD GPU上跑起来。这对于VFX、动态图形和可视化等行业来说,意义非常重大,因为许多关键的CG软件,尤其是渲染器,都是基于CUDA的,也就是说只支持NVIDIA。

尽管AMD有自己的技术HIP,可以移植CUDA应用程序在其硬件上运行,不过这需要软件开发人员。虽然HIP已被用于创建与AMD兼容的Redshift和Blender的Cycles渲染器版本,但是到目前为止很少有其他CG工具开发人员效仿。

相比之下,ZLUDA(其版本3实际上是基于HIP构建的)旨在使CUDA应用程序能够在AMD GPU上运行,而不用去修改。这意味着,至少在理论上实现了之前只能在NVIDIA显卡上运行的软件,现在也可以在AMD上打开使用。

目前已经测试过可以用的软件包括摄影测量应用程序3DF Zephyr和RealityCapture,以及Autodesk的Arnold渲染器。

上面这幅作品是Gleb Alexandrov用Arnold在ZLUDA环境下渲染的。算是对Arnold支持的“概念验证”:只有一个场景使用ZLUDA的OptiX实现成功渲染。

在ZLUDA下运行CUDA应用程序的速度有多快?

Janik将CUDA应用程序描述为,在AMD GPU上几乎可以原生的性能运行。就拿Blender来说,ZLUDA下的性能与本地HIP后端相似。不过,ZLUDA GitHub存储库指出,在ZLUDA下,3DF Zephyr和Reality Capture都“慢得多”。此外,许多GPU渲染器的开发人员还使用第二个NVIDA API OptiX来加速光线追踪,这也有助于提高性能。

ZLUDA对OptiX具有“最低限度”的支持,但仅限于Linux。事实上,ZLUDA-Optix(主要用于 Arnold 的“概念验证”支持)未包含在ZLUDA的可再发行版本中。

其他CG软件会在ZLUDA下的AMD GPU上运行吗?

如果没有用户测试,目前很难说其他基于CUDA的CG软件在ZLUDA下运行得有多好。

V-Ray基准测试可以在ZLUDA和HIP的“某些‘旧组合”上运行,但OctaneRender基准测试OctaneBench根本不跑不起来。

未来会有更多基于CUDA的CG应用程序在ZLUDA下运行吗?

Janik表示没有英特尔或AMD的支持,“实际上(ZLUDA)现在被抛弃了”。

尽管他表示,对任何可能推动项目发展的提议都持开放态度,但如果没有它,他只可能增加对他个人感兴趣的NVIDIA技术的支持(比如DLSS)。

另外,源代码是公开的。Janik认为,即使是目前的状态下,ZLUDA也可以被软件开发人员用作“从CUDA到HIP逐步移植”的一部分。

全文完