matrix parallel start to use two different policy
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
// -----------------------------------------------------------------------
|
||||
// file="MatrixCompute"
|
||||
// Project: StgSharp
|
||||
// AuthorGroup: Nitload Space
|
||||
// Copyright (c) Nitload Space. All rights reserved.
|
||||
// AuthorGroup: Nitload
|
||||
// Copyright (c) Nitload. All rights reserved.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -28,6 +28,7 @@
|
||||
using StgSharp.HighPerformance.Memory;
|
||||
using StgSharp.Internal;
|
||||
using StgSharp.Mathematics;
|
||||
using StgSharp.Mathematics.Numeric.Runtime;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -36,9 +37,11 @@ using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using unsafe MkProc = delegate* unmanaged[Cdecl]<StgSharp.Mathematics.Numeric.Runtime.MatrixParallelTask*, void>;
|
||||
|
||||
namespace StgSharp.Mathematics.Numeric
|
||||
{
|
||||
public static partial class MatrixCompute
|
||||
public static unsafe partial class MatrixCompute
|
||||
{
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
@@ -49,7 +52,28 @@ namespace StgSharp.Mathematics.Numeric
|
||||
int y
|
||||
) where T : unmanaged, INumber<T>
|
||||
{
|
||||
return (MatrixKernel*)(buffer + (colLength * x + y));
|
||||
return (MatrixKernel*)(buffer + ((colLength * x) + y));
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
private static void SequentialOperation(
|
||||
MatrixParallelTask* task,
|
||||
long count
|
||||
)
|
||||
{
|
||||
MatrixElementType elementType = task->ElementType;
|
||||
MatrixParallelThread[] pool;
|
||||
MkProc op = (MkProc)NumericalModule.GlobalContext.
|
||||
mat_mk[elementType.IntrinsicNode].
|
||||
Get(task->ComputeHandle);
|
||||
if ((count <= 256) || !MatrixParallel.IsParallelMeaningful)
|
||||
{
|
||||
op(task);
|
||||
return;
|
||||
}
|
||||
MatrixParallelWrap taskWrap = MatrixParallel.ScheduleTask<BufferSequentialQueue>(task);
|
||||
taskWrap.LaunchParallel(SleepMode.DeepSleep);
|
||||
taskWrap.Dispose();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user