Phase v7-2: SmallObject v7 C6-only implementation with RegionIdBox integration

- SmallSegment_v7: 2MiB segment with TLS slot and free page stack
- ColdIface_v7: Page refill/retire between HotBox and SegmentBox
- HotBox_v7: Full C6-only alloc/free with header writing (HEADER_MAGIC|class_idx)
- Free path early-exit: Check v7 route BEFORE ss_fast_lookup (separate mmap segment)
- RegionIdBox: Register v7 segment for ptr->region lookup
- Benchmark: v7 ON ~54.5M ops/s (-7% overhead vs 58.6M legacy baseline)

v7 correctly balances alloc/free counts and page lifecycle.
RegionIdBox overhead identified as primary cost driver.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Moe Charm (CI)
2025-12-12 03:12:28 +09:00
parent a8d0ab06fc
commit 39a3c53dbc
17 changed files with 1729 additions and 61 deletions

View File

@ -36,6 +36,8 @@ HAKMEM_BENCH_MAX_SIZE=1024
- `HAKMEM_POOL_V2_ENABLED=0`
- `HAKMEM_TINY_FRONT_V3_ENABLED=1`
- `HAKMEM_TINY_FRONT_V3_LUT_ENABLED=1`
- `HAKMEM_MID_V3_ENABLED=1`Phase MID-V3: 257-768B, C6 only
- `HAKMEM_MID_V3_CLASSES=0x40`C6 only, C7 は ULTRA に任せる)
### 任意オプション
- stats を見たいとき:
@ -67,8 +69,10 @@ HAKMEM_THP=auto
- C6-heavy mid/smallmid のベンチ用。
- C6 は v1 固定C6 v3/v4/ULTRA は研究箱のみ。Pool v2 OFF。Pool v1 flatten は bench 用に opt-in。
### ENVv1 基準線)
### ENVv1 基準線 + MID v3
```sh
HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1
# または直接指定:
HAKMEM_BENCH_MIN_SIZE=257
HAKMEM_BENCH_MAX_SIZE=768
HAKMEM_TINY_HEAP_PROFILE=C7_SAFE
@ -78,6 +82,8 @@ HAKMEM_SMALL_HEAP_V3_ENABLED=1
HAKMEM_SMALL_HEAP_V3_CLASSES=0x80 # C7-only v3, C6 v3 は OFF
HAKMEM_POOL_V2_ENABLED=0
HAKMEM_POOL_V1_FLATTEN_ENABLED=0 # flatten は初回 OFF
HAKMEM_MID_V3_ENABLED=1 # Phase MID-V3: 257-768B, C6 only
HAKMEM_MID_V3_CLASSES=0x40 # C6 only (+11% on C6-heavy)
```
- mid_desc_lookup TLS キャッシュを試すときだけ: `HAKMEM_MID_DESC_CACHE_ENABLED=1` を上乗せ(デフォルトは OFF

View File

@ -0,0 +1,311 @@
## SmallObjectHeap v7 / HAKMEM v3 コア設計メモ2025-12-11
このドキュメントは、ULTRA + MID v3 + V6 世代の上に新しく載せる
**SmallObjectHeap v7= HAKMEM v3 small/mid コア)** の設計方針をまとめたものです。
当面は設計・型スケルトンのみで、挙動は一切変更しません。
---
## 1. 位置づけと層構造Box Theory
### 1-1. 既存世代のまとめ
- L0: ULTRA lanes現行
- C4C7 ULTRA。C7 は 2MiB Segment + 64KiB Page + TLS freelistC7 ULTRA Box
- Mixed / C7-only で十分な性能が出ており、**FROZEN完成世代** とみなす。
- L1: HotBox v2 世代
- Tiny front v3 + TinyHeap v1小クラス
- MID v3257768B の mid/smallmid を TLS heap で扱う)。
- V6 C6-only headerless coreRegionId + Segment + TLS laneの研究箱。
- L2: Segment / Superslab / Warm / Remote
- L3: Policy/Learner + Stats + ENVACE/ELO/CAP 等)
この世代では、各帯に特化した箱ULTRA / MID v3 / V6を積み上げることで
Mixed 161024B を ~30M → ~44M ops/s まで底上げしたが、
small〜mid を一体で見る「共通の SmallObject コア」は存在しない。
### 1-2. v7 世代の狙い
v7 は L1 に新しく追加する **SmallObjectHotBox_v7** として設計する:
```text
Front (size→class→route LUT)
|
+-- L0: ULTRA lanes (C4C7, FROZEN)
|
+-- L1: SmallObjectHotBox_v7 ← NEW small/mid コア
|
+-- L1': TinyHeap v1 / MID v3 / V6 (fallback/legacy)
|
+-- L2: SegmentBox_v7 / ColdIface_v7
|
+-- L3: PolicyBox_v7 / RegionIdBox / PageStatsBox
```
目的:
- small例: 16〜1KiB or 16〜2KiBと mid の一部を **1 個の thread-local heap + segment** で扱う土台を作る。
- ULTRA 世代C4C7は L0 としてそのまま残すC7 ULTRA は独立 box
- headerless/v6 の実験で得た「RegionId + Segment + TLS lane + PageStats」の物理層パターンをコア側に反映する。
---
## 2. 型設計SmallHeapCtx_v7 / SmallSegment_v7
v7 の基本構造は v6/V3 の経験を統合したものとする。
### 2-1. SmallPageMeta_v7
Hot path で頻繁に触るフィールドと Stats 用フィールドを分離する。
```c
// Hot line: alloc/free で触るフィールド
typedef struct SmallPageMeta_v7 {
// ---- hot fields (cache line 0 想定) ----
void *free_list; // LIFO freelist: block -> next
uint32_t used; // 現在の使用スロット数
uint32_t capacity; // この page にある block スロット数
uint16_t class_idx; // サイズクラス (C0..C?)
uint16_t flags; // HOT/PARTIAL/FULL/REMOTE_PENDING 等
uint16_t page_idx; // Segment 内 index (0..N-1)
uint16_t reserved0; // アラインメント用
struct SmallSegment_v7 *segment; // Segment への back pointer
// ---- cold fields (Stats/Policy, cache line 1〜) ----
uint64_t alloc_count; // 累積 alloc 数
uint64_t free_count; // 累積 free 数
uint64_t remote_free_count; // 累積 remote free 数
uint16_t live_current; // 現在の live
uint16_t peak_live; // lifetime 最大 live
uint16_t remote_burst_max; // 一度の drain で吸い上げた remote の最大
uint16_t reserved1;
uint32_t epoch_first_alloc; // coarse epoch (L3 用)
uint32_t epoch_last_free; // 同上
} SmallPageMeta_v7;
```
設計ポイント:
- Hot path (alloc/free) では `free_list / used / capacity / class_idx` だけを触る。
- Stats/Learner は L2 retire 時に cold fields を `SmallPageStatsV7` にまとめて L3 に渡す。
- `segment` を持たせて退役時の SegmentBox 更新を簡単にする(必要であれば将来削る)。
### 2-2. SmallClassHeap_v7 / SmallHeapCtx_v7
各クラスの現在/部分/満杯ページと、小さな TLS magazine を持つ。
```c
typedef struct SmallClassHeap_v7 {
SmallPageMeta_v7 *current; // いま alloc に使っている page
SmallPageMeta_v7 *partial_head; // まだ空きのあるページ
SmallPageMeta_v7 *full_head; // FULL 判定のページCold 側に寄せる用)
void *local_freelist; // オプション: mini-ULTRA (class ローカル TLS)
uint16_t local_freelist_count;
uint16_t local_freelist_cap;
uint16_t class_idx;
uint16_t flags; // class 側のポリシーフラグ (ULTRA禁止など)
} SmallClassHeap_v7;
#define HAK_SMALL_NUM_CLASSES_V7 /* 例: 16〜24 */
typedef struct SmallHeapCtx_v7 {
SmallClassHeap_v7 cls[HAK_SMALL_NUM_CLASSES_V7];
} SmallHeapCtx_v7;
```
設計ポイント:
- v7 第1版では `local_freelist` は無効 (`cap=0`) にしておき、必要なクラスだけ Learner で有効化してもよい。
- クラス数は最初は「small側16〜1KiB or 2KiBをカバーする程度」に抑え、
mid を扱う `MidHeapCtx_v7` は別箱とする(後述)。
### 2-3. SmallSegment_v7
ULTRA の 2MiB/64KiB パターンをベースに、small v7 用 SegmentBox を定義する。
```c
#define SMALL_SEGMENT_SIZE_V7 (2u * 1024u * 1024u) // 2MiB
#define SMALL_PAGE_SIZE_V7 (64u * 1024u) // 64KiB
#define SMALL_PAGES_PER_SEG_V7 (SMALL_SEGMENT_SIZE_V7 / SMALL_PAGE_SIZE_V7)
typedef struct SmallSegment_v7 {
uintptr_t base; // 実データ領域の先頭アドレス
uint32_t num_pages; // 実際に使うページ数
uint32_t owner_tid; // 所有スレッド id
uint32_t flags; // SEGMENT_IN_USE / RETIRED 等
uint32_t region_kind; // REGION_SMALL_V7 / REGION_ULTRA / REGION_POOL 等
uint32_t segment_idx; // RegionIdBox 上の index
uint32_t free_page_head; // free page stack head
uint32_t free_page_count;
SmallPageMeta_v7 page_meta[SMALL_PAGES_PER_SEG_V7];
} SmallSegment_v7;
```
設計ポイント:
- `ptr & ~(SEG_SIZE-1)` で Segment に直行し、
`(ptr - base) >> PAGE_SHIFT``page_idx` を求めて `page_meta[page_idx]` に行ける O(1) 構造。
- small/mid/pool で Segment geometry を変えたい場合も、API は共通で持てるSegmentBox_v7 small / mid 用の 2 種類も可)。
---
## 3. RegionIdBox / header / class 判定方針v7 世代)
### 3-1. header の扱い
v6 C6-only headerless 実験から:
- header 完全削除は「Region lookup コスト」で相殺されがちで、劇的な改善には繋がらないケースが多い。
- ただし RegionId + Segment + page_meta.class_idx のパターンは
ptr→segment→page_meta→class を O(1) にする物理層として非常に有用。
v7 では次の方針とする:
1. ヘッダは **薄く残す**Fail-Fastlegacy/pool bridgeデバッグ用
2. small/mid の fast path では、できるだけ header を触らない。
- C7 ULTRA / 一部 hot クラス(将来の C6 ULTRA lane など)は完全 headerless も許可。
- SmallHeapCtx_v7 の core は「carve/refill 時に 1 回だけ書く」程度に抑える。
3. free 時の class 判定は:
- front/gate の hintsize→class / header + RegionIdBox + page_meta.class_idx を併用。
- v7 small pathでは、最終的には `page_meta.class_idx` を真とし、hint は OBSERVE 検証用とする。
### 3-2. RegionIdBox API
small/mid/pool 共通の ptr 分類箱として RegionIdBox_v7 を定義する:
```c
typedef enum {
REGION_UNKNOWN = 0,
REGION_SMALL_V7,
REGION_ULTRA,
REGION_MID_V7,
REGION_POOL_V3,
REGION_LARGE,
} region_kind_t;
typedef struct RegionLookupResult_v7 {
region_kind_t kind;
union {
struct {
SmallSegment_v7 *segment;
uint16_t page_idx;
} small_v7;
struct {
void *segment; // C7 ULTRA / mid v7 / pool v3 等
} other;
} u;
} RegionLookupResult_v7;
static inline RegionLookupResult_v7
region_id_lookup_v7(void *ptr);
```
small v7 free pathfast path:
```c
RegionLookupResult_v7 lk = region_id_lookup_v7(ptr);
if (likely(lk.kind == REGION_SMALL_V7)) {
SmallPageMeta_v7* page =
&lk.u.small_v7.segment->page_meta[lk.u.small_v7.page_idx];
uint8_t class_idx = page->class_idx;
small_heap_free_fast_v7(ctx, page, class_idx, ptr);
} else {
// ULTRA / MID / POOL / LEGACY へ bridge
}
```
移行モード:
- Phase OBSERVE: header-based class と page_meta.class_idx を比較して log/assert。挙動はまだ v2 世代のまま。
- Phase FROZEN: small v7 管理ページでは header を見ず、RegionId + page_meta.class_idx だけで動かす。
---
## 4. mid/pool との関係SmallHeapCtx_v7 vs MidHeapCtx_v7
v7 世代では small と mid を同じ物理層RegionIdBox + SegmentBox + PageStatsBoxに乗せつつ、
HotBox は別箱に分けるのが現実的:
```text
RegionIdBox / SegmentBox_v7 / PageStatsBox
|
+--> SmallHeapCtx_v7 (small: 16〜1KiB or 2KiB)
|
+--> MidHeapCtx_v7 (mid: 2〜16KiB or 2〜32KiB)
|
+--> PoolCtx_v3/v7 (さらに大きい / 特殊用途)
```
方針:
- **共通化するもの**:
- RegionIdBoxptr→region_kind + segment/page_idx
- Segment geometry APIsmall 用と mid 用に派生しても良い)
- PageStats 基本構造class_idx / alloc/free/remote / live/peak など)
- **専用箱にするもの**:
- SmallHeapCtx_v7small 特有の TLS/prefetch/クラス配置)
- MidHeapCtx_v7mid 特有の page サイズ・クラス分割・remote ポリシー)
- PoolCtx_v3/v7巨大オブジェクト特殊用途
橋渡し:
- RegionIdBox で kind != REGION_SMALL_V7 を検出したときのみ、
mid/pool の bridge_box`small_mid_bridge_free()` 等)に渡す。
- small core / mid core / pool core は互いを直接呼ばず、「bridge 1 箇所」で繋ぐ。
---
## 5. フェーズ分割v7-0 / v7-1 / v7-2 の指針)
いきなり small/mid 全体を v7 にするのではなく、C6-only small 帯から段階的に導入する。
### Phase v7-0: 型とインフラだけ追加(挙動一切変更なし)
目的:
- struct と設計 doc だけ追加し、ビルドと Box 理論上の位置づけを固める。
タスク:
- `SmallPageMeta_v7` / `SmallClassHeap_v7` / `SmallHeapCtx_v7` / `SmallSegment_v7` struct をヘッダに追加。
- RegionIdBox に `REGION_SMALL_V7``RegionLookupResult_v7` を追加(実装はまだダミーで OK
- ENV:
- `HAKMEM_SMALL_HEAP_V7_ENABLED=0`
- `HAKMEM_SMALL_HEAP_V7_CLASSES=0x0`
- front/gate は v7 に一切 route しない。
### Phase v7-1: C6-only v7 stubroute だけ v7 に向ける)
目的:
- front/gate・ENV・RegionIdBox の配線が壊れていないか確認する。
タスク:
- `TINY_ROUTE_SMALL_HEAP_V7` を route kind に追加。
- プロファイル: C6-only v7 stub モード(`CLASSES=0x40` など)を追加。
- `small_heap_alloc_fast_v7_stub(size, ci)` / `small_heap_free_fast_v7_stub(ptr, ci)` を実装し、
中身は即座に v2 世代MID v3 / V6 / pool v1にフォールバックするだけにする。
- RegionIdBox は OBSERVE モードで `region_id_lookup_v7(ptr)` を呼んで統計取得のみ(挙動不変)。
### Phase v7-2: C6-only v7 本実装small帯だけ
目的:
- C6-only の alloc/free を SmallHeapCtx_v7 + SmallSegment_v7 で本当に回し、
C6-heavy / Mixed で v3/V6/v2 本線と比較する。
タスク:
- SegmentBox_v7 と ColdIface_v7 を実装し、C6 pages の refill/retire を Segment v7 経由にする。
- `small_heap_alloc_fast_v7(size, ci)` / `small_heap_free_fast_v7(ptr, ci)` を実装:
- alloc: current→partial→cold_refill の順で page/freelist を消費。
- free: RegionIdBox で small_v7 page を特定し、page_meta.free_list に push必要時 retire
- プロファイル:
- C6-only v7 ON他クラスは ULTRA + MID v3 + V6 のまま)。
- ベンチ:
- C6-heavy / Mixed で v7 vs MID v3 vs V6 vs v2 本線を測り、
C6-only v7 の価値を評価(十分なら次の v7 拡張フェーズへ)。
---
## 6. まとめ
- v2 世代ULTRA + MID v3 + V6 C6-onlyは、Box Theory に沿ってかなりやり切った世代とみなし、ここで一度締める。
- v3 世代SmallObjectHeap v7は、「small〜mid を 1 個の SmallHeapCtx + Segment + RegionIdBox で扱う」第2章として設計する。
- まずは C6-only small 帯から v7 を導入し、ULTRA/MID v3 を壊さない形で徐々に適用範囲を広げていく。

