什么是 BLAS(基础线性代数标准)?
如果把 PyTorch、TensorFlow 和科学计算比作宏伟的摩天大厦;那么 BLAS 则是深埋在地下 40 年的标准钢筋水泥地基 —— 它定义了全球计算机处理“向量与矩阵计算”的通用国际标准接口!
换一台机器,全部推倒重写
在 IBM 机器上写好的矩阵乘法,换到 CDC 或 Cray 超算上完全跑不起来;每个科学家都要花几个月从零手写 Fortran 循环,性能低得可怜。
- ❌ 毫无可移植性:硬件换代即意味着所有科研软件作废
- ❌ 缺乏底层优化:没有专门针对 CPU 缓存行与流水线的统一定制
一次编写,各家芯片极限加速
制定统一 API(如 dgemm、saxpy)。硬件厂商(Intel MKL、Nvidia cuBLAS、Apple Accelerate)在底层压榨硬件极限,上层框架坐享其成!
- ✨ 三层级别(Level 1~3):严密分工,兼顾简单向量到庞大矩阵乘
- ✨ 软硬件彻底解耦:写算法的人专心搞模型,造芯片的人专心优化 BLAS
拆解 BLAS 的 3 大进阶技术层级
从一维向量到三维立方吞吐,读懂计算强度与内存复用
BLAS Level 1 (1979 · 向量运算)
$O(N)$ 复杂度。向量加常数、点积等(如 saxpy: y = ax + y, sdot)。计算强度低,极易受限于内存带宽。
BLAS Level 2 (1988 · 矩阵-向量)
$O(N^2)$ 复杂度。矩阵与向量相乘(如 sgemv: y = αAx + βy)。主要用于传统全连接层单批次(Batch=1)推理。
BLAS Level 3 (1990 · 矩阵-矩阵)
$O(N^3)$ 复杂度。通用矩阵乘(sgemm: C = αAB + βC)。计算与数据访存比高达 $O(N)$,能让芯片算力利用率飙到 95%+!
🕹️ BLAS Level 1~3 计算强度对比演练台
点击切换不同的 BLAS 等级,直观观察数据量与计算吞吐的量级跃迁:
解密 SGEMM 与 DGEMM
BLAS 函数名第一个字母代表数据精度:S(Single 单精度 FP32)、D(Double 双精度 FP64)、C(Complex 复数)、H(Half 半精度 FP16)。
例如 sgemm 就是单精度通用矩阵乘法,而 dgemm 则是双精度超级计算机跑分基准。
巨头们的百家争鸣
BLAS 只是接口规范,不同巨头有自己的极限硬件调优实现:
英伟达的 cuBLAS(GPU 算力王牌)、Intel 的 oneMKL、苹果的 Accelerate、开源界的 OpenBLAS 与 BLIS。
站在 BLAS 之上的高等代数
在 BLAS 之上,科学家们构建了 LAPACK(线性代数包),用于求解线性方程组(LU 分解)、求特征值与奇异值(SVD)。
两层金字塔架构构成了当代全部科学工程计算的终极底座。