# Phase 39 — FAST v3: Gate Function 定数化(BENCH_MINIMAL の固定税刈り) ## 目的(1行) FAST build(`HAKMEM_BENCH_MINIMAL=1`)の hot path に残る **lazy-init gate**(`static int=-1` + `getenv()`)を **compile-time constant** にして、固定税を削る。 ## 背景 - Phase 35-A で gate function overhead の削減が atomic prune より ROI が高いことを確認した(GO +4.39%)。 - Phase 37 で runtime gate(lazy-init)を Standard に持ち込むと税が勝つことを確認した(NO-GO)。 - よって **FAST でのみ**「定数化」を進めるのが安全で勝ち筋。 ## 方針(Box Theory) - “箱”は増やさず、既存 gate を **`#if HAKMEM_BENCH_MINIMAL`** で定数化する(戻せる)。 - Standard/OBSERVE の挙動は **変更しない**。 - link-out / 物理削除はしない(layout/LTO で符号反転する)。 ## 対象(優先順) ### A) malloc hot path gate(毎 alloc) ファイル: `core/front/malloc_tiny_fast.h` 1. `front_gate_unified_enabled()` を FAST で固定 `1` 2. `alloc_dualhot_enabled()` を FAST で固定 `0` 実装方針: - 関数定義の内部を `#if HAKMEM_BENCH_MINIMAL` で分岐し、FAST は return constant のみ。 - Standard/OBSERVE は現状の lazy-init を維持(A/B の自由度を残す)。 ### B) free dispatcher 内の gate(毎 free) ファイル: `core/box/hak_free_api.inc.h` 1. `HAKMEM_BENCH_FAST_FRONT` ブロックを FAST で固定 OFF(丸ごと compile-out でも可) 2. `g_v3_enabled`(v3 snapshot free stub)ブロックを FAST で固定 OFF(丸ごと compile-out) 3. `g_free_dispatch_ssot`(`getenv("HAKMEM_FREE_DISPATCH_SSOT")`)を FAST で固定 ON 注意: - `g_free_dispatch_ssot` の “正” は、現行プリセットが最適化経路を採用している前提で **ON** とする。 - もし health/profile で SSOT=0 依存が残っていたら、まずプリセットを正に合わせる(FAST は “性能測定の正”)。 ### C) stats gate(毎回呼ばれているなら) ファイル: `core/box/free_dispatch_stats_box.h` - `free_dispatch_stats_enabled()` を FAST で固定 `false` - `FREE_DISPATCH_STAT_INC(...)` が hot entry で呼ばれている場合、lazy-init を消せる。 ※ 他にも hot で呼ばれている stats gate があれば同じパターンで追加(ただし “実行確認” を先に)。 ## 実装手順(小パッチ順) 1. A(malloc)を先に実装(影響範囲が狭い) 2. B(free)を実装(影響範囲が広いので health を必ず回す) 3. C(stats)を必要に応じて追加 ## A/B(判定) ### ベースライン(FAST v2) - `make perf_fast` ### 変更後(FAST v3) - `make perf_fast` ### 判定(build-level) - **GO**: Mixed 10-run mean **+0.5% 以上** - **NEUTRAL**: **±0.5%** - **NO-GO**: **-0.5% 以下** ※ NO-GO の場合は即 revert(Phase 22-2 の教訓)。 ## 可視化(最小) - ベンチ結果(mean/median)を `docs/analysis/PHASE39_FAST_V3_GATE_CONSTANTIZATION_RESULTS.md` に追記 - `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` の FAST build 履歴を更新