perf の設計

設計目標

perf は、標準の moon bench ツールで、登録されたすべてのケースについて @mutable の数値カーネルの定常状態のコストを、追加の基盤なしに計測できるようにします。これにより、カーネルの変更を前後で比較できます。

数学的背景

moon bench は各ベンチマークの本体を何度も繰り返し、反復ごとの時間の統計量を報告します。定常状態の計測は、ウォームアップ後の 1 回の呼び出しの期待コスト E[T]\mathbb{E}[T] を、プロセス起動、フィクスチャの I/O、初回呼び出しの影響を除いて推定します。リポジトリのレポート用スクリプトは、頑健な統計量でサンプルを要約します。中央値、最近接順位法による 90 パーセンタイル、中央絶対偏差 MAD⁡=median⁡i∣ti−median⁡(t)∣\operatorname{MAD} = \operatorname{median}_i |t_i - \operatorname{median}(t)| です。平均や標準偏差と異なり、中央値と MAD の崩壊点は 50% なので、オペレーティングシステムに乱された少数のサンプルがそれらを任意に動かすことはできません。

設計上の判断

計測区間の外での準備

入力は、ベンチマークを登録する前にケースごとに一度だけ準備します。計測対象のクロージャの中にあるのは、カーネルの呼び出しとチェックサムの畳み込みだけです。

チェックサムを保持する

チェックサムを b.keep に渡すと結果が観測可能になるので、コンパイラは呼び出しを除去できません。そのコストは出力値 1 つあたり 64 ビットの畳み込み 1 回だけです。

既定のゲートには含まれない

ベンチマークはマシンに依存し、時間もかかります。LINEAR_ALGEBRA_TEST_BENCH=1 が設定されていない限り、run_test.sh からは除外されます。

正しさと不変条件

登録されたすべてのケースは、1 回の実行につきちょうど 1 回、操作とケースを識別する名前でベンチマークされます。

却下した代替案

  • 手書きの計時ループ。 反復回数とレポートは moon bench がすでに扱っています。生のサンプルが必要な場合は perf_runner が対応します。

境界

perf は統計量を計算・保存せず、ベースラインとも比較せず、コールドスタートの計時も含みません。