过去一年,GPU 编程圈有个几乎成了仪式的玩法:手写一个矩阵乘法(GEMM)kernel,跑个 benchmark,看自己和 cuBLAS 差多少。有人写到 99%,有人直接宣称"超越",四月份一篇《如何让 Claude Opus 4.6 写一个 100% CUBLAS 性能的 GEMM 算子》更是拿下 500+ 赞——连 AI 都下场对线了。就在最近两周,又新增了 RTX 4070 SUPER 上 99% 的复现,和 sm_103 架构手写 MXFP8 GEMM 硬刚官方库的实战。知乎知乎
所以这次索性把事情做全:把近一年社区里 10 余篇"对标 cuBLAS"的实战文梳理了一遍,想替正在犹豫"要不要自己也手撕一个 GEMM"的朋友回答三个问题——什么时候能赢、什么时候赢不了、这件事到底值不值得投入时间。
先一句话交代 cuBLAS 的地位
cuBLAS 是 NVIDIA 官方的 BLAS(基本线性代数子程序)CUDA 实现,GEMM 是其中最核心的函数。大模型训练和推理的算力大头全落在 GEMM 上,而这个库是 NVIDIA 专家团队多年调优的黑盒:各种形状、转置、批量组合都有启发式覆盖。所以"写出 cuBLAS 9x% 性能的 kernel",自然成了圈内的标准化考试——对学习者是理解 GPU 架构最快的路,对准备 AI Infra 面试的人是简历上的硬通货。
战绩一览:这一年大家都打到了什么程度
作者/文章 | 时间 | 卡与架构 | 精度/场景 | 对标结果 |
|---|---|---|---|---|
手抓饼熊 | 2026-02 | H100 | 大尺寸 GEMM | 特定形状(N=4096)反超 7% |
CarryPls | 2026-02 | 未注明 | FP32 | 从 0 起步对标 |
felix | 2026-03 | 未注明 | FP32 | 90%(小白复现路线) |
exceptional | 2026-03 | A100(SM80) | TF32 | 99.9%(25.08 vs 25.11 TFLOPS) |
WingEdge777"超越"系列 | 2026-03 | 消费级卡 | FP32 / TF32 / FP16 | 宣称超越(RTX 5060 上 hgemm 实测) |
椎名深雪(Claude 代写) | 2026-04 | RTX 5090(SM120) | BF16 | 友好形状下 100% 打平,结果逐位一致 |
大粉包包 | 2026-07 | Hopper | Dense GEMM | 98%(CUTLASS 实现,面试备战) |
歪门正道 | 2025-10 | 未注明 | GEMM | 99%(用 CuTe DSL 以 Python 写) |
严格鸽 | 2026-08 | RTX 4070 SUPER(SM89) | FP32 | 99% |
刘侃"填平护城河" | 2026-08 | sm_103(Blackwell) | MXFP8 | 与库实现逐点对比找差距 |

把表格横着看,第一个直观发现:能逼近甚至反超的案例,几乎都把问题限定在"固定的、中等规模的友好形状"上——比如 M=N=K=4096。hgemm 的作者自己就点明,这是"cuBLAS 最擅长的中等规模"。知乎赢面从来不是无条件的。
三个赢面条件
条件一:消费卡是主战场。 cuBLAS 的调优精力明显偏向数据中心卡,在 GeForce 上经常被观察到直接套用 CUTLASS 通用模板——椎名深雪在评论区说得很直白:“consumer GPU 上就是 cutlass,可以从 ncu 里面看到”。知乎WingEdge777 更是补了一句:“cuBLAS 在 sm120 甚至没调 TMA”(即 RTX 50 系)。他的系列文标题也毫不掩饰:“NV 还不针对消费级显卡调优的话,我们就还是超越”。知乎所以手持 RTX 40/50 系的朋友,反而是赢面最大的人群。
条件二:形状固定且友好。 几乎所有反超战绩都锁定单一规模与布局。评论区有人追问"不规则 shape 性能如何",作者的回答是给每个 shape 单独跑 autotune。泛化恰恰是 cuBLAS 的护城河,也是手写 kernel 的死穴——你的冠军内核换个形状可能就被库反杀。
条件三:收窄问题、同精度赛跑。 cuBLAS 是通用库,要保精确语义、任意转置、任意 stride;手写 kernel 通常默认 alpha=1、beta=0、无转置、单一数据类型。在这种收窄后的赛道上打平,才算公平地"赢"。多数严肃的作者也都会写明自己的前提条件——这也是这批实战文含金量高的原因。
反过来看硬仗在哪:数据中心卡。A100 上 TF32 做到 99.9%(25.08 vs 25.11 TFLOPS)已是"老实优化"的天花板。知乎H100 上反超 7% 只发生在 N=4096 这一个形状。知乎刘侃在 sm_103 上手写 MXFP8 GEMM,开篇第一句就是回答"我们比它慢多少、慢在哪",过程中还撞上了硬件 BUG。知乎数据卡+新精度,是护城河最深的地方。

