98 lines
4.2 KiB
Markdown
98 lines
4.2 KiB
Markdown
# Phase 3: Cache Locality - D1/D2 Validation Complete
|
||
|
||
## 現在地(Status)
|
||
|
||
### BASELINE_PHASE3 (10-run, Mixed, ws=400, 20M iters)
|
||
- Mean: 46.04M ops/s, Median: 46.04M ops/s, StdDev: 0.14M ops/s
|
||
- Baseline established: 2025-12-13
|
||
|
||
### C3: Static Routing ✅ ADOPT
|
||
- `HAKMEM_TINY_STATIC_ROUTE=1` を `MIXED_TINYV3_C7_SAFE` のデフォルトへ昇格(policy_snapshot bypass)
|
||
- Gain: +2.20% proven
|
||
- 設計メモ: `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/B(Mixed, ws=400, 20M iters, 10-run)で **+13%** を確認
|
||
|
||
### D1: Free Path Route Cache ✅ ADOPT (20-run validated, PROMOTED TO DEFAULT)
|
||
- `HAKMEM_FREE_STATIC_ROUTE=1` を `MIXED_TINYV3_C7_SAFE` のデフォルトへ昇格
|
||
- 20-run validation results:
|
||
- Baseline (ROUTE=0): Mean 46.30M ops/s, Median 46.30M ops/s, StdDev 0.10M
|
||
- Optimized (ROUTE=1): Mean 47.32M ops/s, Median 47.39M ops/s, StdDev 0.11M
|
||
- Gain: Mean +2.19%, Median +2.37% (both criteria met)
|
||
- 設計メモ: `docs/analysis/PHASE3_D1_FREE_ROUTE_CACHE_1_DESIGN.md`
|
||
|
||
### D2: Wrapper Env Cache ❌ NO-GO / FROZEN
|
||
- `HAKMEM_WRAP_ENV_CACHE=1` showed -1.44% regression
|
||
- Root cause: TLS overhead > benefit in Mixed workload
|
||
- Status: Research box frozen (default OFF, do not pursue)
|
||
- 設計メモ: `docs/analysis/PHASE3_D2_WRAPPER_ENV_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 D2 は NO-GO(凍結)
|
||
|
||
`HAKMEM_WRAP_ENV_CACHE=1` は **-1.44% 回帰**のため、研究箱として freeze(default OFF)。
|
||
次は D3(alloc 側)に進むか、Phase 3 を総括して次フェーズへ移る。
|
||
|
||
### Step 4: Phase 3 D3(Alloc Gate Specialization)は “perf で 5%超えたら” 着手
|
||
|
||
狙い: Mixed 本線の固定構成に合わせ、alloc gate の分岐を削って 1–2% 詰める。
|
||
|
||
- 実装指示書: `docs/analysis/PHASE4_ALLOC_GATE_SPECIALIZATION_NEXT_INSTRUCTIONS.md`
|
||
- 設計メモ(最新版): `docs/analysis/PHASE4_D3_ALLOC_GATE_SPECIALIZATION_1_DESIGN.md`
|
||
- ENV: `HAKMEM_ALLOC_GATE_SHAPE=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 の次)
|