アーキテクチャ
mare_mark は、実験の意味、その副作用、その提示を分離しています。この分離により、レポートを記録から再生成し、失敗をアーティファクトからリプレイし、判断を生の観測から再計算できます。
層
| 層 | パッケージ | 責務 |
|---|---|---|
| 語彙 | model | バージョン、プロトコル、環境、結果、イベント、判断 |
| 入力 | generator, fixture | シード、フィンガープリント、入力のライフサイクル、セットアップの計時 |
| 正しさ | experiment | オラクル、縮小、クロスオーバー分析 |
| 計測 | runner | ペイロードを実行し時計を読む唯一のループ |
| 記録 | event, ir_sink | シンクと追記専用の JSONL 記録 |
| 分析 | stats, tune, tune_gemm | 要約、比較、チューニングポリシー、GEMM ドメイン |
| 提示 | ir_model, report | Plot IR と、その JSON、SVG、HTML による描画 |
| アダプタ | cli | ファイル、標準ストリーム、プロセス実行、終了コード |
インポートグラフ(テスト専用のインポートは省略)は非巡回です:
| パッケージ | インポート |
|---|---|
model | なし |
generator, fixture, experiment, event, ir_model, stats, tune_gemm | model(generator はさらに moonbitlang/x/crypto も) |
ir_sink | event |
runner | model, fixture, event, experiment, moonbitlang/async |
report | model, ir_model |
tune | runner |
cli | model, 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 の計時値は異なる母集団です。別々にラベル付けした実行としてのみ比較してください。