perf 设计

设计目标

perf 让标准的 moon bench 工具无需额外基础设施,即可在每个已注册用例上测量 @mutable 数值内核的稳态开销,从而可以对比内核修改前后的表现。

数学背景

moon bench 将每个基准主体重复多次,并报告每次迭代时间的统计量。稳态测量估计的是预热后单次调用的期望开销 E[T]\mathbb{E}[T],不包括进程启动、fixture I/O 和首次调用的影响。仓库的报告脚本用稳健统计量汇总样本:中位数、最近秩法的第 90 百分位数,以及中位数绝对偏差 MAD⁡=median⁡i∣ti−median⁡(t)∣\operatorname{MAD} = \operatorname{median}_i |t_i - \operatorname{median}(t)|。与均值和标准差不同,中位数和 MAD 的崩溃点为 50%:少数受操作系统干扰的样本无法任意地改变它们。

设计决策

在计时区域之外准备

在注册基准之前,每个用例的输入只准备一次。计时闭包内只有内核调用和校验和折叠。

保留校验和

把校验和传给 b.keep 使结果可被观察,从而编译器无法消除该调用,而代价只是每个输出值一次 64 位折叠。

不属于默认关卡

基准测试依赖于机器且耗时较长;除非设置 LINEAR_ALGEBRA_TEST_BENCH=1,否则不包含在 run_test.sh 中。

正确性与不变量

每次运行中,每个已注册用例恰好被基准测试一次,其名称标识了操作和用例。

被否决的方案

  • 手写计时循环。 moon bench 已经处理了迭代次数和报告;需要原始样本的情形由 perf_runner 覆盖。

边界

perf 不计算或存储统计量,不与基线比较,也不包括冷启动计时。