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>
2.8 KiB
2.8 KiB
Phase 4: Alloc Gate Specialization(D3 実装指示書)
Phase 3 は D1 昇格 / D2 凍結で完全閉鎖。次の “芯” は alloc 側の gate を削る D3。
現在地(SSOT)
- Active defaults(Mixed):
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):
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_fastself% ≈ 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 の場合は必ず disable(route が動的更新されるため)
- 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/B(GO/NO-GO)
Mixed 10-run(推奨: iter=20M, ws=400, 1T):
- Baseline:
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE HAKMEM_ALLOC_GATE_LEGACY_ONLY=0 \
./bench_random_mixed_hakmem 20000000 400 1
- Optimized:
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 として freeze(default OFF)
- 本線は汚さない(プリセット昇格はしない)