TileLang Puzzle 第一课
GPU发展的三个时代
- 图形加速时代(1963-2006):核心目标为3D图形渲染加速,硬件采用固定管线设计,缺乏灵活性。
- 通用计算时代(2006-2017):NVIDIA发布GeForce 8800及CUDA,引入统一着色器架构,GPU转变为可编程并行处理器。
- AI工厂时代(2018至今):大模型参数量级爆发,GPU从单卡计算转向集群互联,数据中心演变为7x24小时的Token生产工厂。
CUDA生态的护城河
- 编程抽象简化:CUDA提供了Thread、Warp、Block、Grid的四层编程抽象,使开发者无需伪装成图形操作即可编写并行程序。
- 软硬件协同壁垒:NVIDIA通过cuDNN等高度优化的深度学习原语库,与PyTorch、TensorFlow等主流框架深度绑定,形成了难以跨越的生态壁垒。
SIMT执行模型与线程组织
针对GPU的并行计算特点,会议详细拆解了SIMT(单指令多线程)执行模型及其线程层级结构。
- 并行计算执行模型对比
- SIMD(单指令多数据):CPU向量扩展(如AVX)常用模型,要求数据对齐,编译器可见向量宽度。
- SIMT(单指令多线程):GPU核心模型,线程独立执行标量程序,硬件以Warp(线程束)为单位进行指令发射,兼顾编程灵活性与硬件吞吐。
- MIMD(多指令多数据):多核CPU及分布式集群模型,每个核心独立执行不同指令流。
- CUDA线程层级结构
- Warp(线程束):通常由32个线程组成,是SM(流式多处理器)的基本调度单元,共享程序计数器(PC)。
- Block(线程块):由多个Warp组成,Block内线程可通过共享内存通信,Block之间无法直接通信。
- Grid(网格):由多个Block组成,对应一个Kernel(核函数)的执行范围。
性能优化核心策略
针对GPU算力无法充分释放的问题,会议从分支处理、访存优化及多卡互联三个维度提出了具体优化方案。
- 分支发散与控制流优化
Warp内串行化风险
当Warp内线程执行不同分支路径时,硬件会通过Active Mask分批执行,极端情况下(32条不同路径)会导致并行度降至零。
优化策略:建议将条件判断设计在Warp边界而非Thread边界,尽量让同一Warp内的线程走相同的控制流路径。 - 访存瓶颈与数据搬运
冯诺依曼瓶颈:
计算单元与存储单元分离导致数据搬运成为主要性能瓶颈,尤其在AI训练中涉及海量梯度数据交换。
内存层次化利用:遵循“少搬、近搬、提前搬”的原则,将频繁访问的数据置于共享内存或寄存器,利用异步拷贝(Async Copy)实现计算与数据传输的重叠。 - 多GPU互联与扩展性
互联带宽演进:
NVLink带宽从2016年的160GB/s增长至2026年Rubin架构的3600GB/s,增长超22倍,远超摩尔定律。
集群化设计:通过NVSwitch实现全互联拓扑,如Blackwell架构的GB200 NVL72机柜,将系统带宽提升至130TB/s,以支撑万亿参数模型的训练。
五、QA 环节 - 关于性能优化与工具链
- 【提问人】NCU报告显示Grid太小,Grid大小如何确定?
- 【回答人】建议结合具体硬件特征(如Data Sheet)进行优化,不同硬件迭代快,需针对性调整。推荐利用AI Agent辅助解决具体问题。
- 【提问人】手写Kernel和Agent生成Kernel的未来趋势如何?
- 【回答人】两者是互补关系。Agent可降低通用算子开发门槛,但在高性能极致优化或精细化控制场景下,仍需手动编写。
- 【提问人】UDA、PyTorch、cuBLAS哪个更适合作为学习参考?
- 【回答人】建议从CUDA入手建立历史观,了解技术演进;若追求效率可直接基于最新框架(如Triton/TileLang)学习,后者已封装底层细节。
- 关于应用场景与开发建议
【提问人】对于超大内存应用,是否有类似Out-of-Core的方法?
【回答人】建议通过RDMA(如InfiniBand)实现多卡互联,绕过CPU直接访问GPU内存,以拼凑出满足超大内存需求的虚拟空间。
【提问人】什么情况下需要自己开发算子?
【回答人】现有框架成熟,一般无需手动开发。但在极致性能优化、芯片厂商上游适配新硬件或特定推理场景(Token经济学)下,算子开发至关重要。