cuBLAS 真正的护城河,不是单点速度
梳理完反方证据,得说句公道话:
泛化启发式:任何奇怪的形状,库都能给你挑一个不太差的 kernel;手写 kernel 换个形状就得重新调。
版本进化:NVIDIA 每代架构、每个 CUDA 版本都在往库里加新调优,手写 kernel 换架构即报废;而库是刘侃口中"护城河封存下来的二进制",连硬件 BUG 都能一并封存绕过。
生态默认值:PyTorch、TensorRT、llama.cpp 底层都走 cuBLAS。做推理服务优化,实际用得更多的还有轻量版接口 cuBLASLt——启发式选 kernel 加 epilogue 融合(偏置、激活函数一把做完),性价比远比自己手写高。
新变量:AI 下场写 kernel
椎名深雪那篇 500 赞的文章给出了一条可复现的"Claude 代写"路线:先让模型写 naive GEMM 加 benchmark 与正确性校验框架;再写 SIMT 版;最关键一步——把 NVIDIA PTX 文档里 warp 级矩阵乘的 fragment layout 示意图直接截图喂给模型,让它写 mma 指令版本;然后依次换 TMA 加载、warp 特化、持久化内核;最后让模型写一个无脑 autotuner 扫配置。终点是 M=N=K=4096 上打平 cuBLAS,且结果逐位一致。知乎

边界同样清楚:只赢在固定友好形状上,换形状要逐个 autotune;而且"截图喂 layout"这种操作,本质还是人把最难的硬件知识喂了进去——AI 降低的是打字成本,不是认知门槛。
值不值得上手?按人群给结论
只想跑模型、做推理:别碰,老老实实 cuBLAS / cuBLASLt。想优化推理服务,去研究 cuBLASLt 的启发式和 epilogue,比手写划算得多。
准备 AI Infra 面试、想真正看懂 GPU 架构:值得,而且是当下性价比最高的学习投资之一。有人为备战面试,花两周做出一个到达 cuBLAS 98% 性能的 Hopper Dense GEMM kernel。知乎零基础也有路可循,照着教程复现同样能一步步写出 cuBLAS 90% 性能的 GEMM。知乎路线已经被社区踩得很熟了:naive → 共享内存 tiling → cp.async 双缓冲流水 → 张量核心 mma → swizzle 消 bank conflict →(新架构)TMA 与持久化内核。文中表格里的实战文,几乎每一篇都是照着做就能复现的教程。
消费卡玩家,就想赢一次:RTX 40/50 系是最容易出成绩的赛道,瞄准中等规模固定形状,赢面真实存在。只是发战报时请像社区作者们一样写清楚:赢的是哪个形状。
想试 AI 写 kernel:上面那条分步提示路线可以直接抄,门槛比想象低,顺便还能把 kernel 知识学一遍。
最后两件实在事
一是选卡。学手写 GEMM 不必旗舰:RTX 4070 SUPER(SM89)有 99% cuBLAS 的真实案例,RTX 5060 有真实超越案例,旗舰的意义主要是迭代快。
二是环境,这个坑社区已经替大家踩过了:写 kernel 必须能用 Nsight Compute(ncu)做剖析,否则就是盲调——有作者直言某些 GPU 租赁平台不开 NCU 权限,“优化起来没有方向”。知乎租卡前先确认,或者干脆在自己的 PC 上玩。

继续观察的信号也留三个:其一,NVIDIA 后续 cuBLAS 更新会不会给消费级 Blackwell(sm_12x)补调优,这直接决定"超越"窗口还剩多久;其二,当 cuBLAS、CUTLASS 和 MKL 已将标准 GEMM 推近硬件峰值后,FalconGEMM 这类用低复杂度乘法算法突破峰值的研究能否落地,值得盯紧。知乎其三,AI 写 kernel 的工具链进化速度——这条路线半年前还只是段子。
生产环境里,cuBLAS 依然是那个该用的神;但它已经不是不可逾越的神话——至少在消费卡上、在固定形状里、在学习的路上。对 GPU 爱好者来说,这其实是最好的时代:连"超越神"这件事本身,都已经有人写成了开源教程。