NVIDIA 对其 CUDA 软件堆栈进行了一次重大升级,而标志性的芯片架构师 Jim Keller 认为,这可能标志着该软件独占性的结束。
可以说,迄今为止,在人工智能热潮的推动下,CUDA 在为开发者提供用于创建人工智能工作流程的特定库和框架方面,几乎垄断了 NVIDIA 的所有市场。据我们所知,没有其他公司能够成功复制如此强大的软件栈。在此基础上,NVIDIA 推出了 CUDA 的一项重大更新——CUDA Tile,它将传统的 SIMT 方法转变为基于 tile 的方法。我们将在后文中深入探讨这项更新,但芯片架构师 Jim Keller 认为,这或许标志着 CUDA 的护城河即将终结。

在此次更新之前,CUDA 赋予程序员很大的自主权,让他们可以精细调整诸如图块大小、共享内存中加载的数据以及 GPU 执行所需的计算资源等参数。但 CUDA Tile 的出现彻底改变了这一切。
NVIDIA 引入了一种基于图块的编程模型和一个名为 Tile IR 的全新底层虚拟机,它将 GPU 视为一个图块处理器。这使得程序员能够将更多精力集中在核心逻辑上,而不是 GPU 本身的复杂性上。
通过这种分块方法,NVIDIA 成功减少了手动优化,转而专注于结构化矩阵运算和卷积等高度常规的操作。其主要优势之一在于,CUDA Tile 让更广泛的用户群体能够轻松上手 GPU 编程。由于算法以抽象形式表达,板载编译器会负责确定 GPU 参数。当然,与底层实现相比,CUDA Tile 的性能会略逊一筹,但它是 NVIDIA 让 AI 惠及所有人的方法之一。
Jim Keller认为CUDA Tile能够大大简化代码移植到其他GPU(例如AMD的GPU)的过程,原因之一是分块方法在业界已十分普遍,例如Triton等框架就采用了这种方法。因此,将CUDA代码移植到Triton,然后再移植到AMD的AI芯片上,最终会变得更加容易。其次,当抽象层级提高时,开发者无需再编写特定于架构的CUDA代码,因此代码移植应该会变得更加容易。
然而,基于上述论点,我认为 CUDA Tile 实际上加强了 NVIDIA 的竞争优势,这主要是因为其背后的专有技术(例如 Tile IR)针对 NVIDIA 硬件语义进行了优化。因此,虽然移植可能会变得更容易,但实现仍然会很复杂。最终,通过简化 CUDA 编程,NVIDIA 实际上是在巩固其对 CUDA 堆栈的控制,这也是最新更新被誉为 GPU 编程领域“革命性”的原因之一。
专注于你的算法——NVIDIA CUDA Tile 负责硬件处理
NVIDIA CUDA 13.1是自 2006 年 NVIDIA CUDA 平台诞生以来最大的进步,它推出了 NVIDIA CUDA Tile。这项激动人心的创新引入了一套用于基于 tile 的并行编程的虚拟指令集,专注于以更高层次编写算法,并抽象化专用硬件(例如张量核心)的细节。
CUDA 为开发者提供了一种单指令多线程 (SIMT) 硬件和编程模型。这要求(也使)开发者能够以最大的灵活性和精确性对代码的执行方式进行细粒度控制。然而,编写性能优异的代码也需要付出相当大的努力,尤其是在跨多个 GPU 架构的情况下。
有很多库可以帮助开发者提升性能,例如 NVIDIA CUDA-X和 NVIDIA CUTLASS。CUDA Tile 引入了一种比 SIMT 更高层次的 GPU 编程新方法。
随着计算工作负载的演进,尤其是在人工智能领域,张量已成为一种基础数据类型。NVIDIA 开发了专门用于处理张量的硬件,例如 NVIDIA 张量核心 (TC) 和 NVIDIA 张量内存加速器 (TMA),它们现在已成为每款新型 GPU 架构不可或缺的一部分。
随着硬件的日益复杂,需要更多软件来辅助发挥这些功能。CUDA Tile 对张量核心及其编程模型进行了抽象,从而使使用 CUDA Tile 的代码能够兼容当前和未来的张量核心架构。
基于图块的编程允许你通过指定数据块(或称图块)来编写算法,然后定义对这些图块执行的计算。你无需逐个元素地设置算法的执行方式:编译器和运行时会自动处理这些。
图 1 显示了我们用 CUDA Tile 引入的 tile 模型与 CUDA SIMT 模型之间的概念差异。

这种编程范式在 Python 等语言中很常见,例如 NumPy 等库允许你指定矩阵等数据类型,然后用简单的代码指定并执行批量操作。底层会自动完成所有操作,你的计算过程对你来说完全透明。
CUDA Tile 的基础是 CUDA Tile IR(中间表示)。CUDA Tile IR 引入了一套虚拟指令集,使得开发者能够以 tile 操作的形式对硬件进行原生编程。开发者可以编写更高级的代码,只需进行极少的修改,即可在多代 GPU 上高效执行。
NVIDIA 并行线程执行 (PTX) 确保了 SIMT 程序的可移植性,而 CUDA Tile IR 则通过原生支持基于 tile 的程序扩展了 CUDA 平台的功能。开发者只需将数据并行程序划分为 tile 和 tile 块,CUDA Tile IR 便会负责将这些块映射到硬件资源,例如线程、内存层次结构和张量核心。
通过提升抽象层次,CUDA Tile IR 使用户能够为 NVIDIA 硬件构建更高级别的硬件专用编译器、框架和领域特定语言 (DSL)。CUDA Tile IR 用于分块编程,类似于 PTX 用于 SIMT 编程。
需要指出的是,这并非二选一的问题。GPU上的分块编程是编写GPU代码的另一种方法,但你无需在SIMT和分块编程之间做出选择;它们可以共存。当你需要SIMT时,你可以像往常一样编写内核。当你想要使用张量核心时,你需要编写分块内核。
图 2 显示了 CUDA Tile 如何融入典型软件堆栈的高级图,以及 tile 路径如何作为一条独立但与现有 SIMT 路径互补的路径而存在。

CUDA Tile IR 是绝大多数程序员与 tile 编程交互的底层。除非你正在编写编译器或库,否则你可能不需要关心 CUDA Tile IR 软件的细节。
NVIDIA cuTile Python:大多数开发者会通过 NVIDIA cuTile Python 等软件与 CUDA tile编程进行交互——cuTile Python 是 NVIDIA 的一个 Python 实现,它使用 CUDA Tile IR 作为后端。我们有一篇博文详细介绍了如何使用 cuTile-python,并提供了示例代码和文档的链接。
CUDA Tile IR:对于希望构建自己的 DSL 编译器或库的开发者来说,CUDA Tile IR 是与 CUDA Tile 进行交互的接口。CUDA Tile IR 的文档和规范包含了有关 CUDA Tile IR 编程抽象、语法和语义的信息。如果您正在编写的工具/编译器/库目前面向 PTX,那么您可以调整您的软件以使其也面向 CUDA Tile IR。
(来源:编译自wccftech)