数据科学

专注于算法 – NVIDIA CUDA Tile 负责处理硬件

自2006年NVIDIA推出CUDA平台以来,CUDA 13.1将迎来一次重大突破——即将发布的NVIDIA CUDA Tile。这项令人振奋的创新引入了基于图块的并行编程虚拟指令集,旨在简化高级算法的编写,同时屏蔽专用硬件(如Tensor Core)的底层细节。

为何要对 GPU 进行平铺编程?

CUDA 为开发者提供了单指令多线程(SIMT)的硬件架构与编程模型,使其能够对代码的执行方式进行高度灵活且精细的控制。然而,要编写出高性能的代码仍需付出相当的努力,尤其是在适配多种 GPU 架构时。

有许多库能够帮助开发者提升性能,例如 NVIDIA CUDA-X 和 NVIDIA CUTLASS。其中,CUDA Tile 引入了一种比 SIMT 更高层次的 GPU 编程方法。

随着计算工作负载(尤其是人工智能领域)的不断发展,张量已成为一种基础性的数据类型。NVIDIA 已开发出专为张量运算设计的硬件,例如 NVIDIA Tensor Core(TC)和 NVIDIA Tensor Memory Accelerator(TMA),这些技术现已集成于每一款新的 GPU 架构之中。

随着硬件日益复杂,需要更多软件来充分发挥其功能。CUDA Tile 能够对 Tensor Core 及其编程模型进行抽象,使基于 CUDA Tile 编写的代码能够兼容当前及未来的 Tensor Core 架构。

基于图块的编程允许您通过定义数据块(即图块)以及在这些图块上执行的计算来实现算法。您无需手动指定算法在每个元素层面的具体执行方式,编译器和运行时系统会自动处理底层细节。

图1展示了我们引入的基于CUDA Tile的图块模型与CUDA SIMT模型之间的概念差异。

The left side represents the tile model where the application (programmer) partitions the data into blocks and the compiler maps that data onto threads. This is contrasted with the thread level, or SIMT model, where the application maps the data to both blocks and threads. The left side represents the tile model where the application (programmer) partitions the data into blocks and the compiler maps that data onto threads. This is contrasted with the thread level, or SIMT model, where the application maps the data to both blocks and threads.
图1。平铺模型(左)将数据划分为块,并由编译器将块映射到线程;SIMT模型(右)则将数据同时映射到块和线程。

这种编程范式在 Python 等语言中十分常见,例如 NumPy 等库允许你定义矩阵等数据类型,并通过简洁的代码实现批量操作。在底层,系统会自动完成相应的处理,而整个计算过程对你依然保持清晰透明。

CUDA Tile IR:图块编程的基础

CUDA Tile 的基础是 CUDA Tile IR(中间表示)。CUDA Tile IR 引入了一套虚拟指令集,能够将硬件的本地编程抽象为图块操作。开发者由此可以编写更高级别的代码,这些代码能够在多代 GPU 上高效运行,且只需极少的修改。

尽管 NVIDIA Parallel Thread Execution (PTX) 能够确保 SIMT 程序的可移植性,CUDA Tile IR 卻进一步扩展了 CUDA 平台,为基于图块的程序提供了原生支持。开发者可以专注于将数据并行程序划分为图块,而 CUDA Tile IR 则负责处理这些图块与硬件资源(如线程、内存层次结构和 Tensor Core)之间的映射。

通过提升抽象层次,CUDA Tile IR 使用户能够为 NVIDIA 硬件构建更高层次的硬件专用编译器、框架以及领域特定语言(DSL)。CUDA Tile IR 在图块编程中的作用,类似于 PTX 在 SIMT 编程中的角色。

需要指出的是,这并非二者择一的情况。GPU 上的平铺编程是一种编写 GPU 代码的补充方法,但您无需在 SIMT 与平铺编程之间做出取舍;二者可以共存。当需要使用 SIMT 时,您可以像以往一样编写内核;而当希望利用 Tensor Core 进行计算时,则可选择编写 Tile 内核。

图 2 展示了一个高级图表,说明了 CUDA Tile 在典型软件堆栈中的集成方式,以及 Tile 路径如何作为一条独立但与现有 SIMT 路径相辅相成的执行路径存在。

A diagram of how the Tile path of compilation fits into the full software stack, adjacent to the SIMT path. The SIMT path includes NVVM/LVVM and PTX, whereas the tile path includes Tile IR. A diagram of how the Tile path of compilation fits into the full software stack, adjacent to the SIMT path. The SIMT path includes NVVM/LVVM and PTX, whereas the tile path includes Tile IR.
图2展示了Tile编译路径在完整软件堆栈中的适用性,及其与邻近SIMT路径的对比。

开发者如何利用 CUDA Tile 编写 GPU 应用程序

CUDA Tile IR 是大多数程序员在进行 Tile 编程时会接触到的一层。除非您正在开发编译器或底层库,否则通常无需深入了解 CUDA Tile IR 软件的具体细节。

  1. NVIDIA cuTile Python:大多数开发者将通过 NVIDIA cuTile Python 等软件与 CUDA 图块编程进行交互。NVIDIA cuTile Python 是基于 CUDA Tile IR 后端的 NVIDIA Python 实现。我们的博文详细介绍了如何使用 cuTile-Python,并提供了示例代码及文档链接。
  2. CUDA Tile IR:对于希望构建自定义 DSL 编译器或库的开发者,可通过 CUDA Tile IR 与 CUDA 图块直接交互。CUDA Tile IR 的文档和规范涵盖了其编程抽象、语法和语义的详细信息。如果您正在开发面向 PTX 的工具、编译器或库,可以将其调整为同时支持 CUDA Tile IR。

 

视频 1。分解 CUDA Tile 的核心概念

如何获取 CUDA Tile 软件

CUDA Tile 随 CUDA 13.1 正式发布,相关详细信息(包括文档链接、GitHub 仓库及示例代码)均可在我们的 CUDA Tile 页面获取。

标签