06-bench-methodology/README.md1835 字节
# 示例 06:性能对比口径换算器
## 目的
第 14 章第 7 节说:**不写清口径的对比数字不可信。** 这个小工具把其中两件
可以机械化的事做出来:
1. 「目标毫秒数 → 迭代次数」的换算(warmup / repeat);
2. 「统一用 2MNK → TFLOP/s」的换算,以及一份必须逐条填写的口径表。
它不测量任何真实性能;所有输出都是换算结果。
## 运行前提
* Python 3.9+,仅标准库(`argparse`、`math`)。
* **不需要 GPU / NPU,也不需要 TileLang 与 PyTorch。**
## 运行命令
```bash
python3 bench_methodology.py
python3 bench_methodology.py --per-iter 0.35 --m 4096 --n 4096 --k 4096
```
## 期望输出
默认参数下的实际输出(在 macOS Apple Silicon、Python 3.11 上运行得到):
```
========================================================================
目标口径:warmup=25.0 ms, rep=100.0 ms
========================================================================
单次耗时(ms) 预热次数 重复次数 总耗时(ms)
------------------------------------------------
0.005 5000 20000 125.0
0.01 2500 10000 125.0
0.05 500 2000 125.0
0.1 250 1000 125.0
0.5 50 200 125.0
1 25 100 125.0
5 5 20 125.0
换算示例:shape 4096x4096x4096,若单次耗时 1.0 ms → 137.44 TFLOP/s
对比前必须固定的口径(缺一条,数字就不可比):
... (十条清单,见脚本输出)
```
## 性能口径
**本示例不测量任何性能。** 其中:
* `warmup=25 ms`、`rep=100 ms` 来自 TileLang `do_bench` 的默认值
(`_vendor/tilelang-v0.1.15/tilelang/profiler/bench.py:31`);
* 「重复次数至少 5 次」「按 `minimal_repeat_ms=100` 换算」来自
corpus 里 cuBLAS 对比脚本的实测口径
(`../references.md` 的 R8);
* TFLOP/s 的换算永远是 `2MNK / t`,与 epilogue 无关——epilogue 的有无
要写在口径表里,不能靠改分母来「补偿」。
## 作者实际做到的验证级别
**CPU 逻辑验证。** 在 macOS (Apple Silicon)、Python 3.11 上运行过默认参数与
`--per-iter` 两种调用,输出与本文件一致。没有在 GPU/NPU 上运行过任何内容。
## 已知局限
* 换算表假设每次迭代耗时稳定;真实 kernel 有抖动,`do_bench` 因此会在每次
采样前 flush L2,并支持 `mean` / `median` / `min` 等多种取数方式。
* 工具不判断你的对比是否公平;它只是把「应该写下来的东西」列出来。第 7.1
节的表格是人工 checklist,本工具不替你做决定。