going on big buffer, need three diff task scheduler

This commit is contained in:
Youmu Liu
2025-11-17 16:12:50 +08:00
parent a8c522ab23
commit 8fa1a9749e
20 changed files with 88 additions and 23583 deletions
@@ -32,6 +32,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
@@ -40,8 +41,16 @@ namespace StgSharp.Mathematics.Numeric
public static partial class MatrixParallel
{
private static unsafe MatrixParallelHandle PublicTaskPrivate<T>(MatrixParallelTaskPackage<T>* package)
where T : unmanaged, INumber<T>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static unsafe MatrixParallelHandle ScheduleTask<T>(MatrixParallelTaskPackage<T>* package)
where T : unmanaged
{
MatrixParallelTaskPackageNonGeneric* nonGeneric = (MatrixParallelTaskPackageNonGeneric*)package;
return ScheduleTask(nonGeneric);
}
internal static unsafe MatrixParallelHandle ScheduleTask(MatrixParallelTaskPackageNonGeneric* package)
{
int primCount = package->PrimCount;
int secCount = package->SecCount;
@@ -59,7 +68,7 @@ namespace StgSharp.Mathematics.Numeric
MatrixParallelHandle handle = new MatrixParallelHandle(pool);
if (handle.Wraps.Count() == 1)
{
handle.Wraps.First().WrapTask = (MatrixParallelTaskPackageNonGeneric*)package;
handle.Wraps.First().WrapTask = package;
return handle;
}
int threadCount = pool.Length;
@@ -70,7 +79,7 @@ namespace StgSharp.Mathematics.Numeric
int total = primCount;
Stack<MatrixParallelWrap> taskBunch = new Stack<MatrixParallelWrap>(threadCount);
MatrixParallelTaskPackage<T>* current = package;
MatrixParallelTaskPackageNonGeneric* current = package;
foreach (MatrixParallelWrap wrap in handle.Wraps)
{
bool hasSlice = columnAfterBaseTile > 0;
@@ -103,7 +112,7 @@ namespace StgSharp.Mathematics.Numeric
total -= columnInWrap;
// set to wrap and push
wrap.WrapTask = (MatrixParallelTaskPackageNonGeneric*)current;
wrap.WrapTask = current;
if (total <= 0)
{