アーキテクチャ

mare_mark は、実験の意味、その副作用、その提示を分離しています。この分離により、レポートを記録から再生成し、失敗をアーティファクトからリプレイし、判断を生の観測から再計算できます。

層

層パッケージ責務
語彙modelバージョン、プロトコル、環境、結果、イベント、判断
入力generator, fixtureシード、フィンガープリント、入力のライフサイクル、セットアップの計時
正しさexperimentオラクル、縮小、クロスオーバー分析
計測runnerペイロードを実行し時計を読む唯一のループ
記録event, ir_sinkシンクと追記専用の JSONL 記録
分析stats, tune, tune_gemm要約、比較、チューニングポリシー、GEMM ドメイン
提示ir_model, reportPlot IR と、その JSON、SVG、HTML による描画
アダプタcliファイル、標準ストリーム、プロセス実行、終了コード

インポートグラフ(テスト専用のインポートは省略)は非巡回です:

パッケージインポート
modelなし
generator, fixture, experiment, event, ir_model, stats, tune_gemmmodel(generator はさらに moonbitlang/x/crypto も)
ir_sinkevent
runnermodel, fixture, event, experiment, moonbitlang/async
reportmodel, ir_model
tunerunner
climodel, ir_model, report, moonbitlang/x, moonbitlang/async

cli をインポートするものはありません。stats と report は runner に依存しないため、他の場所で作られた記録を分析・描画できます。

データの流れ

RunProtocol ──validate_protocol──▶ ValidatedProtocol ─┐
BenchSpec ────────compile────────▶ ValidatedBenchPlan ├─▶ runner.run ─▶ ObservationSink
seed, EnvironmentSnapshot, sink ───────────────────────┘        │            │
                                                                 │      JSONL record
   per dataset:  materialize ─▶ fingerprint ─▶ validate ─▶ warmup         │
                 ─▶ calibrate ─▶ exploratory blocks ─▶ confirmatory blocks │
                                                                           ▼
                stats (paired comparisons)      report.document_from_jsonl ─▶ PlotDocument
                tune (scores, selection)                   │
                                                 plot_json · plot_svg · html

run より前のものはすべて、実行できるようになる前に検証される記述です。run より後のものはすべて、保存されたイベントを消費します。run はペイロードが実行され時計が読まれる唯一の場所であり、cli はファイルとプロセスに触れる唯一の場所です。

パッケージ間の境界

計時。 計時区間にはペイロードと出力の畳み込みが含まれ、フィクスチャの SetupPolicy がセットアップを含む場合にのみセットアップも含まれます。検証、ウォームアップ、キャリブレーション、イベントの出力、シンクの finish、統計、描画は区間外です。正確な表は runner の設計にあります。

失敗。 操作の失敗は値(ExecutionOutcome)であり、検証の判定も値(ValidationStatus)です。検証が失敗すると、最小化された入力とリプレイコマンドを伴う ValidationFailure が出力されます。タイムアウトやクラッシュはインフラストラクチャの証拠であり、遅い計測として扱われることはありません。

統計。 生の観測は記録の中でフィルタリングも集約もされません。stats は対応のある配列から判断を計算し、OutlierPolicy は派生したビューにのみ適用されます。

レポート。 report は純粋な射影です。無効な観測、破棄されたバッチ、検証に失敗した実装の系列はプロットから除外され、失敗は差分セクションに表示されます。

チューニング。 tune と tune_gemm はポリシーとドメインのデータを保持します。候補のビルド、検証、計測はアプリケーションが runner を使って行うため、チューニングの計測は他のベンチマークと同じ証拠を伴います。

再現性

結果は記録された 5 つの入力によって決まります。プラン(ケース ID、実装とそのバージョン、フィクスチャ ID とバージョン)、検証済みプロトコル、実行シード、環境スナップショット、そしてスナップショットの provenance にあるコードのリビジョンです。入力は generator によってシードから導出され、実装の順序もシードから導出され、ブートストラップもシード付きであるため、計時値そのもの以外はすべて、どのターゲットでもビット単位で再現可能です。environment_compatible が成り立つとき、実行間で計時値を比較できます。

ターゲット

すべてのパッケージはすべてのターゲットでビルドできます。runner.run と execute_operation は async で、moonbitlang/async ランタイム(native、JS、wasm)を必要とします。サブプロセスワーカー、mare-mark replay、stdin/stdout を使うレポートは native 専用です。native 以外の cli エントリポイントはファイルからファイルへのレポートをサポートします。native と JS の計時値は異なる母集団です。別々にラベル付けした実行としてのみ比較してください。