GPU 性能分析的所有起点都是这几张表——峰值算力、带宽、SM 数告诉你硬件上限,内存层级延迟告诉你为什么 tiling 有用,临界算术强度告诉你 kernel 该往哪个方向优化。
1. 主流数据中心 GPU 横向比较
| GPU | FP32 (TFLOPS) | FP16 Tensor (TFLOPS) | BF16 Tensor | INT8 | FP8 (Hopper+) | 带宽 | SM 数 | 显存 |
|---|---|---|---|---|---|---|---|---|
| V100 32GB | 15.7 | 125 | — | — | — | 0.9 TB/s | 80 | 32 GB HBM2 |
| A100 40GB | 19.5 | 312 | 312 | 624 TOPS | — | 1.6 TB/s | 108 | 40 GB HBM2e |
| A100 80GB | 19.5 | 312 | 312 | 624 TOPS | — | 2.0 TB/s | 108 | 80 GB HBM2e |
| H100 80GB | 67 | 989 | 989 | 1979 TOPS | 1979 | 3.35 TB/s | 132 | 80 GB HBM3 |
| H200 141GB | 67 | 989 | 989 | 1979 TOPS | 1979 | 4.8 TB/s | 132 | 141 GB HBM3e |
| B200(Blackwell) | 80 | 2250 | 2250 | 4500 TOPS | 9000 | 8.0 TB/s | 208 | 192 GB HBM3e |
Tensor 数字默认 fp32 accumulator。稀疏(2:4)再 ×2,本表不算。
2. 消费级 GPU(测试 / 推理常用)
| GPU | FP32 | FP16 Tensor | 带宽 | SM 数 | 显存 |
|---|---|---|---|---|---|
| RTX 3090 | 35.6 TFLOPS | 142 TFLOPS | 936 GB/s | 82 | 24 GB GDDR6X |
| RTX 4090 | 82.6 TFLOPS | 165 TFLOPS(密集) | 1.0 TB/s | 128 | 24 GB GDDR6X |
| RTX 5090 | ~104 TFLOPS | ~419 TFLOPS | 1.79 TB/s | 170 | 32 GB GDDR7 |
3. 内存层级延迟(粗略,A100 量级)
| 层级 | 延迟(cycle) | 容量 | 谁能访问 |
|---|---|---|---|
| 寄存器 | 1 | 65536 个 32-bit / SM | 单 lane |
| L1 / Shared | ~20 | 192 KB / SM(可拆分) | 单 SM |
| L2 | ~200 | 40 MB(整 GPU 共享) | 所有 SM |
| HBM(global) | ~500 | 80 GB | 所有 SM |
| PCIe | ~10000+ | 受限于 host | host ↔ device |
两层差一个数量级 —— 这就是为什么 tiling 把 hot data 提到 shared memory 能带来巨大收益。
4. SM 内部结构速记(Ampere / Hopper)
| 项 | Ampere(A100) | Hopper(H100) |
|---|---|---|
| 每 SM CUDA core(FP32) | 64 | 128 |
| 每 SM Tensor Core 数 | 4 | 4(更大) |
| 每 SM 寄存器文件 | 65536 × 32-bit | 65536 × 32-bit |
| 每 SM 最大 thread 数 | 2048(64 warp) | 2048(64 warp) |
| 每 SM 最大 block 数 | 32 | 32 |
| 每 SM shared memory | 164 KB(L1/Shared 可调) | 228 KB |
| Warp scheduler / SM | 4 | 4 |
5. 关键带宽数字(算 roofline 用)
| 通路 | 带宽 |
|---|---|
| H100 HBM3 | 3.35 TB/s |
| A100 HBM2e(80GB) | 2.0 TB/s |
| NVLink 4(H100) | 900 GB/s 双向 |
| NVLink 3(A100) | 600 GB/s 双向 |
| PCIe 5.0 ×16 | 64 GB/s 双向 |
| PCIe 4.0 ×16 | 32 GB/s 双向 |
PCIe 跟 HBM 差 50-100 倍 —— 这就是为什么”host ↔ device 拷贝”是性能毒药,要尽量留在 GPU 上。
6. 算术强度(Arithmetic Intensity)的临界点
Roofline 上 compute-bound vs memory-bound 的分界:
临界算术强度 = 峰值 FLOPS / 峰值带宽 = FLOP / byte
| GPU | 临界算术强度(FP32) | 临界(FP16 Tensor) |
|---|---|---|
| A100 80GB | 19.5T / 2.0T = 9.75 FLOP/B | 312T / 2.0T = 156 FLOP/B |
| H100 80GB | 67T / 3.35T = 20 FLOP/B | 989T / 3.35T = 295 FLOP/B |
算术强度低于临界 → memory bound,提高数据复用率(tiling)是关键。 高于临界 → compute bound,优化指令选择 / 用 tensor core。
举例:naive matmul 算术强度 ≈ 1 FLOP/B,远低于 9.75 → memory bound,需要 tiling 提升到 16-32 才能让 A100 跑出 fp32 峰值。
7. 参考文档
- A100 白皮书:Nvidia A100 Tensor Core GPU Architecture
- H100 白皮书:Nvidia H100 Tensor Core GPU Architecture
- 实测自己机器:
nvidia-smi -q+nvbandwidth(NVIDIA 官方带宽测试工具)
评论区
评论功能即将上线, 敬请期待。