GEMM(通用矩阵乘法)是AI、科学计算领域的“性能引擎”,深度学习与大数据算法的绝大多数核心运算都绕不开GEMM。高效的GEMM不仅支撑着模型训练、推理、推荐等关键任务,还对CPU、GPU甚至AI芯片的架构设计产生深远影响。本文详细梳理了GEMM的原理、应用、主流高性能实现(OpenBLAS、cuBLAS、BLIS、CUTLASS等)及自动融合调度工具,辅以多平台实测、优化要点和开发者FAQ,为AI工程师、决策者与开发者提供一站式性能选型指南。

什么是GEMM?为什么它是AI和科学计算的基石
GEMM定义及其基础数学形式
GEMM(General Matrix-Matrix multiplication,通用矩阵乘法)是线性代数最基础、最常用的运算之一,其通用形式为:C = αAB + βC
其中 A、B、C 均为矩阵,α、β为标量。在多数AI场景下,简化为 C = AB。
GEMM广泛应用于深度学习各类网络(如
Transformer、CNN)、大规模推荐系统、科学模拟、物理工程建模等,是AI算法的真正算力瓶颈。
- 时间复杂度:
O(MNK) - 空间复杂度:约等于
O(MK + KN + MN)
当矩阵维度在1024及以上时,运算规模可达十亿级浮点操作,故AI芯片、服务器都专门围绕GEMM打造加速单元。
推薦閱讀:详尽算法剖析-GEMM优化原理
GEMM在AI行业的核心地位
- 深度学习框架(PyTorch、TensorFlow)底层矩阵操作基本都调用高性能GEMM
- NLP、CV模型每天成千上万次大矩阵运算
- AI芯片、FPGA、超算都专门设计GEMM硬件加速模块
- GEMM性能好坏,直接决定模型训练与推理效率
主流高性能GEMM方案与工具大盘点
| 名稱 | 類型 | 适用硬件 | 优化特点 | 官网/链接 |
|---|---|---|---|---|
| OpenBLAS | 開源函式庫 | CPU/X86/ARM | 多线程/矩阵分块 | OpenBLAS |
| Intel MKL | 商用库 | Intel CPU/X86 | 矢量化/SIMD | oneAPI MKL |
| cuBLAS | 商用库 | NVIDIA GPU | Tensor Core/FMA | cuBLAS |
| CUTLASS | 开源工具库 | NVIDIA GPU | 高度可配置/AI优化 | CUTLASS |
| BLIS | 開源函式庫 | CPU/X86/ARM | 多层分块/可扩展 | BLIS |
| Eigen | C++库 | 跨平台CPU | 模板化/自动向量化 | Eigen |
| cblas/sgemm/dgemm | BLAS标准 | 通用CPU | 标准API | BLAS介绍 |
| TVM/ONNX Runtime/TensorRT | 框架 | CPU+GPU+AI Chip | 调度自动搜索融合 | TVM |

註: 目前主流AI框架的底层GEMM都高度依赖上述库。PyTorch、TensorFlow通常做了二次封装,每当库性能升级,AI模型直接受益。
CPU平台下的高性能GEMM实现与优化
BLAS标准API与常用接口
// sgemm/dgemm经典调用示例(C/C++) void cblas_sgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA, const CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc);
sgemm: 单精度(float)dgemm: 双精度(double)
所有主流AI与科学计算软件均兼容此接口。
主流CPU GEMM库横向对比
| 库 | 优化手段 | 多线程 | 向量指令 | 備註 |
|---|---|---|---|---|
| OpenBLAS | Cache分块+SIMD+线程 | √ | AVX512/AVX2/NEON | 社区活跃 |
| Intel MKL | AVX512手工优化 | √ | AVX512 | Intel平台最优 |
| BLIS | 可插拔/多核 | √ | AVX/NEON | AMD/ARM也高效 |
| MathNet(.NET) | 托管代码+基本SIMD | 有限 | .NET SIMD | 跨平台,速度中等 |
| Eigen | 模板自动向量化 | × | 支持自动SIMD | C++兼容优先,极大规模略慢 |
实测基准数据(1024×1024 SGEMM,单节点)

