Phase 68: PGO training set diversification (seed/WS expansion)
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>
This commit is contained in:
@ -0,0 +1,96 @@
|
||||
# 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()` → 1
|
||||
- `tiny_front_v3_lut_enabled()` → 1
|
||||
- `tiny_front_v3_c7_ultra_enabled()` → 1
|
||||
- `tiny_metadata_cache_enabled()` → 0(FAST正では不要なら)
|
||||
- `small_learner_v2_enabled()` / `learner_v7_enabled()` → 0
|
||||
- `front_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_fixed`
|
||||
- `BENCH_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 への影響を出さない。
|
||||
Reference in New Issue
Block a user