什么是 GEMM(通用矩阵乘法)?
如果说普通矩阵乘法是数学课本里的抽象公式 $A \times B$;那么 GEMM 则是高性能计算与 AI 芯片界封神了 40 年的“终极黄金标准” —— $C = \alpha(A \times B) + \beta C$,它将纯数学变成了压榨显卡极限吞吐的超级工程!
三层 for 循环,显存缓存全穿透
初学者写的 for i, for j, for k 代码,在超大矩阵面前会导致 CPU/GPU 缓存(Cache Miss)频繁失效,算力发挥不到硬件极限的 5%!
- ❌ 缓存命中率极低:跨行跨列跳跃读取内存,访存极其缓慢
- ❌ 未利用向量化:没有 SIMD 指令集与硬件脉动阵列加速
切成微小砖块,把缓存喂到极致
BLAS / cuBLAS / CUTLASS 极致调优:通过多级分块(Tiling)、寄存器重用、Tensor Core 硬件直通,让硬件算力利用率狂飙至 95%+!
- ✨ 多级缓存分块:将超大矩阵切碎,完美塞进 L1/L2 Cache 与寄存器
- ✨ 自带累加器偏置:兼顾神经网络中必不可少的 Bias 偏移量($+ \beta C$)
拆解 GEMM 极致性能的 4 大绝招
从万能数学公式到现代 GPU 硬件层级映射,读懂高性能算力密码
1. BLAS Level 3 黄金公式
公式 $C = \alpha(A \times B) + \beta C$。其中的 $\alpha, \beta$ 缩放系数与原矩阵 $C$ 累加,天然完美匹配神经网络的前向加偏置与反向求导!
2. 多级分块 (Tiling)
把上万维大矩阵切成 ThreadBlock Tile ➔ Warp Tile ➔ Thread Tile,层层精准匹配 GPU 内存阶梯(HBM ➔ L2 ➔ Shared Memory ➔ 寄存器)。
3. 脉动阵列与 Tensor Core
数据像血液一样在微芯片阵列中流动,一个输入数据在网格内部被复用几十次,彻底摆脱内存频繁读写限制。
4. CUTLASS / Triton 生态
现代高性能 GEMM 开发模板库。让工程师无需从头手写几千行 PTX 汇编,就能生成针对具体矩阵维度的极限性能内核。
🕹️ GEMM 分块(Tiling)与流水线交互演练台
观察超大矩阵如何被切成 $4 \times 4$ 微型 Tile 积木,并由计算核心依次吞吐:
从 1979 年 BLAS 到当代 AI
20 世纪 70 年代,科学家为了让大型超级计算机统一线性代数接口,制定了 BLAS(基础线性代数子程序)。
其中 Level 3 的 dgemm / sgemm 成为了横跨气象预测、空气动力学到 ChatGPT 大模型的通用工业底座。
GEMM 推动硬件架构变迁
为了把 GEMM 算到极致,英伟达在 Volta 架构中首次塞入了 Tensor Core,Google 在 TPU 中打造了二维脉动阵列。
整个人类芯片硬件架构的演进史,在很大程度上就是一部“如何把 GEMM 算得更便宜、更快速”的进化史。
从稠密 GEMM 到 MoE 稀疏 GEMM
在最新的 DeepSeek-V3 等混合专家模型(MoE)中,GEMM 进一步进化为 Grouped GEMM。
不同专家处理不同大小的输入矩阵,动态调度分块,继续在算力效率前沿开疆拓土。