diff --git a/StgSharp.Common/Global.cs b/StgSharp.Common/Global.cs
index 18714acc..9c5eb6f3 100644
--- a/StgSharp.Common/Global.cs
+++ b/StgSharp.Common/Global.cs
@@ -2,8 +2,8 @@
// -----------------------------------------------------------------------
// file="Global"
// Project: StgSharp
-// AuthorGroup: Nitload
-// Copyright (c) Nitload. All rights reserved.
+// AuthorGroup: Nitload Space
+// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@@ -26,10 +26,10 @@
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
global using StgSharp.Internal;
-global
-using System.Diagnostics.CodeAnalysis;
-using System.Runtime.CompilerServices;
+global using System;
+global using System.Runtime.CompilerServices;
+global using System.Threading;
[assembly: InternalsVisibleTo("StgSharp.Mathematics")]
[assembly: InternalsVisibleTo("StgSharp.RegularAnalysis")]
diff --git a/StgSharp.Common/HighPerformance/Memory/L4.CommandQueue.cs b/StgSharp.Common/HighPerformance/Memory/L4.CommandQueue.cs
new file mode 100644
index 00000000..060caca0
--- /dev/null
+++ b/StgSharp.Common/HighPerformance/Memory/L4.CommandQueue.cs
@@ -0,0 +1,102 @@
+//-----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+// file="L4.CommandQueue"
+// Project: StgSharp
+// AuthorGroup: Nitload Space
+// Copyright (c) Nitload Space. All rights reserved.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography.X509Certificates;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StgSharp.HighPerformance.Memory
+{
+ public unsafe partial class L4
+ {
+
+ private CommandQueue _commandQueue;
+
+ private struct CommandQueue
+ {
+
+ private CommandCache* ReadCache;
+
+ private int _curRead;
+ private int _curWrite;
+
+ ///
+ /// Try get a next command to execute
+ ///
+ ///
+ /// pointer to next command
+ ///
+ ///
+ /// True if there is a command to execute, otherwise false
+ ///
+ public bool TryDequeue(out nint command)
+ {
+ if (_curRead >= 64)
+ {
+ // next cache
+ CommandCache* next = ReadCache->Next;
+ }
+
+ // current cache
+ command = default;
+ return true;
+ }
+
+ }
+
+ private struct CommandCache
+ {
+
+ public CommandCache* Next;
+
+ public CommandCache* Prev;
+ public CommandArray Commands;
+
+ }
+
+ [InlineArray(64)]
+ private struct CommandArray
+ {
+
+ public Command Command0;
+
+ }
+
+ private struct Command
+ {
+
+ public int CommandType;
+ public nint Destination;
+ public nint Source;
+
+ }
+
+ }
+}
diff --git a/StgSharp.Common/HighPerformance/Memory/L4.EvictionRing.cs b/StgSharp.Common/HighPerformance/Memory/L4.EvictionRing.cs
new file mode 100644
index 00000000..9cacfacf
--- /dev/null
+++ b/StgSharp.Common/HighPerformance/Memory/L4.EvictionRing.cs
@@ -0,0 +1,83 @@
+//-----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+// file="L4.EvictionRing"
+// Project: StgSharp
+// AuthorGroup: Nitload Space
+// Copyright (c) Nitload Space. All rights reserved.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StgSharp.HighPerformance.Memory
+{
+ public partial class L4
+ {
+
+ private EvictionRing _ring ;
+
+ private unsafe class EvictionRing
+ {
+
+ private nint[] _bucket;
+
+ public void AddNode(EvictionRingNode* node)
+ {
+ nint address = node->_address;
+ int hash = (int)(address % (nint)_bucket.Length);
+ nint head = _bucket[hash];
+ if (head != 0)
+ {
+ EvictionRingNode* headNode = (EvictionRingNode*)head;
+ headNode->_prev = node;
+ node->_next = headNode;
+ }
+ _bucket[hash] = address;
+ }
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ private unsafe struct EvictionRingNode
+ {
+
+ public EvictionRingNode* _next;
+ public EvictionRingNode* _prev;
+ public int _level;
+ public int _refCount;
+ public nint _address;
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public void IncrementRefCount()
+ {
+ _ = Interlocked.Increment(ref _refCount);
+ }
+
+ }
+
+ }
+}
diff --git a/StgSharp.Common/HighPerformance/Memory/L4.cs b/StgSharp.Common/HighPerformance/Memory/L4.cs
index 7d951ea9..8b093fe7 100644
--- a/StgSharp.Common/HighPerformance/Memory/L4.cs
+++ b/StgSharp.Common/HighPerformance/Memory/L4.cs
@@ -26,6 +26,7 @@
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Collections;
+using StgSharp.Mathematics.Memory;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -34,25 +35,21 @@ using System.Threading.Tasks;
namespace StgSharp.HighPerformance.Memory
{
- public unsafe class L4
+ public unsafe partial class L4
{
private readonly byte* _buffer;
private readonly SwissTable _map;
- public nint MapMemory(nint address)
+ private SlabAllocator EntryAllocator { get; set; }
+
+ private SlabAllocator CacheLineAllocator { get; set; }
+
+ public struct CacheLine
{
- if (_map.TryGet(address, out nint ptr))
- {
- return ptr;
- } else
- {
- /*
- * register a request for memory mapping,
- * and return a pointer to the mapped memory.
- */
- return 0;
- }
+
+ public fixed byte Data[64];
+
}
}
diff --git a/StgSharp.Common/HighPerformance/Memory/L4_design.md b/StgSharp.Common/HighPerformance/Memory/L4_design.md
index 9464b8ee..527afbc2 100644
--- a/StgSharp.Common/HighPerformance/Memory/L4_design.md
+++ b/StgSharp.Common/HighPerformance/Memory/L4_design.md
@@ -26,7 +26,7 @@ L4 缓存器是一个纯软件实现的**线程本地数据缓存层**,
### 1.3 设计目标
- 为逐线程矩阵计算上下文提供 NUMA 友好的本地数据访问
-- 固定容量(5-10 MB),不做运行时扩容,确定性延迟
+- 固定容量(64 MB),不做运行时扩容,确定性延迟
- 透明的指针重定向:上层代码通过原始指针查找,L4 返回本地缓存指针
- 基于热度的缓存逐出策略,保留高频访问数据
@@ -76,7 +76,7 @@ L4 缓存器是一个纯软件实现的**线程本地数据缓存层**,
| 参数 | 值 | 说明 |
|-------------------|-----------------------|-----------------------------------|
-| 缓存区总容量 | 5-10 MB | 线程本地连续内存 |
+| 缓存区总容量 | 64 MB | 线程本地连续内存 |
| 缓存行大小 | 8192 Bytes | = 64 个 `double MAT_KERNEL` 的大小 |
| 映射表类型 | Swiss Table | 65536 桶 × 16 槽,SIMD 加速 |
| 缓存行存储池 | Slab Allocator | 非并发、固定容量、不自动扩容 |