Phase 5 Complete: E7 NO-GO confirmed + ChatGPT Pro questionnaire
Summary: - E7 frozen box prune: -3.20% regression (NO-GO) with clean ENV - Keep E5-2/E5-4 (NEUTRAL) + E6 (NO-GO) as research boxes - Regression due to build differences (LTO/layout/alignment), not logic Results: - Winning boxes: E4-1 (+3.51%), E4-2 (+21.83%), E5-1 (+3.35%) → adopted - Frozen boxes: E5-2, E5-4, E6, E7 → kept with ENV gates (doc as assets) - Phase 5 cumulative progress: +6.43% on MIXED profile Documentation updates: - PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md: Final NO-GO record - PHASE5_E7_FROZEN_BOX_PRUNE_NEXT_INSTRUCTIONS.md: E7 conclusion Next phase planning: - PHASE_ML2_CHATGPT_QUESTIONNAIRE_FASTLANE.md: Design consultation template - Candidates: dedup new boundaries, PGO/layout optimization feasibility 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -200,6 +200,7 @@
|
|||||||
- `docs/analysis/PHASE5_E6_ENV_SNAPSHOT_SHAPE_AB_TEST_RESULTS.md`
|
- `docs/analysis/PHASE5_E6_ENV_SNAPSHOT_SHAPE_AB_TEST_RESULTS.md`
|
||||||
- `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_NEXT_INSTRUCTIONS.md`
|
- `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_NEXT_INSTRUCTIONS.md`
|
||||||
- `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md`
|
- `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md`
|
||||||
|
- `PHASE_ML2_CHATGPT_QUESTIONNAIRE_FASTLANE.md`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
87
PHASE_ML2_CHATGPT_QUESTIONNAIRE_FASTLANE.md
Normal file
87
PHASE_ML2_CHATGPT_QUESTIONNAIRE_FASTLANE.md
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# PHASE ML2: 外部LLM向け 質問状(FastLane / Layer Collapse 設計レビュー)
|
||||||
|
|
||||||
|
## 0. 目的
|
||||||
|
|
||||||
|
- mimalloc との差を詰めるための「次の高 ROI 設計」を外部レビューで得る。
|
||||||
|
- 箱理論(Box Theory)を守り、**ENV で戻せる**・**境界1箇所**・**Fail-Fast**・**最小可視化**の形で提案してほしい。
|
||||||
|
|
||||||
|
## 1. 重要な前提(比較の作法)
|
||||||
|
|
||||||
|
- 以後の A/B は **同一バイナリで ENV トグル**が原則(削除/追加で別バイナリにすると、LTO/配置差で結果が崩れる)。
|
||||||
|
- 参考: `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md`
|
||||||
|
- `bench_setenv_default()` は export 済み ENV を上書きしないため、過去の実験 ENV が残ると比較が壊れる。
|
||||||
|
- Mixed 10-run 実行補助: `scripts/run_mixed_10_cleanenv.sh`
|
||||||
|
|
||||||
|
## 2. 現在地(事実メモ)
|
||||||
|
|
||||||
|
### 2.1 競合比較(Mixed 16–1024B, 2025-12-05 時点)
|
||||||
|
|
||||||
|
- HAKMEM: **44.45M ops/s**
|
||||||
|
- mimalloc: **117.20M ops/s**
|
||||||
|
- system: **90.95M ops/s**
|
||||||
|
- 出典: `CURRENT_TASK_ARCHIVE_20251210.md`
|
||||||
|
|
||||||
|
※ 現在は上積みが進んでいるが、mimalloc との距離感の基準として引用。
|
||||||
|
|
||||||
|
### 2.2 直近の勝ち筋
|
||||||
|
|
||||||
|
- “分岐形/ヒント” は飽和しやすい(Zen で branch miss rate が低い)。
|
||||||
|
- 一方で **重複排除(境界の一本化)** と **ENV/TLS 読み回数の削減**は勝ちやすい。
|
||||||
|
- “凍結箱を削る(diet)” は **NO-GO**(別バイナリ比較になり、配置差が支配的)。
|
||||||
|
|
||||||
|
## 3. 読んでほしい資料(最小セット)
|
||||||
|
|
||||||
|
1. `AGENTS.md`(箱理論ルール)
|
||||||
|
2. `CURRENT_TASK.md`(直近の勝ち箱/負け箱の記録)
|
||||||
|
3. `PERF_PROFILE_ANALYSIS_20251204.md`(ホットスポット俯瞰)
|
||||||
|
4. `docs/analysis/PHASE5_E5_COMPREHENSIVE_ANALYSIS.md`(E4/E5 系の学び)
|
||||||
|
5. `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md`(別バイナリ A/B の罠)
|
||||||
|
|
||||||
|
制約:
|
||||||
|
- `/home/user/hakmem_private/...` のような **絶対パス**は使わず、ファイル名/パスは **repo 相対**で書いてください。
|
||||||
|
|
||||||
|
## 4. 質問(回答フォーマット指定)
|
||||||
|
|
||||||
|
### Q1. 次の「芯」の優先順位(必須)
|
||||||
|
|
||||||
|
次の 3 案を **ROI / リスク / 工数**で順位付けし、推奨案を 1 つ選んでください。
|
||||||
|
|
||||||
|
- A) **Front FastLane**: wrapper + gate + policy + route を “hot 1箱” に畳み、cold 側へ単一フォールバック
|
||||||
|
- B) **ptr→meta 到達の O(1) 化**を mid/pool に波及(segment/mask 方式で lookup 地獄を避ける)
|
||||||
|
- C) **触るメモリ削減**(cache miss / minor fault を減らすための geometry/metadata 見直し)
|
||||||
|
|
||||||
|
### Q2. 推奨案の Box 分割(必須)
|
||||||
|
|
||||||
|
推奨案について、以下を提示してください。
|
||||||
|
|
||||||
|
- 箱名(L0/L1/L2…)
|
||||||
|
- 箱の責務(各 1 文)
|
||||||
|
- 境界 API(関数名・引数・戻り値)
|
||||||
|
- “変換点は 1 箇所” をどこに置くか
|
||||||
|
|
||||||
|
### Q3. Fail-Fast と安全ゲート(必須)
|
||||||
|
|
||||||
|
- fast path に入れる条件(必要最小)
|
||||||
|
- 必ず fallback する条件(安全側)
|
||||||
|
- 不変条件(assert/範囲チェック/ワンショットログ等、最小)
|
||||||
|
|
||||||
|
### Q4. 戻せる導入プラン(必須)
|
||||||
|
|
||||||
|
Phase 0〜2 くらいの小パッチ順序で提示してください。
|
||||||
|
|
||||||
|
- ENV gate 名と default
|
||||||
|
- A/B の評価コマンド(Mixed 10-run + 可能なら perf stat)
|
||||||
|
- GO/NO-GO 閾値(例: +1.0% 以上で GO、-1.0% 以下で NO-GO 等)
|
||||||
|
|
||||||
|
### Q5. “mimalloc に追いつく” の現実ライン(必須)
|
||||||
|
|
||||||
|
- 現状の多層構造(wrapper→gate→policy→route→handler)を保ったままの上限(ざっくり %)
|
||||||
|
- parity に近づくために「統合/削除しないと無理」な層がどこか(具体)
|
||||||
|
|
||||||
|
## 5. 期待する回答形式(これで返してほしい)
|
||||||
|
|
||||||
|
1. 1枚サマリ(箇条書き)
|
||||||
|
2. Box 図(ASCIIでOK)
|
||||||
|
3. API 一覧
|
||||||
|
4. A/B 手順と閾値
|
||||||
|
5. リスクと対策(戻せる手段を含む)
|
||||||
@ -7,14 +7,11 @@
|
|||||||
- **対象**: `MIXED_TINYV3_C7_SAFE` プロファイル
|
- **対象**: `MIXED_TINYV3_C7_SAFE` プロファイル
|
||||||
- **手法**: ビルド差分 A/B (削除前/削除後の比較)
|
- **手法**: ビルド差分 A/B (削除前/削除後の比較)
|
||||||
|
|
||||||
⚠️ **重要(再現性/前提)**:
|
⚠️ **重要(この実験の性質 / 再現性)**:
|
||||||
- この A/B は `HAKMEM_PROFILE=...` のみを指定しており、シェルに残っている ENV(例: `HAKMEM_TINY_HEADER_WRITE_ONCE=1` / `HAKMEM_MALLOC_TINY_DIRECT=1`)を明示的に OFF にしていません。
|
- E7 は “削除前/削除後” の **別バイナリ比較**(ビルド差分)であり、LTO/配置/インライン等の二次効果が支配することがある。
|
||||||
- `bench_setenv_default()` は **既に export 済みの ENV を上書きしない**ため、過去の実験の ENV が残っていると「削除前だけ高速化が有効」→「削除後はコード自体が消えて効かない」という歪んだ比較になります。
|
- さらに `bench_setenv_default()` は **既に export 済みの ENV を上書きしない**ため、過去の実験 ENV が残ると比較が歪む。
|
||||||
- このため、本結果は **ENV 漏れの影響を受けている可能性が高い**(要 clean-env で再計測)。
|
- 本ドキュメントは「dirty ENV 版」と「clean ENV 再計測」を両方記録しており、どちらも **NO-GO** で一致した。
|
||||||
|
- 再現用: `scripts/run_mixed_10_cleanenv.sh`(研究 knobs を明示 OFF して実行)
|
||||||
推奨(再計測の最低条件):
|
|
||||||
- 両ビルドで `HAKMEM_TINY_HEADER_WRITE_ONCE=0` と `HAKMEM_MALLOC_TINY_DIRECT=0` を明示してから測る。
|
|
||||||
- 実行補助: `scripts/run_mixed_10_cleanenv.sh`
|
|
||||||
|
|
||||||
## 削除対象
|
## 削除対象
|
||||||
|
|
||||||
@ -126,6 +123,16 @@ Mean: 42,538,872 ops/s
|
|||||||
- “diet(凍結箱の削除)” は現状 **やらない**。
|
- “diet(凍結箱の削除)” は現状 **やらない**。
|
||||||
- 少なくとも E5-2/E5-4 を削ると、想定以上に悪影響(ビルド差分/配置差分の可能性)になる。
|
- 少なくとも E5-2/E5-4 を削ると、想定以上に悪影響(ビルド差分/配置差分の可能性)になる。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 解釈(重要)
|
||||||
|
|
||||||
|
この結果は **「E5-2/E5-4 を ON にすると +3%」** を意味しない。
|
||||||
|
|
||||||
|
- E7 は “削除前/削除後” の **別バイナリ比較**であり、LTO/配置/インライン等の二次効果が支配的になり得る。
|
||||||
|
- 既存の “同一バイナリ A/B(ENVトグル)” における E5-2/E5-4 の判定(NEUTRAL/NO-GO)は、そのまま有効。
|
||||||
|
- よって本結論は「凍結箱は *消さずに* 残す(default OFFで運用)」であり、「勝ち箱として昇格」ではない。
|
||||||
|
|
||||||
## 保存された記録
|
## 保存された記録
|
||||||
|
|
||||||
- `docs/analysis/PHASE5_E5_4_MALLOC_TINY_DIRECT_AB_TEST_RESULTS.md` (保持)
|
- `docs/analysis/PHASE5_E5_4_MALLOC_TINY_DIRECT_AB_TEST_RESULTS.md` (保持)
|
||||||
@ -138,9 +145,9 @@ Mean: 42,538,872 ops/s
|
|||||||
|
|
||||||
Phase 5 E7 Frozen Box Prune は **NO-GO**。
|
Phase 5 E7 Frozen Box Prune は **NO-GO**。
|
||||||
|
|
||||||
E5-2 と E5-4 は、研究箱として凍結するのではなく、**有効な最適化として baseline に統合**すべきである。
|
E5-2 と E5-4 は **削除せずに保持**し、従来どおり(default OFF の)研究箱として運用する。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
作成日: 2025-12-14
|
作成日: 2025-12-14
|
||||||
実施者: Claude Opus 4.5
|
実施者: Task agent
|
||||||
|
|||||||
@ -1,82 +1,24 @@
|
|||||||
# Phase 5 E7: Frozen Box Prune(結果: NO-GO / 差し戻し)
|
# Phase 5 E7: Frozen Box Prune(結論: NO-GO / やらない)
|
||||||
|
|
||||||
## Status(2025-12-14)
|
## Status(2025-12-14)
|
||||||
|
|
||||||
- 結果: **NO-GO**(削除後 **-3% 台**)
|
- 結果: **NO-GO**(削除で **-3%台** の回帰)
|
||||||
- 結論: 現状は “diet” を採用しない(凍結箱はコードとして保持)
|
- 結論: “diet(凍結箱の削除)” は採用しない(凍結箱は default OFF のまま **コード保持**)
|
||||||
- 詳細: `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md`
|
- 詳細: `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md`
|
||||||
|
|
||||||
## 背景(E5-2/E5-4 NEUTRAL + E6 NO-GO)
|
## Why(なぜ “削る” は危ない?)
|
||||||
|
|
||||||
E5-2 / E5-4 / E6 の学び:
|
- E7 は “削除前/削除後” の **別バイナリ比較**になり、LTO/配置/インライン等の二次効果が支配する。
|
||||||
- “実験箱” を ENV gate で差し込むだけでも **branch + code size の税**が発生する
|
- “コードを減らせば速い” は成立しない(むしろ配置が崩れて回帰し得る)。
|
||||||
- それが勝ち箱の gains を相殺しやすい(特に Zen 系で miss rate が既に低い場合)
|
- `bench_setenv_default()` は export 済み ENV を上書きしないため、dirty ENV のまま測ると比較が壊れる。
|
||||||
|
|
||||||
狙い(当初案):
|
## Rules(今後の運用)
|
||||||
- **凍結済みの研究箱**を hot path から外し、baseline を “痩せさせる”
|
|
||||||
|
|
||||||
結果:
|
- A/B は **同一バイナリ**で ENV トグル(研究箱は削除しない)。
|
||||||
- ビルド差分 A/B で **有意な回帰**が出たため、この方針は撤回する。
|
- Mixed ベンチは `scripts/run_mixed_10_cleanenv.sh` を使い、研究 knobs を明示 OFF(ENV 漏れ防止)。
|
||||||
- (配置/最適化の二次効果が支配的で、単純な “branch 税回収” にならなかった)
|
- “削る” をやるならまずは削除ではなく、`cold/noinline` へ退避して **同一バイナリ内**で遠ざける(境界1箇所・戻せる)。
|
||||||
|
|
||||||
---
|
## References
|
||||||
|
|
||||||
## Step 0: 対象(消してよい研究箱)
|
- 結果: `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md`
|
||||||
|
- clean-env runner: `scripts/run_mixed_10_cleanenv.sh`
|
||||||
優先順:
|
|
||||||
1. E6(ENV snapshot shape): NO-GO、hot path を肥大化させる
|
|
||||||
2. E5-4(Malloc Tiny Direct): NEUTRAL、malloc wrapper に余計な分岐を足す
|
|
||||||
3. E5-2(Header write-once): NEUTRAL、alloc hot path 側に分岐を足すなら同様に外す
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Step 1: E6 の実装を削除(doc だけ残す)
|
|
||||||
|
|
||||||
- `core/box/env_snapshot_shape_env_box.h` を削除
|
|
||||||
- `core/front/malloc_tiny_fast.h` / `core/box/tiny_metadata_cache_hot_box.h` /
|
|
||||||
`core/box/tiny_legacy_fallback_box.h` の E6 分岐を削除(元に戻す)
|
|
||||||
- `docs/analysis/PHASE5_E6_ENV_SNAPSHOT_SHAPE_AB_TEST_RESULTS.md` は残す(失敗の記録)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Step 2: E5-4 の実装を削除(doc だけ残す)
|
|
||||||
|
|
||||||
- `core/box/malloc_tiny_direct_env_box.h` / `core/box/malloc_tiny_direct_stats_box.h` を削除
|
|
||||||
- `core/box/hak_wrappers.inc.h` の E5-4 追加分岐(`malloc_tiny_direct_enabled()`)を削除
|
|
||||||
- `docs/analysis/PHASE5_E5_4_MALLOC_TINY_DIRECT_AB_TEST_RESULTS.md` は残す
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Step 3: A/B(削除前/削除後)
|
|
||||||
|
|
||||||
削除は ENV で切れないため “ビルド差分 A/B” になる。
|
|
||||||
|
|
||||||
1) 削除前(現 HEAD)で 10-run:
|
|
||||||
```sh
|
|
||||||
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE ./bench_random_mixed_hakmem 20000000 400 1
|
|
||||||
```
|
|
||||||
|
|
||||||
2) 削除後で 10-run:
|
|
||||||
```sh
|
|
||||||
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE ./bench_random_mixed_hakmem 20000000 400 1
|
|
||||||
```
|
|
||||||
|
|
||||||
判定:
|
|
||||||
- GO: mean **+0.8% 以上**(“diet” は小粒になりがちなので閾値を下げる)
|
|
||||||
- ±0.8%: NEUTRAL(消しても OK、保守性メリットで採用可)
|
|
||||||
- -0.8% 以下: 差し戻し(予想外の最適化阻害がある)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Step 4: 健康診断(必須)
|
|
||||||
|
|
||||||
```sh
|
|
||||||
scripts/verify_health_profiles.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Step 5: ドキュメント更新
|
|
||||||
|
|
||||||
- `CURRENT_TASK.md`: E6/E5-4 を “凍結 → 実装削除(doc のみ保持)” と明記
|
|
||||||
- `docs/analysis/PHASE5_E5_NEXT_INSTRUCTIONS.md`: 次の芯を E7(diet)に更新
|
|
||||||
|
|||||||
Reference in New Issue
Block a user