82 lines
3.3 KiB
Markdown
82 lines
3.3 KiB
Markdown
|
|
# Phase 40 — FAST v4: Remaining Gate Prune(DEPRECATED / Historical)
|
|||
|
|
|
|||
|
|
この指示書は Phase 40 の初期案です。
|
|||
|
|
|
|||
|
|
- Phase 40 は **`tiny_header_mode()` の BENCH_MINIMAL 定数化が NO-GO** となり、revert 済みです。
|
|||
|
|
- 正しい記録は `docs/analysis/PHASE40_GATE_CONSTANTIZATION_RESULTS.md` を参照してください。
|
|||
|
|
- 次は Phase 41(asm-first 監査)へ進むのが正です。
|
|||
|
|
|
|||
|
|
目的: FAST build(`HAKMEM_BENCH_MINIMAL=1`)の hot path に残る **lazy-init / ENV gate** をさらに compile-time 定数化して固定税を削る。
|
|||
|
|
|
|||
|
|
前提(運用の正):
|
|||
|
|
- 性能比較は **FAST build**(`make perf_fast`)を正とする。
|
|||
|
|
- 判定は build-level: **GO +0.5% / NEUTRAL ±0.5% / NO-GO -0.5%**(Mixed 10-run mean)。
|
|||
|
|
- link-out / 物理削除はしない(layout/LTO で符号反転する)。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 0(必須): 実行確認 / 安全確認
|
|||
|
|
|
|||
|
|
1) `HAKMEM_MID_V3_ENABLED` が FAST/Mixed で **OFF 前提**であることを確認する(bench preset / cleanenv)。
|
|||
|
|
- `scripts/run_mixed_10_cleanenv.sh` は export 汚染を防ぐが、MID v3 については明示していないため、必要なら OFF を追加。
|
|||
|
|
|
|||
|
|
2) `tiny_header_mode` の default が FULL であることを確認する(現状 `HAKMEM_TINY_HEADER_MODE` 未設定 → FULL)。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 1(優先A): tiny_header_mode() の FAST 定数化(FULL 固定)
|
|||
|
|
|
|||
|
|
ターゲット:
|
|||
|
|
- `core/tiny_region_id.h` の `tiny_header_mode()`(alloc hot から呼ばれている)
|
|||
|
|
|
|||
|
|
実装方針:
|
|||
|
|
- `#if HAKMEM_BENCH_MINIMAL` のとき `tiny_header_mode()` を `TINY_HEADER_MODE_FULL` 固定にする。
|
|||
|
|
- Standard/OBSERVE は現状維持(ENV で切替可能)。
|
|||
|
|
|
|||
|
|
推奨(追加で検討):
|
|||
|
|
- `tiny_region_id_write_header()` の “HOTFULL=1” 分岐内で `tiny_header_mode()` を呼んでいる箇所は、FAST では FULL 固定なので呼ばない形に寄せられる(I-cache/分岐削減)。
|
|||
|
|
|
|||
|
|
期待: +0.3〜0.8%(※ 実測では NO-GO になった)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 2(優先B): mid_v3_enabled / mid_v3_debug_enabled の FAST 定数化(OFF 固定)
|
|||
|
|
|
|||
|
|
ターゲット:
|
|||
|
|
- `core/box/mid_hotbox_v3_env_box.h`
|
|||
|
|
- `mid_v3_enabled()`
|
|||
|
|
- `mid_v3_debug_enabled()`
|
|||
|
|
|
|||
|
|
実装方針:
|
|||
|
|
- `#if HAKMEM_BENCH_MINIMAL` では両方 `0` 固定。
|
|||
|
|
- Standard/OBSERVE は現状維持(研究箱として ENV opt-in)。
|
|||
|
|
|
|||
|
|
注意:
|
|||
|
|
- free 側の `hak_free_at()` や alloc 側の `hak_malloc()`(`core/box/hak_alloc_api.inc.h`)で `mid_v3_enabled()` が頻繁に呼ばれているため、定数化で呼び出し自体を消せる可能性がある。
|
|||
|
|
|
|||
|
|
期待: +0.2〜0.5%(enabled) +0.1〜0.3%(debug)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Step 3: A/B(FAST 10-run)
|
|||
|
|
|
|||
|
|
コマンド:
|
|||
|
|
- baseline(FAST v3): `make perf_fast`
|
|||
|
|
- optimized(FAST v4): `make perf_fast`
|
|||
|
|
|
|||
|
|
判定:
|
|||
|
|
- GO: +0.5% 以上
|
|||
|
|
- NEUTRAL: ±0.5%(code cleanliness で採用可)
|
|||
|
|
- NO-GO: -0.5% 以下(revert)
|
|||
|
|
|
|||
|
|
ログ更新:
|
|||
|
|
- `docs/analysis/PHASE40_FAST_V4_REMAINING_GATES_RESULTS.md` を新規作成して 10-run mean/median を記録。
|
|||
|
|
- `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` の FAST build 履歴を更新。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Rollback(戻せる)
|
|||
|
|
|
|||
|
|
- すべて `#if HAKMEM_BENCH_MINIMAL` の中だけを触る(Standard/OBSERVE は無傷)。
|
|||
|
|
- revert は対象ファイルの `#if HAKMEM_BENCH_MINIMAL` ブロックを戻すだけ。
|