Files
hakmem/core/box/tiny_c7_ultra_box.h

39 lines
1.5 KiB
C
Raw Normal View History

Phase PERF-ULTRA-ALLOC-OPT-1 (改訂版): C7 ULTRA 内部最適化 設計判断: - 寄生型 C7 ULTRA_FREE_BOX を削除(設計的に不整合) - C7 ULTRA は C4/C5/C6 と異なり専用 segment + TLS を持つ独立サブシステム - tiny_c7_ultra.c 内部で直接最適化する方針に統一 実装内容: 1. 寄生型パスの削除 - core/box/tiny_c7_ultra_free_box.{h,c} 削除 - core/box/tiny_c7_ultra_free_env_box.h 削除 - Makefile から tiny_c7_ultra_free_box.o 削除 - malloc_tiny_fast.h を元の tiny_c7_ultra_alloc/free 呼び出しに戻す 2. TLS 構造の最適化 (tiny_c7_ultra_box.h) - count を struct 先頭に移動(L1 cache locality 向上) - 配列ベース TLS キャッシュに変更(cap=128, C6 同等) - freelist: linked-list → BASE pointer 配列 - cold フィールド(seg_base/seg_end/meta)を後方配置 3. alloc の純 TLS pop 化 (tiny_c7_ultra.c) - hot path: 1 分岐のみ(count > 0) - TLS access は 1 回のみ(ctx に cache) - ENV check を呼び出し側に移動 - segment/page_meta アクセスは refill 時(cold path)のみ 4. free の UF-3 segment learning 維持 - 最初の free で segment 学習(seg_base/seg_end を TLS に記憶) - 以降は範囲チェック → TLS push - 範囲外は v3 free にフォールバック 実測値 (Mixed 16-1024B, 1M iter, ws=400): - tiny_c7_ultra_alloc self%: 7.66% (維持 - 既に最適化済み) - tiny_c7_ultra_free self%: 3.50% - Throughput: 43.5M ops/s 評価: 部分達成 - 設計一貫性の回復: 成功 - Array-based TLS cache 移行: 成功 - pure TLS pop パターン統一: 成功 - perf self% 削減(7.66% → 5-6%): 未達成(既に最適) C7 ULTRA は独立サブシステムとして tiny_c7_ultra.c に閉じる設計を維持。 次は refill path 最適化または C4-C7 ULTRA free 群の軽量化へ。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 20:39:46 +09:00
// tiny_c7_ultra_box.h - C7 ULTRA TLS box (Phase PERF-ULTRA-ALLOC-OPT-1: Array-based TLS cache)
#pragma once
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include "tiny_c7_ultra_segment_box.h"
Phase PERF-ULTRA-ALLOC-OPT-1 (改訂版): C7 ULTRA 内部最適化 設計判断: - 寄生型 C7 ULTRA_FREE_BOX を削除(設計的に不整合) - C7 ULTRA は C4/C5/C6 と異なり専用 segment + TLS を持つ独立サブシステム - tiny_c7_ultra.c 内部で直接最適化する方針に統一 実装内容: 1. 寄生型パスの削除 - core/box/tiny_c7_ultra_free_box.{h,c} 削除 - core/box/tiny_c7_ultra_free_env_box.h 削除 - Makefile から tiny_c7_ultra_free_box.o 削除 - malloc_tiny_fast.h を元の tiny_c7_ultra_alloc/free 呼び出しに戻す 2. TLS 構造の最適化 (tiny_c7_ultra_box.h) - count を struct 先頭に移動(L1 cache locality 向上) - 配列ベース TLS キャッシュに変更(cap=128, C6 同等) - freelist: linked-list → BASE pointer 配列 - cold フィールド(seg_base/seg_end/meta)を後方配置 3. alloc の純 TLS pop 化 (tiny_c7_ultra.c) - hot path: 1 分岐のみ(count > 0) - TLS access は 1 回のみ(ctx に cache) - ENV check を呼び出し側に移動 - segment/page_meta アクセスは refill 時(cold path)のみ 4. free の UF-3 segment learning 維持 - 最初の free で segment 学習(seg_base/seg_end を TLS に記憶) - 以降は範囲チェック → TLS push - 範囲外は v3 free にフォールバック 実測値 (Mixed 16-1024B, 1M iter, ws=400): - tiny_c7_ultra_alloc self%: 7.66% (維持 - 既に最適化済み) - tiny_c7_ultra_free self%: 3.50% - Throughput: 43.5M ops/s 評価: 部分達成 - 設計一貫性の回復: 成功 - Array-based TLS cache 移行: 成功 - pure TLS pop パターン統一: 成功 - perf self% 削減(7.66% → 5-6%): 未達成(既に最適) C7 ULTRA は独立サブシステムとして tiny_c7_ultra.c に閉じる設計を維持。 次は refill path 最適化または C4-C7 ULTRA free 群の軽量化へ。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 20:39:46 +09:00
// TLS cache capacity (optimized for C7: 128 slots)
#define TINY_C7_ULTRA_CAP 128
// Hot box: per-thread TLS context (Phase PERF-ULTRA-ALLOC-OPT-1: optimized layout)
// Hot fields first for L1 cache locality
typedef struct tiny_c7_ultra_tls_t {
Phase PERF-ULTRA-ALLOC-OPT-1 (改訂版): C7 ULTRA 内部最適化 設計判断: - 寄生型 C7 ULTRA_FREE_BOX を削除(設計的に不整合) - C7 ULTRA は C4/C5/C6 と異なり専用 segment + TLS を持つ独立サブシステム - tiny_c7_ultra.c 内部で直接最適化する方針に統一 実装内容: 1. 寄生型パスの削除 - core/box/tiny_c7_ultra_free_box.{h,c} 削除 - core/box/tiny_c7_ultra_free_env_box.h 削除 - Makefile から tiny_c7_ultra_free_box.o 削除 - malloc_tiny_fast.h を元の tiny_c7_ultra_alloc/free 呼び出しに戻す 2. TLS 構造の最適化 (tiny_c7_ultra_box.h) - count を struct 先頭に移動(L1 cache locality 向上) - 配列ベース TLS キャッシュに変更(cap=128, C6 同等) - freelist: linked-list → BASE pointer 配列 - cold フィールド(seg_base/seg_end/meta)を後方配置 3. alloc の純 TLS pop 化 (tiny_c7_ultra.c) - hot path: 1 分岐のみ(count > 0) - TLS access は 1 回のみ(ctx に cache) - ENV check を呼び出し側に移動 - segment/page_meta アクセスは refill 時(cold path)のみ 4. free の UF-3 segment learning 維持 - 最初の free で segment 学習(seg_base/seg_end を TLS に記憶) - 以降は範囲チェック → TLS push - 範囲外は v3 free にフォールバック 実測値 (Mixed 16-1024B, 1M iter, ws=400): - tiny_c7_ultra_alloc self%: 7.66% (維持 - 既に最適化済み) - tiny_c7_ultra_free self%: 3.50% - Throughput: 43.5M ops/s 評価: 部分達成 - 設計一貫性の回復: 成功 - Array-based TLS cache 移行: 成功 - pure TLS pop パターン統一: 成功 - perf self% 削減(7.66% → 5-6%): 未達成(既に最適) C7 ULTRA は独立サブシステムとして tiny_c7_ultra.c に閉じる設計を維持。 次は refill path 最適化または C4-C7 ULTRA free 群の軽量化へ。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 20:39:46 +09:00
uint16_t count; // Hot: alloc/free both access every time (FIRST field)
uint16_t _pad;
void* freelist[TINY_C7_ULTRA_CAP]; // Array of BASE pointers (hot path)
// Cold fields: used only during refill/segment learning
uintptr_t seg_base; // Segment base for range check
uintptr_t seg_end; // Segment end for range check
tiny_c7_ultra_segment_t* seg; // Owning segment
void* page_base; // Current page base
size_t block_size; // C7 block size
uint32_t page_idx; // Segment page index
tiny_c7_ultra_page_meta_t* page_meta; // Current page meta
bool headers_initialized; // Carved headers valid?
} tiny_c7_ultra_tls_t;
// TLS accessor
tiny_c7_ultra_tls_t* tiny_c7_ultra_tls_get(void);
Phase PERF-ULTRA-ALLOC-OPT-1 (改訂版): C7 ULTRA 内部最適化 設計判断: - 寄生型 C7 ULTRA_FREE_BOX を削除(設計的に不整合) - C7 ULTRA は C4/C5/C6 と異なり専用 segment + TLS を持つ独立サブシステム - tiny_c7_ultra.c 内部で直接最適化する方針に統一 実装内容: 1. 寄生型パスの削除 - core/box/tiny_c7_ultra_free_box.{h,c} 削除 - core/box/tiny_c7_ultra_free_env_box.h 削除 - Makefile から tiny_c7_ultra_free_box.o 削除 - malloc_tiny_fast.h を元の tiny_c7_ultra_alloc/free 呼び出しに戻す 2. TLS 構造の最適化 (tiny_c7_ultra_box.h) - count を struct 先頭に移動(L1 cache locality 向上) - 配列ベース TLS キャッシュに変更(cap=128, C6 同等) - freelist: linked-list → BASE pointer 配列 - cold フィールド(seg_base/seg_end/meta)を後方配置 3. alloc の純 TLS pop 化 (tiny_c7_ultra.c) - hot path: 1 分岐のみ(count > 0) - TLS access は 1 回のみ(ctx に cache) - ENV check を呼び出し側に移動 - segment/page_meta アクセスは refill 時(cold path)のみ 4. free の UF-3 segment learning 維持 - 最初の free で segment 学習(seg_base/seg_end を TLS に記憶) - 以降は範囲チェック → TLS push - 範囲外は v3 free にフォールバック 実測値 (Mixed 16-1024B, 1M iter, ws=400): - tiny_c7_ultra_alloc self%: 7.66% (維持 - 既に最適化済み) - tiny_c7_ultra_free self%: 3.50% - Throughput: 43.5M ops/s 評価: 部分達成 - 設計一貫性の回復: 成功 - Array-based TLS cache 移行: 成功 - pure TLS pop パターン統一: 成功 - perf self% 削減(7.66% → 5-6%): 未達成(既に最適) C7 ULTRA は独立サブシステムとして tiny_c7_ultra.c に閉じる設計を維持。 次は refill path 最適化または C4-C7 ULTRA free 群の軽量化へ。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 20:39:46 +09:00
// Phase PERF-ULTRA-ALLOC-OPT-1: Optimized alloc/free entry points
void* tiny_c7_ultra_alloc(size_t size);
void tiny_c7_ultra_free(void* ptr);
Phase PERF-ULTRA-ALLOC-OPT-1 (改訂版): C7 ULTRA 内部最適化 設計判断: - 寄生型 C7 ULTRA_FREE_BOX を削除(設計的に不整合) - C7 ULTRA は C4/C5/C6 と異なり専用 segment + TLS を持つ独立サブシステム - tiny_c7_ultra.c 内部で直接最適化する方針に統一 実装内容: 1. 寄生型パスの削除 - core/box/tiny_c7_ultra_free_box.{h,c} 削除 - core/box/tiny_c7_ultra_free_env_box.h 削除 - Makefile から tiny_c7_ultra_free_box.o 削除 - malloc_tiny_fast.h を元の tiny_c7_ultra_alloc/free 呼び出しに戻す 2. TLS 構造の最適化 (tiny_c7_ultra_box.h) - count を struct 先頭に移動(L1 cache locality 向上) - 配列ベース TLS キャッシュに変更(cap=128, C6 同等) - freelist: linked-list → BASE pointer 配列 - cold フィールド(seg_base/seg_end/meta)を後方配置 3. alloc の純 TLS pop 化 (tiny_c7_ultra.c) - hot path: 1 分岐のみ(count > 0) - TLS access は 1 回のみ(ctx に cache) - ENV check を呼び出し側に移動 - segment/page_meta アクセスは refill 時(cold path)のみ 4. free の UF-3 segment learning 維持 - 最初の free で segment 学習(seg_base/seg_end を TLS に記憶) - 以降は範囲チェック → TLS push - 範囲外は v3 free にフォールバック 実測値 (Mixed 16-1024B, 1M iter, ws=400): - tiny_c7_ultra_alloc self%: 7.66% (維持 - 既に最適化済み) - tiny_c7_ultra_free self%: 3.50% - Throughput: 43.5M ops/s 評価: 部分達成 - 設計一貫性の回復: 成功 - Array-based TLS cache 移行: 成功 - pure TLS pop パターン統一: 成功 - perf self% 削減(7.66% → 5-6%): 未達成(既に最適) C7 ULTRA は独立サブシステムとして tiny_c7_ultra.c に閉じる設計を維持。 次は refill path 最適化または C4-C7 ULTRA free 群の軽量化へ。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 20:39:46 +09:00
// Internal refill function (cold path)
bool tiny_c7_ultra_refill(tiny_c7_ultra_tls_t* tls);