自 2021 年以来,英伟达就已经在网上公示的许可条款中禁止使用转换层在其他硬件平台上运行基于 CUDA 的软件,然而也许是由于疏忽,之前这则警告并未出现在安装过程中添加到主机系统上的文档中。
现在这则警告已添加到安装 CUDA 11.6 及更新版本时所附的最终用户许可协议(EULA)中。
这一限制似乎是为了防止像 ZLUDA 这样的项目(英特尔和 AMD最近都参与了该项目),也许更为重要的是,是为了防止一些中国 GPU 厂商借助转换层利用 CUDA 代码。
Longhorn 是一名软件工程师,他注意到了这些限制条款。“不得对使用 SDK 组件生成的软件产品的任何部分进行逆向工程、反编译或反汇编,以便转换此类软件产品、从而在非英伟达平台上运行,”已安装的 EULA 文本文件中有这样一句内容。
随 CUDA 11.4 和 11.5 版本安装的 EULA 文档中没有该条款,随之前所有版本安装的文档中可能也没有。然而,11.6 及更新版本的已安装文档中确实有该条款。
身为市场领头羊有利也有弊。
一方面,大家都依赖你;另一方面,大家都想站在你的肩膀上。
后者显然就是 CUDA 方面所发生的情况。由于事实证明 CUDA 和英伟达硬件的结合非常高效,大批程序都依赖这种结合。然而,随着更多竞争性的硬件涌入市场,更多的用户倾向于在与英伟达竞争的平台上运行其 CUDA 程序。
有两种方法可以做到这一点:重新编译代码(这种方法可供相应程序的开发人员使用),或使用转换层。
由于显而易见的原因,使用像 ZLUDA 这样的转换层是在非英伟达硬件上运行 CUDA 程序的最简单方法。你要做的就是拿来已经编译好的二进制代码,然后使用 ZLUDA 或其他转换层运行它们。ZLUDA 现在似乎举步维艰,AMD 和英特尔都放弃了进一步开发它的机会,但这并不意味着转换这种方法行不通。
显而易见,使用转换层威胁到了英伟达在加速计算领域的霸主地位,尤其是在 AI 应用领域。这可能是英伟达决定禁止使用转换层在其他硬件平台上运行 CUDA 应用程序背后的初衷。
重新编译现有的 CUDA 程序仍然完全合法。为了简化这项工作,AMD 和英特尔都有工具将 CUDA 程序分别移植到 ROCm(1)平台和 OpenAPI 平台上。
随着 AMD、英特尔、Tenstorrent 及其他公司纷纷开发更好的硬件,更多的软件开发商将倾向于针对这些平台进行设计,而英伟达的 CUDA 霸主地位可能会逐渐式微。
此外,专门针对特定处理器开发和编译的程序将不可避免地比通过转换层运行的软件运行得更好,这意味着 AMD、英特尔、Tenstorrent 及其他公司在与英伟达的较量中处于更有利的竞争地位,如果他们能得到软件开发人员大力支持的话。通用图形处理器(GPGPU)仍然是一个竞争激烈的重要领域。