张大妈

Outperforming cuBLAS on H100: a Worklog

源自知乎:手抓饼熊

02-18 10:20

探索如何针对NVIDIA H100架构,从零开始编写一个矩阵乘法CUDA内核。通过逐步迭代优化,最终实现了在特定规模下性能超越官方cuBLAS库7%,揭示了Hopper架构的深层优化潜力与实战技巧。

Outperforming cuBLAS on H100: a Worklog

Outperforming cuBLAS on H100: a Worklog智能速览

  • 从仅达cuBLAS性能4%的基准出发,逐步迭代优化。

  • 核心是利用H100的WGMMA张量核心与TMA硬件特性。

  • 通过异步加载、线程块集群等策略隐藏内存延迟。

  • 最终在4096矩阵规模上,性能超越cuBLAS 7%。

Outperforming cuBLAS on H100: a Worklog精华内容

从底层架构出发,解锁H100的极致性能。以下是超越cuBLAS的矩阵乘法内核优化全记录。

起点与挑战

优化之旅始于一个针对A6000 GPU的成熟算法,该算法在H100上仅能达到cuBLAS性能的4%,约为32 TFLOPs。目标是在M=N=K=4096、bfloat16数据类型的基准上,逼近甚至超越cuBLAS高达716 TFLOPs的理论性能。巨大的性能鸿沟表明,H100作为全新的“猛兽”,必须采用与其架构特性相匹配的算法,而非简单移植旧方案。

核心突破

性能跃迁的关键在于拥抱H100的硬件革命:WGMMA张量核心与TMA(Tensor内存加速器)。WGMMA指令允许一个由128个线程组成的warp-group协同执行矩阵乘累加操作,相比传统方式效率极高。而TMA则负责将数据从全局内存高效加载到共享内存,并自动处理张量核心所需的复杂内存布局。

引入这两项技术后,内核性能从32 TFLOPs飙升至317 TFLOPs,实现了近10倍的提升,证明了充分利用硬件特性的决定性作用。

延迟隐藏

分析发现,数据加载是性能瓶颈。为此,采用“warp专业化”技术,将线程块内的线程组划分为生产者(负责加载)和消费者(负责计算)。生产者预先将数据块加载到共享队列中,消费者则从队列中取出数据进行计算,二者并行运行,有效隐藏了加载延迟。

通过这种生产者-消费者模型,性能进一步提升至498 TFLOPs,表明优化数据流与计算的重叠是提升吞吐率的有效手段。

Outperforming cuBLAS on H100: a Worklog

扩展与调度

为了挖掘更大潜力,开始扩展图块尺寸。当增大到128x256时,遇到了单线程寄存器限制导致性能下降。解决方案是增加消费者warp-group数量,将计算任务分配给更多线程,使性能达到631 TFLOPs。

随后,通过优化图块在SM(流式多处理器)上的调度策略,将相邻图块分配给同一批SM并行处理,大幅提升了L2缓存的命中率(从70%提升至83%),性能跃升至660 TFLOPs,达到了cuBLAS的92%。

Outperforming cuBLAS on H100: a Worklog

最后冲刺

最后的优化来自对细节的极致打磨。采用PTX指南中更快的屏障API替代CUDA标准API,带来10%的性能提升,达到704 TFLOPs(98% cuBLAS)。接着,利用Hopper的Cluster特性,让多个SM协作,通过TMA多播共享数据,减少重复访问,性能提升至734 TFLOPs(102% cuBLAS),首次实现超越。

结合微优化和采用希尔伯特曲线进行图块调度,最大化缓存局部性,最终性能定格在764 TFLOPs,成功超越cuBLAS 7%。

Outperforming cuBLAS on H100: a Worklog

这项工作展示了深入理解硬件架构对于性能极限优化的决定性作用。虽然内核在特定场景下超越了cuBLAS,但通用性和稳定性仍是库的优势。未来是否会有更多专有硬件特性的高效利用,值得持续关注。

内容由AI生成
0
扫一下,分享更方便,购买更轻松
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

最新文章 热门文章