Files
hakmem/docs/analysis/PHASE3_CACHE_LOCALITY_NEXT_INSTRUCTIONS.md
Moe Charm (CI) 50bded8c85 Phase 3 Finalization: D1 20-run validation, D2 frozen, baseline established
Summary:
- D1 (Free route cache): 20-run validation → PROMOTED TO DEFAULT
  - Baseline (20-run, ROUTE=0): 46.30M ops/s (mean), 46.30M (median)
  - Optimized (20-run, ROUTE=1): 47.32M ops/s (mean), 47.39M (median)
  - Mean gain: +2.19%, Median gain: +2.37%
  - Decision: GO (both criteria met: mean >= +1.0%, median >= +0.0%)
  - Implementation: Added HAKMEM_FREE_STATIC_ROUTE=1 to MIXED preset

- D2 (Wrapper env cache): FROZEN
  - Previous result: -1.44% regression (TLS overhead > benefit)
  - Status: Research box (do not pursue further)
  - Default: OFF (not included in MIXED_TINYV3_C7_SAFE preset)

- Baseline Phase 3: 46.04M ops/s (Mixed, 10-run, 2025-12-13)

Cumulative Gains (Phase 2-3):
  B3: +2.89%, B4: +1.47%, C3: +2.20%, D1: +2.19%
  Total: ~7.6-8.9% (conservative: 7.6%, multiplicative: 8.93%)
  MID_V3 fix: +13% (structural change, Mixed OFF by default)

Documentation Updates:
  - PHASE3_FINALIZATION_SUMMARY.md: Comprehensive Phase 3 report
  - PHASE3_CACHE_LOCALITY_NEXT_INSTRUCTIONS.md: D1/D2 final status
  - PHASE3_D1_FREE_ROUTE_CACHE_1_DESIGN.md: 20-run validation results
  - PHASE3_D2_WRAPPER_ENV_CACHE_1_DESIGN.md: FROZEN status
  - ENV_PROFILE_PRESETS.md: D1 ADOPT, D2 FROZEN
  - PHASE3_BASELINE_AND_CANDIDATES.md: Post-D1/D2 status
  - CURRENT_TASK.md: Phase 3 complete summary

Next:
  - D3 requires perf validation (tiny_alloc_gate_fast self% ≥5%)
  - Or Phase 4 planning if no more D3-class targets
  - Current active optimizations: B3, B4, C3, D1, MID_V3 fix

Files Changed:
  - docs/analysis/PHASE3_FINALIZATION_SUMMARY.md (new, 580+ lines)
  - docs/analysis/*.md (6 files updated with D1/D2 results)
  - CURRENT_TASK.md (Phase 3 status update)
  - analyze_d1_results.py (statistical analysis script)
  - core/bench_profile.h (D1 promoted to default in MIXED preset)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-13 22:42:22 +09:00

109 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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/BMixed, 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 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凍結
`HAKMEM_WRAP_ENV_CACHE=1` は **-1.44% 回帰**のため、研究箱として freezedefault OFF
次は D3alloc 側に進むか、Phase 3 を総括して次フェーズへ移る。
### Step 5: 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 の次)