47 lines
4.2 KiB
Markdown
47 lines
4.2 KiB
Markdown
|
|
Tiny Next Steps (Phase 19 メモ)
|
|||
|
|
===============================
|
|||
|
|
|
|||
|
|
事実スナップショット
|
|||
|
|
--------------------
|
|||
|
|
- 標準プロファイル (v1 締め)
|
|||
|
|
- LEGACY … TinyHeap 全無効。
|
|||
|
|
- C7_SAFE … class mask=0x80, meta_mode=1 に加え `HAKMEM_TINY_STATS_BOX=1 HAKMEM_TINY_STATS_BATCH=0` をセット。C6 は OFF。
|
|||
|
|
- Bench/実験 … C7_ULTRA_BENCH、C6 TinyHeap マスク (0x40/0xC0)、`HAKMEM_TINY_STATS_BATCH=1` は bench 専用。
|
|||
|
|
- プロファイルと性能
|
|||
|
|
- C7_SAFE: C7-only 20k/ws64 ≈46.6M ops/s、Mixed 16–1024B は LEGACY と ±1M 以内(軽いマイナス〜誤差)。C7-heavy 向けの本番寄りプロファイル。
|
|||
|
|
- C7_ULTRA_BENCH: C7-only 20k/ws64 ≈52M ops/s(bench 専用、Superslab/Tier 整合は緩む)。
|
|||
|
|
- C6 TinyHeap: C6-heavy (min=257/max=768) LEGACY≈44.3M → TinyHeap≈38.6M。Mixed 16–1024B でも ≈38.5M〜39.5M と明確なマイナス。slow_prepare は ≒1 でも遅く、経路オーバーヘッドが支配的。
|
|||
|
|
- Cold Stats Box: STATS_BOX=1 は C7 SAFE で同等〜わずかプラス、BATCH=1 は C7-only/Mixed とも大幅マイナス(bench 専用扱い)。
|
|||
|
|
- クラス分布の目安(HEAP_STATS, ws=256/iters=20k)
|
|||
|
|
- Mixed 16–1024B + C7 SAFE: cls7 fast≈5691 / slow≈1。C6 を載せた場合でも cls6 fast≈2744 / slow≈1 と slow_prepare は低い。
|
|||
|
|
- C6-heavy: cls6 fast≈5372 / slow≈1。slow_prepare が少なくても throughput は低下。
|
|||
|
|
- 結論(現状)
|
|||
|
|
- C7 SAFE は C7-only で明確なプラス、Mixed でも許容レンジ → 推奨プロファイル候補。
|
|||
|
|
- C6 TinyHeap は現状ベンチ/実験専用。デフォルトでは OFF(mask=0x80 のまま)。
|
|||
|
|
|
|||
|
|
次の箱候補(2 本に絞る)
|
|||
|
|
-----------------------
|
|||
|
|
1) C6 TinyHeap を C7 SAFE 流に攻める箱
|
|||
|
|
- やること: current 固定・slow_prepare 抑制、meta-light/delta/閾値 flush の安全版を C6 に移植。Superslab/Tier の整合を Fail-Fast で確認しながら命令を削る。
|
|||
|
|
- リスク: 実装が複雑化するため delta debug/assert を増やす必要あり。効果が出なければ C6 TinyHeap は Bench 専用のまま。
|
|||
|
|
|
|||
|
|
2) Tiny front をさらに薄くする箱
|
|||
|
|
- 方向: Route Snapshot の上に C6/C7 用の直線 front(C7 HotPipeline 相当)を広げ、Gate/UC/TLS SLL 経路の命令数を削る。
|
|||
|
|
- 位置づけ: C6 TinyHeap 攻めとほぼ同じ課題の裏表。C6 current 固定+軽量 meta と合わせて検討。
|
|||
|
|
|
|||
|
|
3) Cold Tiny Stats Box を詰める箱
|
|||
|
|
- 役割: C7 SAFE で始めた page 内 delta/flush を「Cold Stats Box」に委譲し、meta->used / ss_active_* の更新をホットパスから切り離す。
|
|||
|
|
- 進捗: STATS_BOX を導入済み。BATCH=0 は性能同等、BATCH=1 は C7-only/Mixed とも大きく劣化(bench 専用)。`HAKMEM_TINY_STATS_BATCH` は当面 OFF 推奨。
|
|||
|
|
- 次の一手: BATCH=0 を前提に C5/C6 など他クラスへの適用可否を検討するか、別の箱(front/UC など)を優先するかを再評価。
|
|||
|
|
|
|||
|
|
当面の運用ルール
|
|||
|
|
----------------
|
|||
|
|
- デフォルト: PROFILE=LEGACY か PROFILE=C7_SAFE を手動選択。C7_SAFE 時は `HAKMEM_TINY_STATS_BOX=1 HAKMEM_TINY_STATS_BATCH=0` をセット。C6 TinyHeap は明示しない限り OFF。
|
|||
|
|
- mimalloc 比較フラグ:
|
|||
|
|
- C7-only → `HAKMEM_BENCH_C7_ONLY=1 HAKMEM_TINY_HEAP_PROFILE=C7_SAFE HAKMEM_TINY_STATS_BOX=1 HAKMEM_TINY_STATS_BATCH=0 HAKMEM_TINY_LARSON_FIX=1`(ULTRA は研究用)。
|
|||
|
|
- Mixed 16–1024B → `HAKMEM_BENCH_MIN_SIZE=16 HAKMEM_BENCH_MAX_SIZE=1024 HAKMEM_TINY_LARSON_FIX=1` で PROFILE=LEGACY と PROFILE=C7_SAFE を並べて比較(C6 は載せない)。
|
|||
|
|
- C6 を触るときは必ず HEAP_CLASSES で class6 を明示し、`HAKMEM_TINY_HEAP_STATS[_DUMP]=1` で fast/slow を一緒に記録する。C6 は bench 専用のまま。
|
|||
|
|
- HotHeap v2 (C7 専用) の扱い:
|
|||
|
|
- 現状は C7-only でも v1 より遅く、Mixed では大きく回帰。標準は `HAKMEM_TINY_HOTHEAP_V2=0`(v1 C7_SAFE を使用)。
|
|||
|
|
- 研究/実験で使う場合のみ `HAKMEM_TINY_HOTHEAP_V2=1 HAKMEM_TINY_HOTHEAP_CLASSES=0x80` を明示し、`HAKMEM_TINY_HOTHEAP_V2_STATS=1` で fallback/fast 比率を観測する。結果が悪くてもよいベンチ専用モードとする。
|