diff --git a/.gitignore b/.gitignore
index d9b1e04c..79e5791f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,18 +4,11 @@
/.idea
/.vs
/.vscode
-/StgSharp.Common/obj
-/StgSharp.Common/bin
-/StgSharp.Model/obj
-/StgSharp.Model/bin
-/StgSharp.Script/obj
-/StgSharp.Script/bin
-/StgSharp.TerminalDialogue/obj
-/StgSharp.TerminalDialogue/build
-/StgSharpDebug/obj
-/StgSharpDebug/bin
-/STgSharpTest/obj
-/STgSharpTest/bin
+*/obj
+*/bin
+*/build
+*/Debug
+*/Release
/TestResults
-/StgSharp.Native/x64
-/StgSharp.Native/x64
+*/x64
+*/.vs
diff --git a/StgSharp.Common/.nuspec b/StgSharp.Common/.nuspec
deleted file mode 100644
index fbb445e9..00000000
--- a/StgSharp.Common/.nuspec
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- StgSharp
- 1.0.0
- Nitload
- Nitload
- false
-
-
-
-
-
-
-
-
-
diff --git a/StgSharp.Common/.vs/ProjectEvaluation/stgsharp.metadata.v9.bin b/StgSharp.Common/.vs/ProjectEvaluation/stgsharp.metadata.v9.bin
deleted file mode 100644
index a6c8b397..00000000
Binary files a/StgSharp.Common/.vs/ProjectEvaluation/stgsharp.metadata.v9.bin and /dev/null differ
diff --git a/StgSharp.Common/.vs/ProjectEvaluation/stgsharp.projects.v9.bin b/StgSharp.Common/.vs/ProjectEvaluation/stgsharp.projects.v9.bin
deleted file mode 100644
index aa31d652..00000000
Binary files a/StgSharp.Common/.vs/ProjectEvaluation/stgsharp.projects.v9.bin and /dev/null differ
diff --git a/StgSharp.Common/.vs/ProjectEvaluation/stgsharp.strings.v9.bin b/StgSharp.Common/.vs/ProjectEvaluation/stgsharp.strings.v9.bin
deleted file mode 100644
index 3d6ca935..00000000
Binary files a/StgSharp.Common/.vs/ProjectEvaluation/stgsharp.strings.v9.bin and /dev/null differ
diff --git a/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/CodeChunks.db b/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/CodeChunks.db
deleted file mode 100644
index c1bb6030..00000000
Binary files a/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/CodeChunks.db and /dev/null differ
diff --git a/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/SemanticSymbols.db b/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/SemanticSymbols.db
deleted file mode 100644
index e5d4c7bd..00000000
Binary files a/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/SemanticSymbols.db and /dev/null differ
diff --git a/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/SemanticSymbols.db-shm b/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/SemanticSymbols.db-shm
deleted file mode 100644
index be0ea137..00000000
Binary files a/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/SemanticSymbols.db-shm and /dev/null differ
diff --git a/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/SemanticSymbols.db-wal b/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/SemanticSymbols.db-wal
deleted file mode 100644
index fabd6f58..00000000
Binary files a/StgSharp.Common/.vs/StgSharp/CopilotIndices/0.2.1634.3922/SemanticSymbols.db-wal and /dev/null differ
diff --git a/StgSharp.Common/.vs/StgSharp/DesignTimeBuild/.dtbcache.v2 b/StgSharp.Common/.vs/StgSharp/DesignTimeBuild/.dtbcache.v2
deleted file mode 100644
index 584637d9..00000000
Binary files a/StgSharp.Common/.vs/StgSharp/DesignTimeBuild/.dtbcache.v2 and /dev/null differ
diff --git a/StgSharp.Common/.vs/StgSharp/FileContentIndex/92be5d18-8537-44c7-935e-adcc6dd8469c.vsidx b/StgSharp.Common/.vs/StgSharp/FileContentIndex/92be5d18-8537-44c7-935e-adcc6dd8469c.vsidx
deleted file mode 100644
index 2a8d9877..00000000
Binary files a/StgSharp.Common/.vs/StgSharp/FileContentIndex/92be5d18-8537-44c7-935e-adcc6dd8469c.vsidx and /dev/null differ
diff --git a/StgSharp.Common/.vs/StgSharp/v17/.futdcache.v2 b/StgSharp.Common/.vs/StgSharp/v17/.futdcache.v2
deleted file mode 100644
index 86aed3d4..00000000
Binary files a/StgSharp.Common/.vs/StgSharp/v17/.futdcache.v2 and /dev/null differ
diff --git a/StgSharp.Common/.vs/StgSharp/v17/.suo b/StgSharp.Common/.vs/StgSharp/v17/.suo
deleted file mode 100644
index 016d83df..00000000
Binary files a/StgSharp.Common/.vs/StgSharp/v17/.suo and /dev/null differ
diff --git a/StgSharp.Common/.vs/StgSharp/v17/DocumentLayout.backup.json b/StgSharp.Common/.vs/StgSharp/v17/DocumentLayout.backup.json
deleted file mode 100644
index 9d96a1d9..00000000
--- a/StgSharp.Common/.vs/StgSharp/v17/DocumentLayout.backup.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "Version": 1,
- "WorkspaceRootPath": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u5185\u6838\u6E90\u4EE3\u7801\\StgSharp\\",
- "Documents": [],
- "DocumentGroupContainers": [
- {
- "Orientation": 0,
- "VerticalTabListWidth": 256,
- "DocumentGroups": []
- }
- ]
-}
\ No newline at end of file
diff --git a/StgSharp.Common/.vs/StgSharp/v17/DocumentLayout.json b/StgSharp.Common/.vs/StgSharp/v17/DocumentLayout.json
deleted file mode 100644
index 9d96a1d9..00000000
--- a/StgSharp.Common/.vs/StgSharp/v17/DocumentLayout.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "Version": 1,
- "WorkspaceRootPath": "D:\\NitloadIndustry\\\u7814\u7A76\u9879\u76EE\\1-Flagship\\TH2020\\ProjectFile\\\u5185\u6838\u6E90\u4EE3\u7801\\StgSharp\\",
- "Documents": [],
- "DocumentGroupContainers": [
- {
- "Orientation": 0,
- "VerticalTabListWidth": 256,
- "DocumentGroups": []
- }
- ]
-}
\ No newline at end of file
diff --git a/StgSharp.Common/Environment/Platform.cs b/StgSharp.Common/Environment/Platform.cs
index 31a7301f..75635e8f 100644
--- a/StgSharp.Common/Environment/Platform.cs
+++ b/StgSharp.Common/Environment/Platform.cs
@@ -28,6 +28,7 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
+using StgSharp.Mathematics;
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
@@ -87,6 +88,7 @@ namespace StgSharp
}
InternalIO.InitIntrinsicContext();
+ MatrixParallel.Init();
}
public static void LogError(Exception ex)
diff --git a/StgSharp.Common/Mathematics/Linear/Matrix.cs b/StgSharp.Common/Mathematics/Linear/Matrix.cs
index f9a40e07..996b83d7 100644
--- a/StgSharp.Common/Mathematics/Linear/Matrix.cs
+++ b/StgSharp.Common/Mathematics/Linear/Matrix.cs
@@ -154,7 +154,7 @@ namespace StgSharp.Mathematics
private readonly int _secondaryStride = enumeration._secondaryStride;
private readonly int _stride = enumeration._stride;
- public readonly Segment Current
+ public readonly MatrixSegment Current
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => new(_current, _secondarySize, _secondaryStride);
@@ -170,7 +170,7 @@ namespace StgSharp.Mathematics
}
- public readonly unsafe ref struct Segment(MatrixKernel* source, int size, int stride)
+ public readonly unsafe ref struct MatrixSegment(MatrixKernel* source, int size, int stride)
{
private readonly MatrixKernel* _source = source;
diff --git a/StgSharp.Common/Mathematics/Linear/MatrixParallel.TaskWrapFactory.cs b/StgSharp.Common/Mathematics/Linear/MatrixParallel.TaskWrapFactory.cs
index 84922aaa..71d5fb04 100644
--- a/StgSharp.Common/Mathematics/Linear/MatrixParallel.TaskWrapFactory.cs
+++ b/StgSharp.Common/Mathematics/Linear/MatrixParallel.TaskWrapFactory.cs
@@ -50,16 +50,6 @@ namespace StgSharp.Mathematics
return p;
}
- public static MatrixParallelTaskPackage* FromTaskWrap(MatrixParallelTaskPackage* source, int offset)
- {
- MatrixParallelTaskPackage* p = (MatrixParallelTaskPackage*)_wrapAllocator.Allocate();
- *p = *source;
- p->left += offset * p->leftStride;
- p->right += offset * p->rightStride;
- p->result += offset * p->resultStride;
- return p;
- }
-
public static void Release(ScalarPacket* source)
{
_scalarAllocator.Free((nuint)source);
@@ -67,35 +57,11 @@ namespace StgSharp.Mathematics
public static void Release(MatrixParallelTaskPackage* source)
{
- if (source->scalerPacket != null) {
- _scalarAllocator.Free((nuint)source->scalerPacket);
+ if (source->Scalar != null) {
+ _scalarAllocator.Free((nuint)source->Scalar);
}
_wrapAllocator.Free((nuint)source);
}
- public static void SliceTask(MatrixParallelTaskPackage* source, Span group)
- {
- int count = group.Length;
- group[0] = (nint)source;
- int l = source->leftStride, r = source->rightStride, res = source->resultStride, c = source->count / count;
- source->leftStride *= count;
- source->rightStride *= count;
- source->resultStride *= count;
- int remain = source->count - (c * count);
- for (int i = 1; i < count; i++)
- {
- nint handle = (nint)_wrapAllocator.Allocate();
- MatrixParallelTaskPackage* p = (MatrixParallelTaskPackage*)handle;
- *p = *source;
- p->left += l;
- p->right += r;
- p->result += res;
- group[i] = handle;
- }
- for (int i = 0; i < remain; i++) {
- ((MatrixParallelTaskPackage*)group[^i])->count++;
- }
- }
-
}
}
\ No newline at end of file
diff --git a/StgSharp.Common/Mathematics/Linear/MatrixParallel.cs b/StgSharp.Common/Mathematics/Linear/MatrixParallel.cs
index 71590d62..240cc976 100644
--- a/StgSharp.Common/Mathematics/Linear/MatrixParallel.cs
+++ b/StgSharp.Common/Mathematics/Linear/MatrixParallel.cs
@@ -107,9 +107,26 @@ namespace StgSharp.Mathematics
{
int count = Environment.ProcessorCount - 4;
count = count == 5 ? 4 : count;
- int _3wrap = 0, _4wrap = 0;
_threads = new Thread[count];
- if (count < 6) { } else if (count == 6) { } else { }
+ if (count < 6)
+ {
+ _wraps = [new MatrixParallelWrap(0, count, true)];
+ } else if (count == 6)
+ {
+ _wraps = [new MatrixParallelWrap(0, 3, true),
+ new MatrixParallelWrap(3, 3, false)];
+ } else
+ {
+ (int _3wrap, int _4wrap) = FastDecompose(count);
+ _wraps = new MatrixParallelWrap[_3wrap + _4wrap];
+ int id = 0, idx = 0;
+ for (; idx < _3wrap; idx++, id += 3) {
+ _wraps[idx] = new MatrixParallelWrap(idx, 3, id == 0);
+ }
+ for (; idx < _3wrap + _4wrap; idx++, id += 4) {
+ _wraps[idx] = new MatrixParallelWrap(id, 4, id == 0);
+ }
+ }
LeaderHandle = new MatrixParallelWrap.Handle(0, _wraps[0]);
}
diff --git a/StgSharpDebug/Program.cs b/StgSharpDebug/Program.cs
index 4f561b53..0de8f8bf 100644
--- a/StgSharpDebug/Program.cs
+++ b/StgSharpDebug/Program.cs
@@ -66,7 +66,7 @@ namespace StgSharp
Matrix m = Matrix.FromHlsf(400, 200, hlsf);
int i = 0, ii = 0;
- foreach (Matrix.Segment lines in m.GetRowEnumeration())
+ foreach (MatrixSegment lines in m.GetRowEnumeration())
{
i = 0;
foreach (MatrixKernel* item in lines)