并行编程实战——CUDA编程的Tile

一、CUDA的更新

2025年12月,CUDA进行了最新的版本升级。在CUDA13.1中,推出了针对GPU的全新编程模型。英伟达的官方表示:"bringling the largest update in 20 years.". 更新的主要内容包括:

  1. NVIDIA CUDA Tile
    它是基于tile的编程模型,用于抽象化专用硬件,包括张量核心等
  2. 更精细的资源控制
    即在运行时API中引入了绿色上下文(Green context),所谓绿色上下文,就是轻量级的上下文,可以用来更精细的划分GPU SM的资源,原来只支持在驱动API中使用
  3. 多进程服务的增强
    MPS的增强是一种必然的趋势,所有的好的模型理论上都可以被引入其它的计算服务中
  4. 大规模的数学与核心库的更新
    这个是开发者喜闻乐见的,也是做底层基础建设的一种使命和责任。如在cuBLAS Blackwell的Tensor Core中引入了FP64双精度和FP32单精度处理等
  5. 全新的技术文档
    这个如果细心的话开发者应该已经感觉到了。文档已经从原来的一览到底改成了类似于书籍页的形式。更适合学习和查找

本文将重点分析一下Tile的引入及其相关技术背景和特点。

二、背景分析和说明

这次的重大更新,不是没有一点征兆的。在2024年中国团队推出了TileLang,而在开源社区OpenAI Triton等也打得火热。如果放任它们不管,前车之辙已经太多了。所以最重要的是要跟进并超越。继续把NIVIDA的生态护城河打造坚固。

随着硬件技术的不断发展,传统的开发模型如SIMT等,对开发者的要求越来越高。它不但需要开发对算法掌握的深入,更需要开发者能够将算法与GPU和CPU的编程技术有机的融合在一起。对多线程等技术要深入掌握并熟练应用。而在实际的开发中,往往这些开发耗费的时间比算法更多。特别是AI的快速发展,更需要开发者将更多的精力放到与算法相关的内容上去。这也是CUDA引入Tile的重要原因。

Tile,瓦片。无论是在CPU还是在GPU,运行调度的单元一直没有脱离任务执行本身。而杰克马说过,未来是数据时代。但理论好提出,实践还是有很大的困难的。一个是传统的思维难以改变,另外一个是沿袭过来的硬件和软件生态的改进或革命更是一个天量的成本的问题。

但永恒不变的就是变化。坐看新人崛起,对手革命,就是坐以待毙。所以NVIDIA才在推出CUDA13.1后说是20最大的更新。

三、CUDA中的tile

Tile最大的特点就是将编程的基本单元从线程转变为了Tile即数据块。而复杂的任务调度和线程处理则由编译器进行。这可以理解为在原有的开发抽象中进行了更高一层的抽象,将算法工程师从对GPU,CPU的深入认知抽象到了一个简单认知的水平。大幅的降低了相关算法开发人员的入门门槛。这种新的编程范式,极大的降低了对算法人员的要求,进一步提高了与算法本身的开发效率。其主要由有两部分组成:

CUDA Tile IR:即为Tile编程引入的新的虚拟指令集

cuTile Python:引入Python编写高性能GPU内核的领域特定语言(DSL),毕竟现在搞算法的大多使用Python

Tile模型与传统的模型的不同在于,Tile模型会把数据块划分成多个块,由编译器将其映射到相关的线程中进行执行;而传统的模型则开发者将数据同时映射到块和线程。它主要解决了以下问题:

  1. 线程的绑定
    在将线程与数据映射到物理执行单元时,涉及到了很多的技术细节和任务管理的内容。这都考验着开发者的细心耐心和技术水平
  2. 内存的处理
    内存的布局、优化以及传输等,不但需要协调软件更需要处理具体的硬件实现。而涉及缓存的命中、读取的次数以及边界的填充等,都可以直接或间接的减少内存的读写延迟并提高效率。进一步提升整体的性能
  3. 流水线
    这种技术已经很普遍,通过流水线并行协调数据和计算,最大效率的利用硬件资源。通过各种技术(如异步处理)来提高并行性
  4. 强大的内置库
    如果能够提供强大的内置库,特别是可以融合到硬件其中,那么效率的提升必然是非常明显的。在AI开发中,张量的处理就是一个非常普遍的应用。而内置张量化核心则是一个很好的处理方式
  5. 可移植
    抽象往往意味着对硬件的直接依赖性的降低,也就是说,抽象层次越高,理论上讲其跨平台(包括硬件)的移植性就越好

四、总结

本文是对CUDA编程中引入最新变化的预览(可以认为是插播一条最新消息)。这有点类似于C++标准跃升到c++11时的一种整体上的分析。CUDA不是算力基础的全部,但它是很重要的一环。所以,还是要紧紧跟随着新标准的迭代而不断的提升个人的技术认知和学习能力。

相关推荐
_风华ts3 小时前
C++ 函数封装与绑定
c++·函数指针·函数封装
ShineWinsu3 小时前
对于C++中stack和queue的详细介绍
开发语言·数据结构·c++·面试·stl·queue·stack
L_Aria4 小时前
6421. 【NOIP2019模拟11.11】匹配
c++·算法·动态规划
智者知已应修善业4 小时前
【PAT乙级真题解惑1012数字分类】2025-3-29
c语言·c++·经验分享·笔记·算法
-To be number.wan5 小时前
算法学习日记 | 双指针
c++·学习·算法
wangluoqi6 小时前
c++ 逆元 小总结
开发语言·c++
瓦特what?6 小时前
插 入 排 序
开发语言·c++
『往事』&白驹过隙;6 小时前
C/C++中的格式化输出与输入snprintf&sscanf
linux·c语言·c++·笔记·学习·iot·系统调用
Je1lyfish6 小时前
CMU15-445 (2026 Spring) Project#1 - Buffer Pool Manager
linux·数据库·c++·后端·链表·课程设计·数据库架构