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 flost. 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]; // 重排最佳; 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
© 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
相關文章
暫無評論...




