Phase 3 Closure & Phase 4 Preparation

Summary:
- Phase 3 optimization complete (cumulative +8.93%)
- D1 promoted to default (HAKMEM_FREE_STATIC_ROUTE=1, +2.19%)
- D2 frozen (NO-GO, -1.44% regression)
- Phase 4 instructions prepared (D3/Alloc Gate Specialization)

Results:
  B3 (Routing shape): +2.89%
  B4 (Wrapper split): +1.47%
  C3 (Static routing): +2.20%
  C1 (TLS prefetch): NEUTRAL (-0.34%, research box)
  C2 (Metadata cache): NEUTRAL (-0.45%, research box)
  D1 (Free route cache): +2.19% (now default)
  D2 (Wrapper env cache): NO-GO (-1.44%, frozen)
  MID_V3 fix: +13% (structural)

Total Phase 2-3 gain: ~8.93% (37.5M → 51M ops/s)

Updated:
- CURRENT_TASK.md: Phase 3 final results + D3 conditions
- ENV_PROFILE_PRESETS.md: Active optimizations listed
- PHASE3_CACHE_LOCALITY_NEXT_INSTRUCTIONS.md: Phase 3→4 transition
- PHASE4_ALLOC_GATE_SPECIALIZATION_NEXT_INSTRUCTIONS.md: D3 execution plan
- PHASE3_BASELINE_AND_CANDIDATES.md: Post-validation status

Next phase: Phase 4 D3 - Alloc Gate Specialization
- Requires: tiny_alloc_gate_fast self% ≥5% from perf
- Design SSOT: PHASE3_D3_ALLOC_GATE_SPECIALIZATION_1_DESIGN.md
- Execution: PHASE4_ALLOC_GATE_SPECIALIZATION_NEXT_INSTRUCTIONS.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Moe Charm (CI)
2025-12-13 23:47:19 +09:00
parent 50bded8c85
commit 141cd8a5be
5 changed files with 109 additions and 36 deletions

View File

@ -41,6 +41,7 @@ HAKMEM_BENCH_MAX_SIZE=1024
- `HAKMEM_WRAP_SHAPE=1`Phase 2 B4: wrapper hot/cold split を default ON
- `HAKMEM_TINY_ALLOC_ROUTE_SHAPE=1`Phase 2 B3: alloc の route dispatch 形を最適化)
- `HAKMEM_TINY_STATIC_ROUTE=1`Phase 3 C3: policy_snapshot bypass を default ON
- `HAKMEM_FREE_STATIC_ROUTE=1`Phase 3 D1: free path route cache を default ON
- `HAKMEM_MID_V3_ENABLED=0`Mixed 本線では OFF。C6-heavy のみ推奨ON
- `HAKMEM_MID_V3_CLASSES=0x0`Mixed 本線では未使用)
- `HAKMEM_MID_V35_ENABLED=0`Phase v11a-5: Mixed では MID v3.5 OFF が最速)

View File

