perf_support 教程
本页向贡献者介绍如何在 MoonBit 代码中列出基准用例、运行单个用例并检查其结果,例如在排查内核修改时。方法见 perf_support 设计和 bench/README.md。
快速上手
perf_support 在本仓库内部使用。运行其测试:
LINEAR_ALGEBRA_TEST_BENCH=1 ./run_test.sh
或者直接运行:
moon test -p perf_support --target native
日常任务
列出用例
for name in @support.sample_case_names() {
println(name)
}
case_names() 列出所有已注册的用例。
运行单个用例并比较校验和
let prepared = @support.find_prepared_case("chol_baseline_spd_64").unwrap()
let before = @support.run_prepared_case_once(prepared)
// ... change a kernel, rebuild ...
let after = @support.run_prepared_case_once(prepared)
assert_eq(before, after) // the result bits did not change
校验和相等意味着结果逐位未变;内核修改后若求和顺序发生变化,校验和不同是预期之中的,此时必须对结果做数值比较。
重新生成 fixture
删除 bench/datasets/cases/<id>.json,或运行 python3 bench/generate_fixtures.py;下一次运行会根据注册表重新创建输入。
进一步了解
要添加一种操作,请在 manifest 中添加用例,用 bench/generate_fixtures.py 重新生成注册表,并扩展 run_prepared_case_inplace 中的 match。
常见陷阱
- 在非 native 目标上运行。 加载 fixture 需要文件系统访问。
- 手动编辑
generated_registry.mbt。 它是生成的;请修改 manifest 后重新生成。 - 跨目标比较校验和。 各目标的内核不同,因此结果比特可能不同。
后续步骤
- perf_support API。
- perf_runner 教程:计时运行。
- mutable 设计:被测量的算法。