97 lines
3.4 KiB
Markdown
97 lines
3.4 KiB
Markdown
|
|
# 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 への影響を出さない。
|