他用一个CUDA核心打败了英伟达cuBLAS!

旅行   2024-12-02 06:00   北京  

从零开始手写CUDA矩阵乘法,竟敢叫板cuBLAS?

一位开发者用单个CUDA核心实现了超越cuBLAS 7%性能的壮举!

这听起来不可思议?

但这确实发生了。一位名叫Pranjal的开发者,在H100 GPU上实现了这个惊人的突破。

从零开始的挑战


Pranjal决定从零开始实现一个矩阵乘法的CUDA核心。

这不是一个简单的任务,因为他要挑战的对手是英伟达精心优化的cuBLAS库。

关键在于充分利用H100的硬件特性

  • 132个流式多处理器(SM)
  • 每个SM 1024个线程
  • 每个SM 4个张量核心
  • 80GB高带宽内存(3.35TB/s)
  • 每个SM 256KB共享内存+L1缓存
  • 每个SM 65,536个寄存器
  • 所有SM共享50MB L2缓存

突破性的优化


Pranjal使用了一系列精妙的优化技术。

首先是矩阵分块计算,将大矩阵乘法分解成多个小块的乘法运算。

最关键的优化来自于张量核心指令(Tensor Core)

这些指令能在单个硬件周期内完成小型矩阵乘法运算。通过巧妙地组合这些指令,实现了从317 TFLOPs423 TFLOPs的性能提升。

内存优化的魔法


为了进一步提升性能,Pranjal实现了生产者-消费者模式

一个线程组负责加载数据(生产者),另一个线程组负责计算(消费者),两者并行执行。这种优化将性能提升到了498 TFLOPs

寄存器优化的艺术


在尝试扩大计算块大小时,遇到了寄存器资源不足的问题。

解决方案是使用两个消费者线程组共同工作,将寄存器压力减半。这个优化将性能推升到了610 TFLOPs

最后的突破


通过张量内存加速器(TMA)的特殊内存布局优化,以及精确控制每个线程组的寄存器使用量,最终将性能提升到了631 TFLOPs,超越cuBLAS整整7%!

最令人惊叹的是,整个实现仅用一个C++文件就完成了,不需要任何外部依赖。

这个成果立即引起了业内关注,Google Brain的前研究员Hieu Pham也对此表示:

无话可说,向你致敬。

该已经在GitHub上开源,完整的实现细节和性能分析都记录在了他的博客中。

https://github.com/pranjalssh/fast.cu

这个项目也为我们提供了重要启示:

即便是在已经高度优化的领域,依然存在突破的可能。只要我们敢于挑战,并且深入理解底层原理。

相关链接

[1] 原文链接: https://twitter.com/hyhieu226/status/1863108961953804673

👇

👇

👇

👇

本文同步自知识星球《AGI Hunt》

星球实时采集和监控推特、油管、discord、电报等平台的热点AI 内容,并基于数个资讯处理的 AI agent 挑选、审核、翻译、总结到星球中。

  • 每天约监控6000 条消息,可节省约800+ 小时的阅读成本;

  • 每天挖掘出10+ 热门的/新的 github 开源 AI 项目;

  • 每天转译、点评 10+ 热门 arxiv AI 前沿论文。

星球非免费。定价99元/年,0.27元/天。(每+100人,+20元。元老福利~)

  • 一是运行有成本,我希望它能自我闭环,这样才能长期稳定运转;

  • 二是对人的挑选,鱼龙混杂不是我想要的,希望找到关注和热爱 AI 的人。

欢迎你的加入!

AGI Hunt
关注AGI 的沿途风景!
 最新文章