Enable C7 ULTRA segment path by default
This commit is contained in:
@ -239,9 +239,8 @@ Do / Don’t(壊れやすいパターンの禁止)
|
||||
- 標準プロファイル(MIXED_TINYV3_C7_SAFE / C6_HEAVY_LEGACY_POOLV1)は C6 を mid/pool の通常クラスとして扱う。C6_HOT や smallheap(v3/v4)/ULTRA はすべて研究用の opt-in に限定。
|
||||
- C6 を触るときは ENV_PROFILE_PRESETS.md の研究プリセット(C6_SMALL_HEAP_V3_EXPERIMENT / C6_SMALL_HEAP_V4_EXPERIMENT など)から開始し、標準プリセットに混ぜ込まないこと。
|
||||
|
||||
- C7 ULTRA は研究箱(ENV で必ず ON/OFF)
|
||||
- `HAKMEM_TINY_C7_ULTRA_ENABLED` で明示 opt-in。デフォルトは OFF。
|
||||
- UF-3 以降は 2MiB セグメント(64KiB ページ, mask 判定)上で carve/push。セグメント外の ptr は必ず既存 v3 free にフォールバックすること。
|
||||
- C7 ULTRA は UF-3 セグメント版が標準(ENV で OFF に戻せる)
|
||||
- `HAKMEM_TINY_C7_ULTRA_ENABLED` デフォルト ON。2MiB セグメント(64KiB ページ, mask 判定)上で carve/push。セグメント外の ptr は必ず既存 v3 free にフォールバックする。
|
||||
- ON/OFF の前後で必ず健康診断ランを 1 回ずつ取り、差分が出たらまず ULTRA 側を疑う。
|
||||
|
||||
- 一般ルール(壊れたらまず健康診断ラン)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
## HAKMEM 状況メモ (2025-12-10 更新 / Mixed 基準ライン再固定)
|
||||
|
||||
### Phase BASELINE-LOCK: Mixed 16–1024B 現行ベースライン(C7-only v3 / front v3+LUT+fast classify v3)
|
||||
### Phase BASELINE-LOCK: Mixed 16–1024B 現行ベースライン(C7-only v3 / front v3+LUT+fast classify v3 / C7 ULTRA ON)
|
||||
- ベンチ: `./bench_random_mixed_hakmem 1000000 400 1`(1 thread, ws=400, iters=1M, seed=1)。
|
||||
- ENV(プリセット `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE` で自動注入されるものを前提):
|
||||
- `HAKMEM_TINY_HEAP_PROFILE=C7_SAFE`
|
||||
@ -12,13 +12,14 @@
|
||||
- `HAKMEM_SMALL_SEGMENT_V4_ENABLED=0`
|
||||
- `HAKMEM_POOL_V2_ENABLED=0`
|
||||
- `HAKMEM_TINY_FRONT_V3_ENABLED=1` / `HAKMEM_TINY_FRONT_V3_LUT_ENABLED=1`
|
||||
- `HAKMEM_TINY_C7_ULTRA_ENABLED` デフォルト ON(UF-3 セグメント版)
|
||||
- サイズ範囲: `HAKMEM_BENCH_MIN_SIZE=16 HAKMEM_BENCH_MAX_SIZE=1024`
|
||||
- 結果(現 HEAD, Release, 同一マシンで 2 回計測):
|
||||
- v3 本命構成(上記): **33.7–33.9M ops/s**
|
||||
- v3 本命構成(ULTRA ON): **44.1–44.6M ops/s**
|
||||
- v4 強制(C7+C6 v4 + fast classify v4, v3 OFF, segment OFF): **32.0–32.5M ops/s**
|
||||
- C7-only v4(C6 v1, v3 OFF, fast classify v4 ON): **≈33.0M ops/s**
|
||||
- 決定: Mixed の本命構成は引き続き **C7-only v3**。v4 系は研究箱のまま OFF。健康診断の目安は `33–34M ops/s / segvなし`。
|
||||
- 備考: このセクション以降の古い数値(44M など)は過去フェーズの記録であり、現 HEAD とは一致しない。A/B は必ずこの Phase BASELINE-LOCK を基準に実施する。
|
||||
- 決定: Mixed の本命構成は **C7-only v3 + C7 ULTRA (UF-3セグメント)**。v4 系は研究箱のまま OFF。健康診断の目安は `44±1M ops/s / segvなし`。
|
||||
- 備考: 古い 33–34M レンジの記録は ULTRA OFF 時の値。A/B はこのセクションの値を新基準として使用する。
|
||||
|
||||
### Phase UF-0〜UF-2: C7 ULTRA Fast Path(段階的に箱化中)
|
||||
- UF-0: `docs/analysis/TINY_C7_ULTRA_DESIGN.md` に設計をまとめ、ULTRA は C7 専用セグメントを使う別箱(Hot: TinyC7UltraBox, Cold: C7UltraSegmentBox)と定義。UF-1 ではまだページ供給を持たず v3 に委譲する stub で進める方針を確定。
|
||||
|
||||
@ -12,6 +12,7 @@ typedef struct TinyFrontV3Snapshot {
|
||||
uint8_t header_mode; // tiny_header_mode() の値をキャッシュ
|
||||
bool header_v3_enabled; // ENV: HAKMEM_TINY_HEADER_V3_ENABLED
|
||||
bool header_v3_skip_c7; // ENV: HAKMEM_TINY_HEADER_V3_SKIP_C7
|
||||
bool c7_ultra_enabled; // ENV: HAKMEM_TINY_C7_ULTRA_ENABLED
|
||||
} TinyFrontV3Snapshot;
|
||||
|
||||
// Size→class/route entry for Tiny front v3 LUT (route_kind は tiny_route_kind_t を想定)
|
||||
@ -117,6 +118,20 @@ static inline bool tiny_header_v3_skip_c7(void) {
|
||||
return g != 0;
|
||||
}
|
||||
|
||||
// C7 ULTRA stub gate (default OFF)
|
||||
static inline bool tiny_c7_ultra_enabled_env(void) {
|
||||
static int g = -1;
|
||||
if (__builtin_expect(g == -1, 0)) {
|
||||
const char* e = getenv("HAKMEM_TINY_C7_ULTRA_ENABLED");
|
||||
if (e && *e) {
|
||||
g = (*e != '0') ? 1 : 0;
|
||||
} else {
|
||||
g = 1; // default ON (UF-3 セグメント版を標準ホットパスとして扱う)
|
||||
}
|
||||
}
|
||||
return g != 0;
|
||||
}
|
||||
|
||||
// Snapshot initializer (implemented in hakmem_tiny.c)
|
||||
void tiny_front_v3_snapshot_init(void);
|
||||
|
||||
@ -131,3 +146,9 @@ static inline const TinyFrontV3Snapshot* tiny_front_v3_snapshot_get(void) {
|
||||
}
|
||||
return &g_tiny_front_v3_snapshot;
|
||||
}
|
||||
|
||||
// Cached getter for C7 ULTRA gate (snapshot 経由で ENV を 1 回だけ読む)
|
||||
static inline bool tiny_front_v3_c7_ultra_enabled(void) {
|
||||
const TinyFrontV3Snapshot* snap = tiny_front_v3_snapshot_get();
|
||||
return snap->c7_ultra_enabled;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user