perf 设计
设计目标
perf 让标准的 moon bench 工具无需额外基础设施,即可在每个已注册用例上测量 @mutable 数值内核的稳态开销,从而可以对比内核修改前后的表现。
数学背景
moon bench 将每个基准主体重复多次,并报告每次迭代时间的统计量。稳态测量估计的是预热后单次调用的期望开销 ,不包括进程启动、fixture I/O 和首次调用的影响。仓库的报告脚本用稳健统计量汇总样本:中位数、最近秩法的第 90 百分位数,以及中位数绝对偏差 。与均值和标准差不同,中位数和 MAD 的崩溃点为 50%:少数受操作系统干扰的样本无法任意地改变它们。
设计决策
在计时区域之外准备
在注册基准之前,每个用例的输入只准备一次。计时闭包内只有内核调用和校验和折叠。
保留校验和
把校验和传给 b.keep 使结果可被观察,从而编译器无法消除该调用,而代价只是每个输出值一次 64 位折叠。
不属于默认关卡
基准测试依赖于机器且耗时较长;除非设置 LINEAR_ALGEBRA_TEST_BENCH=1,否则不包含在 run_test.sh 中。
正确性与不变量
每次运行中,每个已注册用例恰好被基准测试一次,其名称标识了操作和用例。
被否决的方案
- 手写计时循环。
moon bench已经处理了迭代次数和报告;需要原始样本的情形由perf_runner覆盖。
边界
perf 不计算或存储统计量,不与基线比较,也不包括冷启动计时。