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)