View File

@ -0,0 +1,218 @@
# ULTRA+MID v3 Generation Summary (2025-12-12)
## 概要
この世代2025-12-1012-12で、Tiny/ULTRA 層の完成と MID v3 の本線採用により、0-1024B 範囲の性能最適化が完了しました。
## 層別状態まとめ
### 0-256B: Tiny/ULTRA完成・凍結
**状態**: Production (frozen)
**性能**: Mixed 16-1024B = **43.9M ops/s** (baseline 30.6M → +43.5%)
**完成内容**:
- C4-C7 ULTRA: 寄生型 TLS cache で legacy 経路を 49% → 4.8% に削減
- v3 backend: alloc_current_hit=100%, free_retire=0.1% で堅牢に
- Dispatcher/gate snapshot: ENV/route を hot path から排除
- C7 ULTRA refill: division → bit shift で +11%
**設計原則**:
- Small object (C2-C7) = ULTRA 最適化済みfast path/slow path 共に)
- v3 backend = ロジック完全最適化(残り 5% は header write/memcpy 等の内部コスト)
- 研究箱v4/v5は OFF で標準プロファイルに影響なし
**詳細**: `PERF_EXEC_SUMMARY_ULTRA_PHASE_20251211.md`
---
### 257-768B: MID v3本線採用
**状態**: Production (mainline)
**性能**: C6-heavy = +11.1%, Mixed (257-768B) = **+19.8%**
**完成内容**:
- MID-V3-05: 型定義、RegionIdBox 統合、alloc/free 実装
- MID-V3-6: hakmem.c メイン経路統合(箱化モジュール化)
- Role separation: 257-768B 専用C7 は ULTRA に任せる)
- Profile 採用: C6_HEAVY_LEGACY_POOLV1 と MIXED_TINYV3_C7_SAFE でデフォルト ON
**設計原則**:
- Lane = TLS cache, Page = authoritative freelist二重管理回避
- RegionIdBox: ptr→page_meta O(1) lookupTLS cached binary search
- Batch refill: 16 items/batchデフォルト、ENV 調整可能)
**ENV**:
```bash
HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1 # または MIXED_TINYV3_C7_SAFE
# Auto-enables:
# HAKMEM_MID_V3_ENABLED=1
# HAKMEM_MID_V3_CLASSES=0x40 # C6 only
```
**詳細**: `MID_POOL_V3_DESIGN.md`
---
### 769-1024B: C7 ULTRA完成・凍結
**状態**: Production (frozen)
**性能**: Optimized for 1KB allocations (ULTRA 層に統合済み)
**設計原則**:
- MID v3 から意図的に除外C7 は ULTRA が最適)
- v4/v5/v6 研究箱も C7 には適用せず、ULTRA 経路を維持
---
### V6 C6-only Headerless研究箱、V6-HDR-4 完成)
**状態**: Research box (frozen at V6-HDR-4)
**性能**: Cost almost neutral / slight positive (~1-2%)
**完成内容**:
- V6-HDR-03: 型定義、RegionIdBox 統合、alloc/free headerless 実装
- V6-HDR-4: Cold refill/retire、sanity test、構造検証完了
- 設計原則: 4層 Box TheoryL0 ULTRA / L1 TLS / L2 Segment / L3 Policy
**結論**:
- Headerless 設計の実証完了
- コストほぼ相殺〜微プラス1-2% 程度)
- 本線採用せず、研究箱として保持(将来の参考実装)
**詳細**: `SMALL_V6_DESIGN.md`
---
## 役割分担の完成形
```
Size Range | Allocator | Status | Performance
---------------|---------------|---------------------|------------------
0-256B | Tiny/ULTRA | Production (frozen) | +43.5% (Mixed)
257-768B | MID v3 | Production | +19.8% (257-768B)
769-1024B | C7 ULTRA | Production (frozen) | Optimized
1025B-52KB | Pool | Existing path | Stable
52KB-2MB | ACE | Existing path | Stable
2MB+ | Large mmap | Existing path | Stable
```
## 設計原則の統一
### Box Modularization Pattern
全層で統一された箱化設計:
- **Type Box**: 型定義(`*_box.h`
- **ENV Box**: 環境変数ゲート(`*_env_box.h`
- **Implementation**: 実装(`*.c`
- **Cold Iface**: L1/L2 境界インターフェース(`*_cold_iface*.h`
### RegionIdBox Integration
全層で統合された ptr→meta lookup
- Tiny/ULTRA: REGION_KIND_SMALL_V6 / REGION_KIND_C7_ULTRA
- MID v3: REGION_KIND_MID_V3
- v6: REGION_KIND_SMALL_V6headerless
- TLS cached binary search で O(1) lookup
### ENV-Controlled Routing
研究箱は明示 opt-in
- v4/v5: `HAKMEM_SMALL_HEAP_V[4|5]_ENABLED=1` + `HAKMEM_SMALL_HEAP_V[4|5]_CLASSES=0x??`
- v6: `HAKMEM_SMALL_HEAP_V6_ENABLED=1` + `HAKMEM_SMALL_HEAP_V6_CLASSES=0x40`
- MID v3: `HAKMEM_MID_V3_ENABLED=1` + `HAKMEM_MID_V3_CLASSES=0x40`(本線では Profile 経由で自動)
---
## 本線プロファイル構成2025-12-12 現在)
### MIXED_TINYV3_C7_SAFE標準 Mixed 16-1024B
```bash
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE
# Auto-enables:
# - Tiny/ULTRA (C7_SAFE profile)
# - MID v3 (257-768B, C6 only)
# - SmallObject v3 (C7-only backend)
# - Tiny front v3 + LUT + fast classify
# - v4/v5/v6 OFF (研究箱)
```
**期待性能**: 42-44M ops/s (Mixed 16-1024B, 1M iter, ws=400)
### C6_HEAVY_LEGACY_POOLV1C6-heavy 257-768B
```bash
HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1
# Auto-enables:
# - Tiny/ULTRA (C7_SAFE profile)
# - MID v3 (257-768B, C6 only)
# - SmallObject v3 (C7-only backend)
# - Pool v1 (flatten OFF)
# - v4/v5/v6 OFF (研究箱)
```
**期待性能**: 22-23M ops/s (C6-heavy 257-768B, 1M iter, ws=400)
---
## 次世代テーマ候補
### Option A: 小さめテーマ(+数%狙い)
**so_alloc/so_free 枝削り**:
- 現状の v3 backend で残っている条件分岐を削減
- alloc_current_hit=100% だが、内部に header write/check が残存
- 狙い: +1-3% 程度の微改善
**メリット**: 安全、既存設計の洗練
**デメリット**: 大きなジャンプはない
### Option B: 次世代テーマ(大きめ変更)
**MID/Pool v3 拡張**:
- 現在 257-768B (C6 only) を C5 (128B) や C4 (64B) に拡張
- 狙い: 128-256B 範囲の改善(現在 Tiny/ULTRA が最適だが、さらなる実験)
**C2/C3 ULTRA 実験**:
- 16-64B 範囲に ULTRA 適用(現在 legacy 経路が主流)
- 狙い: 小サイズでも ULTRA の恩恵を受ける
**メリット**: 新しい最適化領域の開拓
**デメリット**: 既存の安定領域に影響する可能性
---
## まとめ
### この世代で達成したこと
1. **Tiny/ULTRA 完成**: 0-256B で +43.5% (Mixed)、設計凍結
2. **MID v3 本線採用**: 257-768B で +19.8%、Profile デフォルト ON
3. **C7 ULTRA 凍結**: 769-1024B で最適化完了
4. **v6 研究箱完成**: C6-only headerless 実証V6-HDR-4
### 設計的な完成度
- **役割分担**: 各サイズ範囲に最適化された allocator が明確
- **Box 化**: 全層で統一された箱化設計
- **RegionIdBox**: 全層で統合された ptr→meta lookup
- **ENV 制御**: 研究箱は明示 opt-in、本線は Profile 経由で安定
### この世代の「形」
0-1024B の性能最適化が完了し、役割分担が明確になりました。この構成を「固定」として、次世代テーマは:
- 既存設計の洗練(枝削り)
- 新しい最適化領域の開拓(拡張実験)
のいずれかから選択できます。
---
**作成日**: 2025-12-12
**関連ドキュメント**:
- `PERF_EXEC_SUMMARY_ULTRA_PHASE_20251211.md`
- `MID_POOL_V3_DESIGN.md`
- `SMALL_V6_DESIGN.md`
- `ENV_PROFILE_PRESETS.md`
- `CURRENT_TASK.md`