| 实现 | 耗时(ns) | 相对性能 | GFLOPS |
|---|---|---|---|
| 三重循环C++ | 4,712,905,103 | 1x | 0.42 |
| OpenBLAS | 2,932,070 | 1607x | 682 |
| Intel MKL | 4,379,927 | 1076x | 456 |
| MathNet | 53,205,723 | 88x | 37.5 |
| SIMD+分块并行(C#) | 4,363,112 | 1080x | 458 |
更多数据源:C# .NET类库高性能对比
CPU优化主流技巧
- 循环展开、reorder,提升Cache/VPU局部性
- Cache分块(L2/L3),降低内存带宽压力
- SIMD指令优化(SSE/AVX/NEON)
- 多核并行(OpenMP/PThread)
- 融合乘加FMA指令

主流CPU GEMM库地址清单:
GPU与AI芯片上的高性能GEMM
NVIDIA/AMD GPU主流库
| 库名 | 平台 | 优化 | 用途 | 官網 |
|---|---|---|---|---|
| cuBLAS | NVIDIA | Tensor Core/FMA | 训练/推理 | cuBLAS |
| CUTLASS | NVIDIA | 模板化定制 | 自研Kernels | CUTLASS |
| ROCm BLAS | AMD | 平台针对 | AMD训练/推理 | ROCm BLAS |
| TensorRT/ONNX | 多平台 | 自动融合/INT8 | 推理引擎 | TensorRT |
- cuBLAS/ROCm为主流训练引擎,支持FP32、FP16、BF16混合精度GEMM。
- NVIDIA Tensor Core、AI芯片均有专用GEMM电路,极致性能。

推荐参考:NVIDIA cuBLAS文档 | CUTLASS教程
AI 框架与自动GEMM融合调度
框架原生GEMM支持列表
| 框架 | 依赖 | 自动融合 | 硬件 |
|---|---|---|---|
| PyTorch | MKL/OpenBLAS/cuBLAS | 动态调度 | CPU/GPU/AI芯片 |
| TensorFlow | MKL/OpenBLAS/cuBLAS | 自动融合 | CPU/GPU/TPU |
| ONNX Runtime | 多平台 | TVM调度 | 多种硬件 |
| PaddlePaddle | MKL/自研 | CUDA/AI芯片支持 | 多平台 |
- TensorFlow/Torch 转 ONNX 经TensorRT/ONNX Runtime可自动选取最佳GEMM实现,开发者无需关注底层细节。
主流自动融合工具
- TVM:自动Kernel搜索最优GEMM
- OneDNN:Intel自动优化融合
- TorchDynamo:Pytorch动态Kernel
- TensorRT:NVIDIA推理全自动优化
GEMM性能优化工程实例
交换循环顺序与分块(C++实践)
// 朴素版 for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) for (int k = 0; k < N; ++k) C[i][j] += A[i][k]*B[k][j]; // 重排优化 for (int i = 0; i < N; ++i) for (int k = 0; k < N; ++k) { float a = A[i][k]; for (int j = 0; j < N; ++j) C[i][j] += a * B[k][j]; }
重排后B/C的访问局部性提升,Cache及SIMD加速幅度明显。
分块策略与平台适用性(示意表)
| 分块策略 | 優點 | 適用平台 |
|---|---|---|
| L2/L3分块 | 缓存高命中 | CPU |
| Tile+SIMD | 对齐向量,流水线 | CPU/GPU |
| Thread分块 | 并行 | 多核CPU/GPU |
| TensorCore特定分块 | AI芯片极致性能 | NVIDIA GPU/AI芯片 |
FPGA、AI芯片GEMM加速方案简要
- 大规模GEMM阵列(Mult/Accumulate单元)
- 支持可变精度(INT8/BF16/F16),算力成百上千TFLOPS
- 国产昇腾等AI芯片有专用GEMM核
开发者FAQ与选型建议
如何选不同平台GEMM库?
- CPU(x86/AMD):首选OpenBLAS、BLIS,Intel平台可选MKL
- GPU:NVIDIA用cuBLAS,AMD用rocmBLAS
- 嵌入式/ARM:建议用Eigen等轻量实现
- .NET/Java:优先外部调用 BLAS库
- AI芯片/FPGA:用官方SDK推荐方案
性能是否达标?
- 1024×1024大矩阵单线程>20 GFLOPS,多线程或GPU>1000 GFLOPS
- 善用perf/nvprof/ncu/VTune分析瓶颈
- 数据排列格式影响极大,建议匹配库默认格式
結語
GEMM是AI技术栈的动力源,影响深远。高效GEMM方案如OpenBLAS、cuBLAS、BLIS等不断创新进化,新一代AI芯片也在这一模块深耕加速,引领AI产业发展新台阶。
了解并活用最新GEMM优化方案,不仅保障系统性能,还能在AI业务创新上赢得先机。
进一步技术参考:BLAS官方 | oneMKL | cuBLAS | OpenBLAS
© 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
相關文章
暫無評論...




