# Phase 4 E3-4: ENV Constructor Init(次の指示書) ## Status(2025-12-14) - ✅ 実装済み(research box / default OFF) - A/B(Mixed, 10-run, iter=20M, ws=400, E1=1)で **+4.75% mean / +4.35% median** を観測 - ENV: - E1: `HAKMEM_ENV_SNAPSHOT=0/1`(default 0) - E3-4: `HAKMEM_ENV_SNAPSHOT_CTOR=0/1`(default 0、E1=1 前提) ## ゴール 1) “E3-4 の勝ち” を再確認して固定化する 2) 本線(プリセット)へ昇格するか判断する(戻せる形で) --- ## Step 0: 前提(E1 を ON にして測る) E3-4 は `hakmem_env_snapshot_enabled()` の gate 判定を短絡する最適化なので、E1 が ON であることが前提。 --- ## Step 1: Build & 健康診断(先に通す) ```sh make bench_random_mixed_hakmem -j scripts/verify_health_profiles.sh ``` --- ## Step 2: A/B(Mixed 10-run) Mixed 10-run(iter=20M, ws=400): ```sh # Baseline: ctor=0 HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE \ HAKMEM_ENV_SNAPSHOT=1 \ HAKMEM_ENV_SNAPSHOT_CTOR=0 \ ./bench_random_mixed_hakmem 20000000 400 1 # Optimized: ctor=1 HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE \ HAKMEM_ENV_SNAPSHOT=1 \ HAKMEM_ENV_SNAPSHOT_CTOR=1 \ ./bench_random_mixed_hakmem 20000000 400 1 ``` 判定(10-run mean): - GO: **+1.0% 以上** - ±1%: NEUTRAL(research box 維持) - -1% 以下: NO-GO(freeze) 注意: - “constructor の pre-main init” を効かせたい場合は、起動前に ENV を設定する(bench_profile putenv だけでは遅い)。 --- ## Step 3: perf で “消えたか” を確認(E3-4=1) ```sh HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE \ HAKMEM_ENV_SNAPSHOT=1 \ HAKMEM_ENV_SNAPSHOT_CTOR=1 \ perf record -F 99 -- ./bench_random_mixed_hakmem 20000000 400 1 perf report --stdio --no-children ``` 確認ポイント: - `hakmem_env_snapshot_enabled` の self% が有意に下がる/Top から落ちる - 代わりに “snapshot 参照” が 1 箇所に集約されている --- ## Step 4: 昇格(GO の場合のみ) ### Option A(推奨・安全): E1 だけプリセット昇格、E3-4 は opt-in 維持 - `core/bench_profile.h`(`MIXED_TINYV3_C7_SAFE`): - `bench_setenv_default("HAKMEM_ENV_SNAPSHOT","1");` - `HAKMEM_ENV_SNAPSHOT_CTOR` は入れない(研究箱のまま) - `docs/analysis/ENV_PROFILE_PRESETS.md` に E1/E3-4 の推奨セットを追記 - `CURRENT_TASK.md` を更新 ### Option B(攻める): E1+E3-4 をプリセット昇格 - 20-run validation(mean/median 両方)を通してから - 注意: `HAKMEM_ENV_SNAPSHOT_CTOR=1` をプリセット default にする場合、分岐 hint/期待値も合わせて見直す(baseline を汚さない) --- ## Step 5: Rollback(いつでも戻せる) ```sh HAKMEM_ENV_SNAPSHOT=0 HAKMEM_ENV_SNAPSHOT_CTOR=0 ``` --- ## Next(Phase 4 Close) - E1/E3-4 の “どこまで本線に入れるか” を決めたら、Phase 4 は CLOSE(勝ち箱はプリセットへ、研究箱は freeze)にする。