Files
hakmem/docs/analysis/PHASE3_CACHE_LOCALITY_NEXT_INSTRUCTIONS.md

89 lines
3.7 KiB
Markdown
Raw Normal View History

# Phase 3: Cache LocalityC1/C2/C3 完了後の次指示)
## 現在地Status
### C3: Static Routing ✅ ADOPT
- `HAKMEM_TINY_STATIC_ROUTE=1``MIXED_TINYV3_C7_SAFE` のデフォルトへ昇格policy_snapshot bypass
- 設計メモ: `docs/analysis/PHASE3_C3_STATIC_ROUTING_1_DESIGN.md`
### C1: TLS Prefetch 🔬 NEUTRAL / FREEZE
- `HAKMEM_TINY_PREFETCH=1` は Mixed で平均が伸びず±1%域)→ default OFF 維持
- 設計メモ: `docs/analysis/PHASE3_C1_TLS_PREFETCH_1_DESIGN.md`
### C2: Metadata Cache 🔬 NEUTRAL / FREEZE
- `HAKMEM_TINY_METADATA_CACHE=1` は Mixed で平均が伸びず±1%域)→ default OFF 維持
- 設計メモ: `docs/analysis/PHASE3_C2_METADATA_CACHE_1_DESIGN.md`
### C4: MIXED MID_V3 Routing Fix ✅ ADOPT大きい勝ち
- `MIXED_TINYV3_C7_SAFE` のデフォルトを **MID_V3 OFF** に変更C6 を LEGACY 側へ戻す)
- A/BMixed, ws=400, 20M iters, 10-run**+13%** を確認
### D1: Free Path Route Cache ✅ GOENV opt-in
- `HAKMEM_FREE_STATIC_ROUTE=1`default OFF
- A/BMixed, 10-run mean**+1.06%**平均のみ閾値超え。median は負ける場合があるので “候補” 扱い)
- 設計メモ: `docs/analysis/PHASE3_D1_FREE_ROUTE_CACHE_1_DESIGN.md`
## 次の指示(ガツン)
### Step 0: Baseline 固定Mixed
1. まず “現行デフォルト” で 10-run を取る(比較の基準線)
```bash
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE ./bench_random_mixed_hakmem 20000000 400 1
```
2. A/B の比較は **同じ iter / ws / threads** を厳守。
### Step 1: MID_V3 の扱いを “本線 SSOT” にする
目的: Mixed 本線は **MID_V3 を常時 OFF**、C6-heavy のみ ON を維持する。
- `core/bench_profile.h`(プリセット)
- Mixed: `HAKMEM_MID_V3_ENABLED=0`, `HAKMEM_MID_V3_CLASSES=0x0`
- C6-heavy: 既存通り `HAKMEM_MID_V3_ENABLED=1`, `HAKMEM_MID_V3_CLASSES=0x40`
- `docs/analysis/ENV_PROFILE_PRESETS.md`(人間向け SSOT
- Mixed 本線: MID_V3 OFF を明記
- C6-heavy: MID_V3 ON 推奨を明記
GO/NO-GO:
- Mixed (10-run mean): **+1.0% 以上で GO**(既に +13% を観測)
- C6-heavy: 参考Mixed を最優先)
### Step 2: 次のボトルネックを “数字で” 決める
MID_V3 を切った後に、改めて perf を取り直して “次の芯” を決める。
```bash
perf record -F 99 --call-graph dwarf -- \
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE ./bench_random_mixed_hakmem 20000000 400 1
perf report --stdio
```
判定ルール:
- self% が **5% 未満の箱は NO-GO後回し**
- 5% 以上の関数/箱だけを次のフェーズ候補にする
### Step 3: Phase 3 D2Wrapper Env Cacheを実装して A/B
狙い: wrapper 入口の `wrapper_env_cfg()` をさらに軽くして 12% 詰める。
- 設計メモ: `docs/analysis/PHASE3_D2_WRAPPER_ENV_CACHE_1_DESIGN.md`
- ENV: `HAKMEM_WRAP_ENV_CACHE=0/1`default 0
- A/B: Mixed 10-run推奨: 20M iters
- GO: +1.0% 以上
- NO-GO: -1.0% 以下
- ±1%: NEUTRAL研究箱維持
### Step 4: Phase 3 D3Alloc Gate Specializationは “perf で 5%超えたら” 着手
狙い: Mixed 本線の固定構成に合わせ、alloc gate の分岐を削って 12% 詰める。
- 設計メモ: `docs/analysis/PHASE3_D3_ALLOC_GATE_SPECIALIZATION_1_DESIGN.md`
- ENV: `HAKMEM_ALLOC_GATE_LEGACY_ONLY=0/1`default 0
- 注意: “safe enable 判定” を必ず入れて、ENV 組み合わせで壊れないようにする
## 次候補perf で 5% 超なら着手)
1. `tiny_alloc_gate_fast` / `malloc_tiny_fast_for_class`alloc 側の形最適化)
2. `free_tiny_fast_*`free 側第2ホットの追加短絡
3. wrapper`malloc`/`free`)の hot 入口の更なる短縮B4 の次)