diff --git a/StgSharp.Common/Mathematics/Linear/MatrixParallel.Publish.cs b/StgSharp.Common/Mathematics/Linear/MatrixParallel.Publish.cs index 258259c6..0338c129 100644 --- a/StgSharp.Common/Mathematics/Linear/MatrixParallel.Publish.cs +++ b/StgSharp.Common/Mathematics/Linear/MatrixParallel.Publish.cs @@ -1,6 +1,6 @@ //----------------------------------------------------------------------- // ----------------------------------------------------------------------- -// file="MatrixParallel.TaskPublic.cs" +// file="MatrixParallel.Publish.cs" // Project: StgSharp // AuthorGroup: Nitload Space // Copyright (c) Nitload Space. All rights reserved. @@ -76,18 +76,9 @@ namespace StgSharp.Mathematics package->ElementSize = sizeof(T); package->ComputeMode = 3; - int - small_4_size = c4 / LargeWrapCount, - large_4_size = small_4_size + 1, - small_3_size = c3 / LargeWrapCount, - large_3_size = small_3_size + 1; - int - large_4_count = c4 % LargeWrapCount, - small_4_count = LargeWrapCount - large_4_count, - large_3_count = c3 % LargeWrapCount, - small_3_count = LargeWrapCount - large_3_count; - - for (int i = 0; i < SmallWraps.Length; i++) { } + int baseCount = columnCount / length, + rem = columnCount % length; + if (baseCount == 0) { } } } diff --git a/StgSharp.Common/Mathematics/Linear/MatrixParallel.cs b/StgSharp.Common/Mathematics/Linear/MatrixParallel.cs index cc0f4d8b..c87e877e 100644 --- a/StgSharp.Common/Mathematics/Linear/MatrixParallel.cs +++ b/StgSharp.Common/Mathematics/Linear/MatrixParallel.cs @@ -56,6 +56,18 @@ namespace StgSharp.Mathematics public static partial class MatrixParallel { + // TODO + /* + * 目前认为应当按照如下方式进行调整: + * 1. 使用Queue进行线程束池化 + * 2. 一次只能有一个线程进行发布活动(一次只能由一个线程持有) + * 3. 发布任务似乎应当分类进行,分类条件为q = n_task / n_thread + * 3.1 q=0时,不是全部任务束可以参与计算 + * 3.2 q>0时,全部任务束可以参与计算 + * 4. 后续分为a个q线程,b个q+1线程,然后分到线程束中,同时不保证束内任务同步 + * 5. 仅可能保证线程间任务数量差异不超过512 + */ + private static Thread[] _threads; private static readonly (int a, int b)[] LookupTable = [ (1, 1), // 7 @@ -142,10 +154,7 @@ namespace StgSharp.Mathematics } } else if (count == 6) { - SmallWraps = [ - new MatrixParallelWrap(0, 3, true), - new MatrixParallelWrap(3, 3, false) - ]; + SmallWraps = [ new MatrixParallelWrap(0, 3, true), new MatrixParallelWrap(3, 3, false) ]; LargeWraps = []; (LargeWrapCount, SmallWrapCount) = (0, 2); LeaderHandle = new MatrixParallelWrap.Handle(0, SmallWraps[0]); @@ -196,10 +205,10 @@ namespace StgSharp.Mathematics public static void SetAllWrap() { ResetThreadCount(); - foreach (MatrixParallelWrap item in SmallWraps) { + foreach (MatrixParallelWrap item in LargeWraps) { item.SchedulerReset.Set(); } - foreach (MatrixParallelWrap item in LargeWraps) { + foreach (MatrixParallelWrap item in SmallWraps) { item.SchedulerReset.Set(); } }