从零开始手写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 TFLOPs到423 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 的人。
欢迎你的加入!