71 lines
2.8 KiB
Markdown
71 lines
2.8 KiB
Markdown
|
|
# Phase 47 — FAST Front “PGO mode” fixed config(`HAKMEM_TINY_FRONT_PGO=1` を FAST に適用)
|
|||
|
|
|
|||
|
|
## 目的
|
|||
|
|
|
|||
|
|
FAST build のフロント設定を `HAKMEM_TINY_FRONT_PGO=1`(= compile-time fixed config)で統一し、分岐・間接呼び出し・依存チェーンを減らして **+3〜8%** を狙う。
|
|||
|
|
|
|||
|
|
前提(ここまでの結論):
|
|||
|
|
- Phase 39 で gate はほぼ枯渇
|
|||
|
|
- Phase 44/45 で cache-miss ではなく dependency chain 側が支配的
|
|||
|
|
- Phase 46A で micro の上限が見えた(関数単体改善×寄与率で 1% 前後)
|
|||
|
|
|
|||
|
|
→ ここからは “個別関数” より **フロント全体の形(compile-time constants)**で勝ちに行く。
|
|||
|
|
|
|||
|
|
## 方針(Box Theory)
|
|||
|
|
|
|||
|
|
- Standard/OBSERVE は維持(安全/観測の正)。
|
|||
|
|
- FAST は「性能測定の正」なので、**固定 config を採用してよい**(Phase 35-B の運用方針と整合)。
|
|||
|
|
- link-out / 物理削除は禁止。`EXTRA_CFLAGS` で切替。
|
|||
|
|
|
|||
|
|
## 変更内容(FASTのみ)
|
|||
|
|
|
|||
|
|
`HAKMEM_TINY_FRONT_PGO=1` を FAST build 全 TU に適用する。
|
|||
|
|
|
|||
|
|
効果:
|
|||
|
|
- `core/box/tiny_front_config_box.h` のマクロ群が **compile-time constants** になる
|
|||
|
|
- 例: `TINY_FRONT_UNIFIED_CACHE_ENABLED 1` / `TINY_FRONT_METRICS_ENABLED 0` など
|
|||
|
|
- runtime gate 関数呼び出しが消えやすく、依存チェーンと I-cache footprint が減る
|
|||
|
|
|
|||
|
|
注意:
|
|||
|
|
- これは “profile-guided optimization” の PGO ではなく、**fixed configuration** モード(名前が紛らわしい)。
|
|||
|
|
|
|||
|
|
## 実装手順
|
|||
|
|
|
|||
|
|
### Step 0: baseline(FAST v3)
|
|||
|
|
|
|||
|
|
- `make perf_fast` を 1回取り、mean/median を記録。
|
|||
|
|
|
|||
|
|
### Step 1: 新 FAST バイナリターゲット追加
|
|||
|
|
|
|||
|
|
Makefile に新ターゲットを追加(例):
|
|||
|
|
- `bench_random_mixed_hakmem_fast_front_pgo`
|
|||
|
|
- `$(MAKE) clean`
|
|||
|
|
- `$(MAKE) bench_random_mixed_hakmem EXTRA_CFLAGS='-DHAKMEM_BENCH_MINIMAL=1 -DHAKMEM_TINY_FRONT_PGO=1'`
|
|||
|
|
- `mv ... bench_random_mixed_hakmem_fast_front_pgo`
|
|||
|
|
|
|||
|
|
`perf_fast` と同等の 10-run を回せるようにする:
|
|||
|
|
- `BENCH_BIN=./bench_random_mixed_hakmem_fast_front_pgo scripts/run_mixed_10_cleanenv.sh`
|
|||
|
|
|
|||
|
|
### Step 2: A/B(10-run)
|
|||
|
|
|
|||
|
|
- baseline: `BENCH_BIN=./bench_random_mixed_hakmem_minimal scripts/run_mixed_10_cleanenv.sh`
|
|||
|
|
- treatment: `BENCH_BIN=./bench_random_mixed_hakmem_fast_front_pgo scripts/run_mixed_10_cleanenv.sh`
|
|||
|
|
|
|||
|
|
判定(build-level):
|
|||
|
|
- GO: **+0.5%** 以上
|
|||
|
|
- NEUTRAL: **±0.5%**
|
|||
|
|
- NO-GO: **-0.5%** 以下(revert / target撤去)
|
|||
|
|
|
|||
|
|
### Step 3: 互換確認(最小)
|
|||
|
|
|
|||
|
|
- `make perf_observe` を 1回(クラッシュ/ASSERT が無いこと)
|
|||
|
|
|
|||
|
|
## 出力ドキュメント
|
|||
|
|
|
|||
|
|
- `docs/analysis/PHASE47_FAST_FRONT_PGO_MODE_RESULTS.md`
|
|||
|
|
- baseline/treatment mean/median
|
|||
|
|
- 変更した compile flags
|
|||
|
|
- 判定(GO/NEUTRAL/NO-GO)
|
|||
|
|
- `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` に FAST variant と履歴を追記
|
|||
|
|
|