going on big buffer, need three diff task scheduler
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user