多厂商 GPU 稠密 GEMM FLOPS 基准测试工具(NVIDIA CUDA + AMD ROCm)
🤖 本项目的代码编写、GPU 性能测试与更新迭代主要由 AI 完成。
gpu-flops-bench/
├── README.md # 本文件(统一对比)
├── LICENSE # MIT
├── run_bench.sh # ⭐ 统一入口(自动检测 GPU 厂商)
├── nvidia/ # NVIDIA CUDA 版 (cuBLASLt)
│ ├── src/gpu_dense_bench.cu # 主程序 (C++17, 自给自足, 无需 Python)
│ ├── run_gpu_flops.sh / .bat # 一键编译+运行
│ ├── GPU_TEST_CHECKLIST.md # 已测 GPU 检查清单
│ ├── results/ # 原始测试结果 (md/csv/json)
│ └── tools/run_multi_gpu.py # 早期 Python 备用脚本
├── amd/ # AMD ROCm 版 (待实现)
│ └── README.md # 占位
└── docs/
| GPU | 架构 | CC | 显存 | FP64 | FP32 | TF32 | BF16 | FP16 | INT8 | E4M3 | NVFP4 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| H200 NVL | Hopper | 9.0 | 141G | 59.0 | 47.3 | 426 | 853 | 854 | 1630 | 1661 | — |
| RTX PRO 6000 | Blackwell | 12.0 | 96G | 1.5 | 83.6 | 225 | 458 | 457 | 845 | 905 | 1608 |
| RTX 5090 | Blackwell | 12.0 | 32G | 1.8 | 83.2 | 126 | 254 | 254 | 906 | 774 | 1617 |
| RTX PRO 5000 | Blackwell | 12.0 | 48G | 1.0 | 52.4 | 140 | 257 | 260 | 552 | 557 | 1064 |
| RTX 5090 D v2 | Blackwell | 12.0 | 24G | 1.7 | 83.7 | 119 | 241 | 241 | 665 | 661 | 1177 |
| RTX 6000D | Blackwell | 12.0 | 84G | 1.3 | 67.5 | 72 | 151 | 150 | 391 | 288 | 946 |
| RTX 4090 | Ada Lovelace | 8.9 | 24G | 1.3 | 57.6 | 90 | 179 | 179 | 676 | 354 | — |
| GB10 (Spark) | Grace Blackwell | 12.1 | 128G | 0.4 | 21.2 | 43 | 102 | 105 | 155 | 220 | 373 |
| RTX 3060 | Ampere | 8.6 | 12G | 0.2 | 10.3 | 13 | 27 | 27 | 95 | — | — |
单位: TFLOPS(INT8 为 TOPS) GB10 为统一内存(CPU+GPU 共享) 数据为 cuBLASLt dense GEMM 实测值(非稀疏,isolated 隔离测试) 完整精度数据见 GPU_TEST_CHECKLIST.md
2026-10-04 用本工具 v2 在 B300 8 卡、PRO 6000 和 RTX 6000D 上实测。GEMM 列走 cuBLASLt(tcgen05 dispatch),mma 列走 mma.sync 内核(legacy warp-level)。2026-10-06 补充 RTX 3090(SM86)与 RTX 4090(SM89,8 卡实测)。
| GPU | 架构 | CC | 显存 | FP64 | FP32 | TF32 | BF16 | BF16 mma |
FP16 | INT8 | FP8 E4M3 |
FP8 E4M3 mma |
NVFP4 | INT4 | FP4 E2M1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| B300 SXM6 AC | SM103 | 10.3 | 275G | 1.05 | 68.8 | 1101 | 2235 | 551 | 2235 | 151 | 4377 | 1958 | 10441 | 74 | N/A |
| RTX PRO 6000 | SM120 | 12.0 | 96G | 1.53 | 80.6 | 225 | 457 | 462 | 457 | 882 | 906 | 924 | 1619 | 235 | 924 |
| RTX 6000D | SM120 | 12.0 | 84G | 1.28 | 66.7 | 72 | 176 | 146 | 144 | 472 | 386 | 291 | 947 | 141 | 379 |
| RTX 3090 | SM86 | 8.6 | 24G | 0.57 | 30.1 | 41 | 83 | 83 | 83 | 307 | N/A | N/A | N/A | 661 | N/A |
| RTX 4090 | SM89 | 8.9 | 24G | 1.25 | 57.2 | 89 | 178 | 181 | 175 | 672 | 352 | 360 | N/A | 1434 | N/A |
单位: TFLOPS(INT8/INT4 为 TOPS) B300 8 卡一致性:BF16 2233-2235、NVFP4 10360-10476(±0.2%);8 卡 concurrent 聚合线性度≥99.7%
架构发现:
- SM120 (PRO 6000) 上 mma.sync ≈ GEMM(满速):BF16 462 vs 457、FP8 924 vs 906——消费级 Blackwell 的 mma.sync 与 cuBLASLt 走同一硬件路径
- RTX 6000D(SM120 出口版,156 SM,驱动 590.48.01):mma/GEMM 比值 BF16 0.83(146/176)、FP8 0.75(291/386)——低于 PRO 6000 的 ≈1.0,仍远高于 B300 的 0.25~0.45,落在 SM120 模式内。该卡 INT8 (472) > FP8 (386)、BF16 (176) > FP16 (144),排序与 PRO 6000 相反;NVFP4 947 为该卡最高吞吐。BF16 176 与 2026-08 另一台 RTX 6000D 的 v1 实测 151 同量级(两台不同机器独立复现)
- SM103 (B300) 上 mma.sync 只有 GEMM 的 25-45%:BF16 551 vs 2235 (25%)、FP8 1958 vs 4377 (45%)——数据中心 Blackwell 需 tcgen05.mma(cuBLASLt dispatch),mma.sync 是 legacy 降档路径
- B300 INT8 = 151 TOPS(所有标准 API 路径一致:mma.sync ≈ cuBLASLt INT32I ≈ 149-152),远低于 FP8 的 4377。硬件 spec INT8 ≈ FP8 ≈ 4500 TOPS(同一 8-bit tensor core),纯粹是 cuBLASLt 未给 INT8 dispatch tcgen05。实际 8-bit 推理推荐用 FP8 E4M3 替代(同一硬件,29× 快于 INT32I)
- B300 低精度整数全面弱项:INT8 = 151 TOPS(vs PRO 6000 的 882,仅 17%)、INT4 = 74 TOPS(vs PRO 6000 的 235,仅 31%)——SM103 上低精度整数(INT8/INT4)的 mma.sync 和 cuBLASLt 路径均无 tcgen05 dispatch,与 BF16/FP8 高精度路径形成鲜明对比。8-bit 以下量化推理在 B300 上应用 FP8 E4M3(4377 TFLOPS)或 NVFP4(10441 TFLOPS)替代
- FP4 E2M1:PRO 6000 有值 924(CC 12.0 的 mma.sync kind::f8f6f4),B300 N/A(CC 10.3)
- RTX 3090(SM86,2026-10-06 补测):BF16 GEMM ≈ mma(83 ≈ 83)——Ampere 与 SM120 一样 mma.sync 满速,legacy 路径不降档;INT4 661 = 2× INT8 GEMM(307),Ampere 时代 INT4 仍是满速加速路径(对照 SM120 的 INT4 235/141、SM103 的 74 全面降速);FP8/NVFP4/FP4 需 CC 8.9+/12.0+,均 N/A;FP32 走 SGEMM 30.1(访存受限,低于理论 FMA 峰值属正常口径差异)
- RTX 4090(SM89,128 SM,8 卡一致性 ±1.7%):mma/GEMM 比值 BF16 1.02(181/178)、FP8 1.02(360/352)——Ada 与 Ampere/SM120 同属"mma.sync 满速"阵营,四代里只有数据中心 SM103 把 legacy 路径降档。INT4 mma = 1434 TOPS ≈ 2.1× 其 INT8(672)——Ada 延续 4-bit 传统 2× 收益,至此三代对照完整:Ampere 661(2.2×)/Ada 1434(2.1×)/Blackwell 74
235(0.080.27×,INT4 mma 快路径在 Blackwell 上被砍掉两个数量级,低比特整数全面让位 FP8/NVFP4)。NVFP4/FP4 E2M1 在 SM89 均无路径(N/A)- INT8 F32acc(混合精度)在 B300 上仅 40 TOPS,比 INT32I 还差——证实不是计算类型问题,是 INT8 整体无 tcgen05 路径
| GPU | 架构 | 状态 |
|---|---|---|
| MI300X | CDNA3 | 待测 |
bash run_bench.sh # 自动检测 GPU 厂商并运行
bash run_bench.sh --quick # 快速模式
bash run_bench.sh --device 0 # 只测 GPU 0自动检测 GPU 类型(NVIDIA / AMD),调用对应子工具:
| 检测到 | 调用 | 编译器 | BLAS 库 |
|---|---|---|---|
| NVIDIA | nvidia/run_gpu_flops.sh |
nvcc | cuBLASLt |
| AMD | amd/run_gpu_flops.sh (待实现) |
hipcc | hipBLASLt |
cd nvidia
bash run_gpu_flops.sh # 编译 + 运行(自动检测 GPU 架构)
bash run_gpu_flops.sh --quick # 快速模式(每精度只测一个尺寸)无需安装 Python。编译时链接 NVML(-lnvidia-ml,CUDA Toolkit 自带)。
cd amd
bash run_gpu_flops.sh # 待实现详见 nvidia/GPU_TEST_CHECKLIST.md
- NVIDIA: CUDA Toolkit 13.0+, NVIDIA 驱动
- AMD: ROCm 6.0+(待实现)