@ -282,12 +282,14 @@ static inline void* tiny_alloc_gate_fast(size_t size)
## Step 3: Recommended Next Steps
### Phase 3 D1: Free Path Route Cache ✅ GOENV opt-in
### Phase 3 D1: Free Path Route Cache ✅ ADOPTPROMOTED TO DEFAULT
**Target**: `tiny_route_for_class()` の呼び出しを free path から削る
**Result**: Mixed 10-run mean **+1.06%**median は負ける回がある)
**Decision**: ✅ GO だが **default 化は 20-run 確認待ち**
**Result**: Mixed 20-run mean **+2.19%** / median **+2.37%**
**Decision**: ✅ `MIXED_TINYV3_C7_SAFE` の default に昇格
**ENV Gate**: `HAKMEM_FREE_STATIC_ROUTE=1`default: 0
**ENV Gate**:
- `HAKMEM_FREE_STATIC_ROUTE=0/1`default: 0
- `MIXED_TINYV3_C7_SAFE` プリセットは `1` を default 注入rollback は `0`
---
@ -321,7 +323,7 @@ static inline void* tiny_alloc_gate_fast(size_t size)
| Phase | Optimization | Expected Gain | Notes |
|------------|----------------------------------|---------------|-------|
| Baseline | MID_V3=0 + B3+B4+C3 | - | — |
| **D1** | Free route cache | +0〜+2% | mean は勝ち、median 確認待ち(default OFF |
| **D1** | Free route cache | +0〜+2% | ✅ ADOPTMixed preset default ON |
| **D2** | Wrapper env cache | — | NO-GOfreeze |
| **D3** | Alloc gate specialization | +0〜+2% | perf で 5% 超なら着手 |

View File

@ -76,28 +76,17 @@ perf report --stdio
- self% が **5% 未満の箱は NO-GO後回し**
- 5% 以上の関数/箱だけを次のフェーズ候補にする
### Step 3: Phase 3 D1 を “昇格できるか” を確定する20-run
`HAKMEM_FREE_STATIC_ROUTE=1` は **10-run mean が +1.06%** とギリ勝ちだが、
median が負ける回があるため、プリセット default 化は **20-run で確度を上げてから**。
推奨手順Mixed, iter=20M, ws=400, 1T:
1. Baseline: `HAKMEM_FREE_STATIC_ROUTE=0` を 20-run
2. Optimized: `HAKMEM_FREE_STATIC_ROUTE=1` を 20-run
3. 判定mean + median:
- GO昇格候補: mean **+1.0%** 以上 かつ median もプラス域
- それ以外: ENV opt-in 維持default OFF
### Step 4: Phase 3 D2 は NO-GO凍結
### Step 3: Phase 3 D2 は NO-GO凍結
`HAKMEM_WRAP_ENV_CACHE=1` は **-1.44% 回帰**のため、研究箱として freezedefault OFF
次は D3alloc 側に進むか、Phase 3 を総括して次フェーズへ移る。
### Step 5: Phase 3 D3Alloc Gate Specializationは “perf で 5%超えたら” 着手
### Step 4: Phase 3 D3Alloc Gate Specializationは “perf で 5%超えたら” 着手
狙い: Mixed 本線の固定構成に合わせ、alloc gate の分岐を削って 12% 詰める。
- 設計メモ: `docs/analysis/PHASE3_D3_ALLOC_GATE_SPECIALIZATION_1_DESIGN.md`
- 実装指示書: `docs/analysis/PHASE4_ALLOC_GATE_SPECIALIZATION_NEXT_INSTRUCTIONS.md`
- ENV: `HAKMEM_ALLOC_GATE_LEGACY_ONLY=0/1`default 0
- 注意: “safe enable 判定” を必ず入れて、ENV 組み合わせで壊れないようにする

View File

@ -0,0 +1,81 @@
# Phase 4: Alloc Gate SpecializationD3 実装指示書)
Phase 3 は **D1 昇格 / D2 凍結**で完全閉鎖。次の “芯” は alloc 側の gate を削る D3。
## 現在地SSOT
- Active defaultsMixed:
- `HAKMEM_TINY_ALLOC_ROUTE_SHAPE=1`B3
- `HAKMEM_WRAP_SHAPE=1`B4
- `HAKMEM_TINY_STATIC_ROUTE=1`C3
- `HAKMEM_FREE_STATIC_ROUTE=1`D1, promoted
- `HAKMEM_MID_V3_ENABLED=0`Mixed 本線 SSOT
- Frozen / ignore:
- `HAKMEM_WRAP_ENV_CACHE=1`D2, NO-GO
## Step 0: perf で “GO 条件” を満たしているか確認
判定基準: `tiny_alloc_gate_fast`**self% ≥ 5%**
推奨Mixed, iter=20M, ws=400, 1T:
```bash
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE perf record -F 99 -- \
./bench_random_mixed_hakmem 20000000 400 1
perf report --stdio --no-children
```
メモ(直近の 1-run perf:
- `tiny_alloc_gate_fast` self% ≈ **18.8%****D3 GO 条件は満たす**
## Step 1: D3 実装Box Theory
設計メモSSOT: `docs/analysis/PHASE3_D3_ALLOC_GATE_SPECIALIZATION_1_DESIGN.md`
### 箱割り(必須)
- L0: ENV戻せる
- `HAKMEM_ALLOC_GATE_LEGACY_ONLY=0/1`default 0
- L1: Safe-Enable 判定(境界 1 箇所)
- Mixed 本線が “LEGACY-only” であることを 1 回だけ確認し、成立した場合のみ fast 経路へ
- Learner ON の場合は必ず disableroute が動的更新されるため)
- L2: Integration境界 1 箇所)
- `tiny_alloc_gate_fast()` の入口でのみ差し替え(既存の意味は変えない)
### Safe-Enable 条件Fail-Fast ではなく “自動 disable”
以下のどれかに該当したら D3 は **即 disable** して既存経路へフォールバック:
- learner が有効(例: `HAKMEM_SMALL_LEARNER_V7_ENABLED=1`
- route_kind に LEGACY 以外が混入V7/MID/ULTRA/TINY_FIRST 等)
- そのほか Mixed 本線の固定前提が崩れている
## Step 2: A/BGO/NO-GO
Mixed 10-run推奨: iter=20M, ws=400, 1T:
- Baseline:
```bash
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE HAKMEM_ALLOC_GATE_LEGACY_ONLY=0 \
./bench_random_mixed_hakmem 20000000 400 1
```
- Optimized:
```bash
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE HAKMEM_ALLOC_GATE_LEGACY_ONLY=1 \
./bench_random_mixed_hakmem 20000000 400 1
```
判定10-run mean:
- GO: **+1.0% 以上**
- NO-GO: **-1.0% 以下**
- ±1.0%: NEUTRAL研究箱維持、default OFF
## Step 3: 昇格GO の場合のみ)
- `MIXED_TINYV3_C7_SAFE` プリセットへ default 注入(`core/bench_profile.h`
- `docs/analysis/ENV_PROFILE_PRESETS.md` に結果・rollback 手順を追記
- `CURRENT_TASK.md` を “Phase 4 完了” に更新
## Step 4: 失敗時の扱い(箱理論)
- NO-GO/NEUTRAL の場合:
- D3 は research box として freezedefault OFF
- 本線は汚さない(プリセット昇格はしない)