返回 ELI5 知识库首页 🏛️ HPC FOUNDATION & LINEAR ALGEBRA
🏛️ Basic Linear Algebra Subprograms · The Universal Standard

什么是 BLAS(基础线性代数标准)?

如果把 PyTorch、TensorFlow 和科学计算比作宏伟的摩天大厦;那么 BLAS 则是深埋在地下 40 年的标准钢筋水泥地基 —— 它定义了全球计算机处理“向量与矩阵计算”的通用国际标准接口

🏚️ 1979 年前:巴别塔式的各自为政

换一台机器,全部推倒重写

在 IBM 机器上写好的矩阵乘法,换到 CDC 或 Cray 超算上完全跑不起来;每个科学家都要花几个月从零手写 Fortran 循环,性能低得可怜。

IBM 代码 私有专有指令 ⚡❌ Cray 代码 无法跨平台复用 ⚡❌ 手写 循环累崩 ⚠️ 软件碎片化严重,阻碍了全人类科学计算
  • 毫无可移植性:硬件换代即意味着所有科研软件作废
  • 缺乏底层优化:没有专门针对 CPU 缓存行与流水线的统一定制
VS
🏛️ BLAS 时代:统一工业接口标准

一次编写,各家芯片极限加速

制定统一 API(如 dgemmsaxpy)。硬件厂商(Intel MKL、Nvidia cuBLAS、Apple Accelerate)在底层压榨硬件极限,上层框架坐享其成!

上层软件:PyTorch / NumPy / SciPy / MATLAB 🏛️ BLAS 统一标准接口 (GEMM, AXPY...) Intel MKL Nvidia cuBLAS Apple AMX
  • 三层级别(Level 1~3):严密分工,兼顾简单向量到庞大矩阵乘
  • 软硬件彻底解耦:写算法的人专心搞模型,造芯片的人专心优化 BLAS
💡

一句话顿悟:为什么说 BLAS 是全人类计算文明的基石?

你在 Python 里敲下 a @ b 或者运行 torch.matmul,底层其实都毫无悬念地调用了 BLAS 库! 如果没有 1979 年诞生的 BLAS 标准,今天的深度学习与人工智能大爆发至少要推迟几十年!

拆解 BLAS 的 3 大进阶技术层级

从一维向量到三维立方吞吐,读懂计算强度与内存复用

1️⃣

BLAS Level 1 (1979 · 向量运算)

$O(N)$ 复杂度。向量加常数、点积等(如 saxpy: y = ax + y, sdot)。计算强度低,极易受限于内存带宽。

2️⃣

BLAS Level 2 (1988 · 矩阵-向量)

$O(N^2)$ 复杂度。矩阵与向量相乘(如 sgemv: y = αAx + βy)。主要用于传统全连接层单批次(Batch=1)推理。

3️⃣

BLAS Level 3 (1990 · 矩阵-矩阵)

$O(N^3)$ 复杂度。通用矩阵乘(sgemm: C = αAB + βC)。计算与数据访存比高达 $O(N)$,能让芯片算力利用率飙到 95%+!

🕹️ BLAS Level 1~3 计算强度对比演练台

点击切换不同的 BLAS 等级,直观观察数据量与计算吞吐的量级跃迁:

BLAS Level 1 (向量与标量)
代表函数:SAXPY (y = a·x + y)
数据读取 $O(N)$,计算次数 $O(N)$。计算强度极低(1 FLOP/Byte),显卡大部分时间在干等内存传输。
算力瓶颈分类: Memory-Bound (受困于访存带宽)
📜 命名黑话速查

解密 SGEMM 与 DGEMM

BLAS 函数名第一个字母代表数据精度:S(Single 单精度 FP32)、D(Double 双精度 FP64)、C(Complex 复数)、H(Half 半精度 FP16)。

例如 sgemm 就是单精度通用矩阵乘法,而 dgemm 则是双精度超级计算机跑分基准。

🚀 全球主流实现

巨头们的百家争鸣

BLAS 只是接口规范,不同巨头有自己的极限硬件调优实现:

英伟达的 cuBLAS(GPU 算力王牌)、Intel 的 oneMKL、苹果的 Accelerate、开源界的 OpenBLASBLIS

🌟 现代传承:LAPACK

站在 BLAS 之上的高等代数

在 BLAS 之上,科学家们构建了 LAPACK(线性代数包),用于求解线性方程组(LU 分解)、求特征值与奇异值(SVD)。

两层金字塔架构构成了当代全部科学工程计算的终极底座。