107 lines
2.9 KiB
Markdown
107 lines
2.9 KiB
Markdown
|
|
# 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)にする。
|