Files
hakmem/docs/analysis/PHASE66_PGO_FAST_WITH_LTO_RESULTS.md

46 lines
1.7 KiB
Markdown
Raw Normal View History

# Phase 66: PGO (FAST minimal, GCC+LTO) — Results
## TL;DR
PGO は **GO**`BENCH_MINIMAL` の Mixed 10-run で **+6.58%**meanを達成。
## What changed
- Makefile: `pgo-fast-*` の PGO ワークフローを追加GCC + `-flto` を維持)
- `scripts/box/pgo_tiny_profile_box.sh`: `PGO_CONFIG` 切替対応 + workload を `bash -lc` で実行
- `scripts/box/pgo_fast_profile_config.sh`: FAST minimal 用の PGO 代表ワークロードcleanenv 前提)
- Makefile: `bench_tiny_hot_hakmem``$(TINY_BENCH_OBJS)` でリンクLTO 時の未解決参照を解消)
## A/B (Mixed 10-run, cleanenv)
計測の正:
- `scripts/run_mixed_10_cleanenv.sh``ITERS=20000000 WS=400`
- baseline: `bench_random_mixed_hakmem_minimal`
- treatment: `bench_random_mixed_hakmem_minimal_pgo`
結果n=10:
- Baseline mean: `61.718839M ops/s` / median: `61.672012M ops/s`
- PGO mean: `65.780056M ops/s` / median: `66.227247M ops/s`
- Delta: **+6.58% mean** / **+7.38% median**
Verdict: ✅ **GO**build-level のため +1.0% 以上で十分)
## Key lesson (important)
PGO は **profile mismatch で簡単に NO-GO になる**
- NG 例: `bench_random_mixed_hakmem` を “直起動” で profile 収集
- preset/ENV が一致せず、`FASTLANE_DIRECT` 等が OFF のプロファイルが混ざる
- 結果: PGO が逆方向に最適化して -5% 級の regression になり得る
- OK 例(本 Phase 66: **cleanenv 経由で profile 収集**
- `scripts/box/pgo_fast_profile_config.sh``scripts/run_mixed_10_cleanenv.sh` を使う
## How to reproduce
```sh
make pgo-fast-full
```
(手動手順は `docs/analysis/PHASE66_PGO_FAST_WITH_LTO_INSTRUCTIONS.md`