Changes: - scripts/box/pgo_fast_profile_config.sh: Expanded WS patterns (3→5) and seeds (1→3) for reduced overfitting and better production workload representativeness - PERFORMANCE_TARGETS_SCORECARD.md: Phase 68 baseline promoted (61.614M = 50.93%) - CURRENT_TASK.md: Phase 68 marked complete, Phase 67a (layout tax forensics) set Active Results: - 10-run verification: +1.19% vs Phase 66 baseline (GO, >+1.0% threshold) - M1 milestone: 50.93% of mimalloc (target 50%, exceeded by +0.93pp) - Stability: 10-run mean/median with <2.1% CV 🤖 Generated with Claude Code Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
Phase 63: FAST Profile-Fixed Build(compile-time 定数化で +5–10% を狙う)
背景:
- Phase 60 / 62A が示した通り、alloc/free hot path は LTO で既にかなり最適化されており、micro-opt は layout tax で負けやすい。
- +5–10% を狙うには「同じ層を保ったまま、実行時 gate を compile-time 定数に落として DCE」が最も現実的。
- これは Box Theory に反しない:**“FAST専用の build profile 箱”**として分離し、Standard/OBSERVE は維持する。
目的:
- FAST build でのみ、主要ノブを compile-time 定数化して分岐・lazy-init を消し、+5–10% を狙う。
- 学習層は存在を保持しつつ **FAST では FROZEN(常に false)**に落とす(Standard/OBSERVE は従来どおり)。
成功基準:
- FAST build の Mixed 10-run mean で +2.0% 以上 = GO
- build 変更は layout も動くため閾値を上げる(過去の -2% precedent を踏まえる)。
- ±2.0% = NEUTRAL(freeze)
- -2.0% 以下 = NO-GO(revert)
計測の正:
BENCH_BIN=./bench_random_mixed_hakmem_minimal scripts/run_mixed_10_cleanenv.sh- profile は
MIXED_TINYV3_C7_SAFE(Speed-first)を正にする
Step 1: Build flag(SSOT)
core/hakmem_build_flags.h に追加:
HAKMEM_FAST_PROFILE_FIXED=0/1(default 0)
FAST 専用ターゲットで -DHAKMEM_FAST_PROFILE_FIXED=1 を渡す。
Step 2: “固定すべき gate” のリスト化(まず 5〜8 個に限定)
候補(例):
tiny_front_v3_enabled()→ 1tiny_front_v3_lut_enabled()→ 1tiny_front_v3_c7_ultra_enabled()→ 1tiny_metadata_cache_enabled()→ 0(FAST正では不要なら)small_learner_v2_enabled()/learner_v7_enabled()→ 0front_fastlane_enabled()→ 1(既にプリセットで 1)fastlane_direct_enabled()→ 1(既にプリセットで 1)
ルール:
- “FASTプリセットで常にON/OFF” が確定しているものだけを固定化する。
- それ以外は runtime gate を維持(符号反転を避ける)。
Step 3: 各 gate を build flag で定数化
方針:
#if HAKMEM_FAST_PROFILE_FIXEDのときだけreturn true/false;- それ以外は既存実装(ENV snapshot / lazy init)を維持
注意:
- 新しい関数分割は増やさない(layout tax 回避)。
__builtin_expectは “ENVで変わる条件” には付けない(Phase 19 の教訓)。
Step 4: FAST v4 ターゲット追加(別バイナリ)
Makefile:
bench_random_mixed_hakmem_fast_fixedなどの新ターゲットを追加bench_random_mixed_hakmem_minimalをベースに、追加 CFLAGS でHAKMEM_FAST_PROFILE_FIXED=1
例:
make bench_random_mixed_hakmem_fast_fixedBENCH_BIN=./bench_random_mixed_hakmem_fast_fixed scripts/run_mixed_10_cleanenv.sh
Step 5: A/B(10-run)
A(baseline):
bench_random_mixed_hakmem_minimal
B(treatment):
bench_random_mixed_hakmem_fast_fixed
判定:
- GO: +2.0% 以上
- NEUTRAL: ±2.0%
- NO-GO: -2.0% 以下
必須で併記:
- mean / median / CV
perf stat -e cycles,instructions,branches,branch-misses,iTLB-load-misses,dTLB-load-misses,cache-misses(200M iters)
Rollback
HAKMEM_FAST_PROFILE_FIXED=0(既定)- FAST v4 ターゲットは research として残してよいが、Standard/OBSERVE への影響を出さない。