Phase 4: E1 docs + E2 next instructions
This commit is contained in:
@ -1,5 +1,15 @@
|
||||
# Phase 4 E1: ENV Snapshot Consolidation(設計メモ)
|
||||
|
||||
## Status(2025-12-14)
|
||||
|
||||
- ✅ 実装完了(commit: `88717a873`)
|
||||
- ✅ Mixed A/B(10-run, iter=20M, ws=400):
|
||||
- Baseline: **43.62M** ops/s
|
||||
- Optimized: **45.33M** ops/s
|
||||
- Gain: **+3.92% avg / +4.01% median**
|
||||
- 判定: **GO**(目標 +2.5% をクリア)
|
||||
- 運用: `HAKMEM_ENV_SNAPSHOT=1` は **opt-in(default OFF)** のまま保持(必要ならプリセット昇格)
|
||||
|
||||
## 目的
|
||||
|
||||
ホットパスで毎回呼ばれている ENV gate(小さな関数)の呼び出し/分岐/TLS参照を **1 回の “snapshot load” に集約**し、
|
||||
@ -54,19 +64,17 @@ MIXED の「shape 最適化の頭打ち」を越える。
|
||||
## API(案)
|
||||
|
||||
```c
|
||||
// core/box/hakmem_env_snapshot_box.h
|
||||
typedef struct HakmemEnvSnapshot {
|
||||
int inited;
|
||||
int enabled; // ENV: HAKMEM_ENV_SNAPSHOT=0/1(default 0)
|
||||
|
||||
// Hot toggles (effective values)
|
||||
int tiny_front_v3_enabled; // default 1
|
||||
int tiny_c7_ultra_enabled; // default 1
|
||||
int tiny_metadata_cache; // default 0
|
||||
int tiny_metadata_cache_eff; // tiny_metadata_cache && !learner
|
||||
bool tiny_c7_ultra_enabled; // ENV: HAKMEM_TINY_C7_ULTRA_ENABLED (default 1)
|
||||
bool tiny_front_v3_enabled; // ENV: HAKMEM_TINY_FRONT_V3_ENABLED (default 1)
|
||||
bool tiny_metadata_cache; // ENV: HAKMEM_TINY_METADATA_CACHE (default 0)
|
||||
bool tiny_metadata_cache_eff; // tiny_metadata_cache && !learner
|
||||
} HakmemEnvSnapshot;
|
||||
|
||||
const HakmemEnvSnapshot* hakmem_env_snapshot_get_fast(void);
|
||||
void hakmem_env_snapshot_refresh_from_env(void);
|
||||
bool hakmem_env_snapshot_enabled(void); // ENV: HAKMEM_ENV_SNAPSHOT=0/1 (default 0)
|
||||
const HakmemEnvSnapshot* hakmem_env_snapshot(void);
|
||||
void hakmem_env_snapshot_refresh_from_env(void); // bench_profile putenv sync
|
||||
```
|
||||
|
||||
設計ノート:
|
||||
@ -80,6 +88,16 @@ bench では `bench_setenv_default()` が `putenv()` を使うため、lazy init
|
||||
- `core/bench_profile.h` の最後で `hakmem_env_snapshot_refresh_from_env()` を必ず呼ぶ
|
||||
- `wrapper_env_refresh_from_env()` / `tiny_static_route_refresh_from_env()` と同じ “ENV 同期箱” 扱い
|
||||
|
||||
## 実装(置換した call-site)
|
||||
|
||||
- `core/front/malloc_tiny_fast.h`:
|
||||
- `tiny_c7_ultra_enabled_env()` → snapshot(alloc/free の C7 ULTRA gate)
|
||||
- `tiny_front_v3_enabled()` → snapshot(free 側 front_snap)
|
||||
- `core/box/tiny_legacy_fallback_box.h`:
|
||||
- `tiny_front_v3_enabled()` / `tiny_metadata_cache_enabled()` → snapshot
|
||||
- `core/box/tiny_metadata_cache_hot_box.h`:
|
||||
- `tiny_metadata_cache_enabled()` → snapshot(learner interlock を snapshot 側で処理)
|
||||
|
||||
## 移行対象(最小)
|
||||
|
||||
まずは “毎回評価される” ところを最小パッチで狙う:
|
||||
@ -114,3 +132,7 @@ bench では `bench_setenv_default()` が `putenv()` を使うため、lazy init
|
||||
- **Learner interlock**:
|
||||
- `tiny_metadata_cache_eff` の計算で learner を必ず抑制
|
||||
|
||||
## 次(Graduate)
|
||||
|
||||
- 追加で 20-run を回し、問題がなければ `MIXED_TINYV3_C7_SAFE` に `HAKMEM_ENV_SNAPSHOT=1` を **プリセット昇格**する(bench default 注入)。
|
||||
- rollback は `HAKMEM_ENV_SNAPSHOT=0`(即戻せる)。
|
||||
|
||||
Reference in New Issue
Block a user