近期,Nvidia更新了其CUDAApp许可条款,新增了一项规定,明确禁止在非Nvidia硬件平台上利用翻译层运行基于CUDA的App。这一政策变动应该是为了防止ZLUDA项目以及其他GPU制造商通过翻译层使用CUDA代码,这个事情引起了业界的关注。App工程师Longhorn最先发现了这一变化,CUDA 11.5中的新条款明确指出:“禁止对使用App元素生成的任何输出进行逆向工程、反编译或解构,以将此类输出成品翻译适配至非Nvidia平台。”[color=rgba(0, 0, 0, 0.901960784313726)]
[color=rgba(0, 0, 0, 0.901960784313726)]
Nvidia硬件配合CUDA的高效性能,使其成为众多程序的首选依赖。然而,随着更多具有竞争力的硬件问世,越来越多的用户希翼能在其竞争对手的平台上运行他们的CUDA程序。实现这一目标主要有两种方法:重新编译代码(适用于程序的开发者)或使用翻译层。不难理解,使用如ZLUDA这类翻译层,在非Nvidia硬件上运行CUDA程序成为了最便捷的途径。尽管AMD和Intel已经决定不进一步开发ZLUDA,但也许只是出于法律层面的规避,并不意味着翻译技术失去了可行性。
不单单AMD和Intel,现在也有很多GPU制造商声称能够运行CUDA代码。例如,国内有家企业宣称设计出一种与CUDA/OpenCL等编程模型兼容的计算架构。如果考虑到逆向工程的难度(除非已掌握有关Nvidia GPU架构的所有底层细节),这里很可能也采用了某种翻译层技术。
显然,英伟达的CUDA生态是他最大的护城河。当第三方的翻译工具未成气候时,企业对第三方工具是睁一只眼闭一只眼,因为第三方工具的繁荣,也会促进CUDA的生态圈。但随着诸如MI300这样强劲的竞品出现时,那么老黄势必要往河里灌水了,加深护城河从而抬高竞争壁垒。即便这个市场大到自己根本吃不完,但也不能拱手让给竞争对手。
这项条款在CUDA 11.4版本中尚未出现,因此,利用CUDA 11.4及更早版本的编译器编译的应用程序,仍可在非Nvidia处理器上通过翻译层运行。从长远来看,Nvidia无疑会通过设置法律障碍,阻止在第三方硬件上通过翻译层运行CUDA程序,这对Nvidia可能是有益的,但对AMD、Intel以及其他AI计算硬件开发商则可能产生不利影响。
而重新编译现有CUDA程序仍然是完全合法的。为了简化这一过程,AMD和Intel分别提供了工具,帮助将CUDA程序移植到他们的ROCm和OpenAPI平台。
对于AMD、Intel、Tenstorrent这样的后来者来说,一方面持续推出更优秀的硬件,建立自己的App生态,吸引更多App开发者为这些新平台设计App。另一方面则利用开源社区提供的兼容工具来规避风险,也是一步高明的棋。那么未来继续是英伟达一家独大呢?还是像当下的PC市场,至少是三分天下?大家拭目以待。
|