perf_support チュートリアル
このページでは、コントリビューター向けに、MoonBit のコードからベンチマークケースを一覧し、1 つのケースを実行し、その結果を確認する方法を示します。カーネルの変更を調査するときなどに使います。方法は 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() は登録されたすべてのケースを一覧します。
1 つのケースを実行してチェックサムを比較する
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
チェックサムが等しければ、結果はビット単位で変わっていません。総和の順序が変わった場合、カーネルの変更後にチェックサムが異なるのは想定どおりであり、その場合は結果を数値的に比較しなければなりません。
フィクスチャを再生成する
bench/datasets/cases/<id>.json を削除するか、python3 bench/generate_fixtures.py を実行してください。次の実行でレジストリから入力が再作成されます。
さらに進んで
操作を追加するには、マニフェストにケースを追加し、bench/generate_fixtures.py でレジストリを再生成し、run_prepared_case_inplace の match を拡張します。
よくある落とし穴
- native 以外のターゲットで実行する。 フィクスチャの読み込みにはファイルシステムへのアクセスが必要です。
generated_registry.mbtを手で編集する。 これは生成されたファイルです。マニフェストを変更して再生成してください。- ターゲット間でチェックサムを比較する。 カーネルはターゲットごとに異なるため、結果のビットが異なることがあります。
次のステップ
- perf_support API。
- 計時付きの実行については perf_runner のチュートリアル。
- 計測対象のアルゴリズムについては mutable の設計。