Files
hakmem/docs/analysis/PHASE63_FAST_PROFILE_FIXED_BUILD_INSTRUCTIONS.md
Moe Charm (CI) 84f5034e45 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>
2025-12-17 21:08:17 +09:00

3.4 KiB
Raw Blame History

Phase 63: FAST Profile-Fixed Buildcompile-time 定数化で +510% を狙う)

背景:

  • Phase 60 / 62A が示した通り、alloc/free hot path は LTO で既にかなり最適化されており、micro-opt は layout tax で負けやすい
  • +510% を狙うには「同じ層を保ったまま、実行時 gate を compile-time 定数に落として DCE」が最も現実的。
  • これは Box Theory に反しない:**“FAST専用の build profile 箱”**として分離し、Standard/OBSERVE は維持する。

目的:

  • FAST build でのみ、主要ノブを compile-time 定数化して分岐・lazy-init を消し、+510% を狙う。
  • 学習層は存在を保持しつつ **FAST では FROZEN常に false**に落とすStandard/OBSERVE は従来どおり)。

成功基準:

  • FAST build の Mixed 10-run mean で +2.0% 以上 = GO
    • build 変更は layout も動くため閾値を上げる(過去の -2% precedent を踏まえる)。
  • ±2.0% = NEUTRALfreeze
  • -2.0% 以下 = NO-GOrevert

計測の正:

  • BENCH_BIN=./bench_random_mixed_hakmem_minimal scripts/run_mixed_10_cleanenv.sh
  • profile は MIXED_TINYV3_C7_SAFESpeed-firstを正にする

Step 1: Build flagSSOT

core/hakmem_build_flags.h に追加:

  • HAKMEM_FAST_PROFILE_FIXED=0/1default 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() → 0FAST正では不要なら
  • 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/B10-run

Abaseline:

  • bench_random_mixed_hakmem_minimal

Btreatment:

  • 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-misses200M iters

Rollback

  • HAKMEM_FAST_PROFILE_FIXED=0(既定)
  • FAST v4 ターゲットは research として残してよいが、Standard/OBSERVE への影響を出さない。