多厂商 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)。
| 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 |
单位: 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)
- 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+(待实现)