Daily update on 20250907-184649 by Nitload Youmu. Additional Message : Matrix parallel task packet is done, parallel task executer is done. Now is working on building parallel wrap and pool.
Signed-off-by: Nitload <YoumuLiu_NSI@whv0t.onmicrosoft.com>
This commit is contained in:
@@ -76,12 +76,9 @@ namespace StgSharp.Mathematics
|
||||
private static readonly ManualResetEventSlim _restartEvent = new(false);
|
||||
private static readonly ManualResetEventSlim _startEvent = new(false);
|
||||
|
||||
private static MatrixParallelTaskPackage _totalTask;
|
||||
private static readonly object _lock = new();
|
||||
private static ThreadPriority _AfterWork = ThreadPriority.Lowest;
|
||||
|
||||
public static ref MatrixParallelTaskPackage TotalTask => ref _totalTask;
|
||||
|
||||
public static bool SupportParallel { get; } = Environment.ProcessorCount > 6;
|
||||
|
||||
public static bool IsParallelMeaningful { get; } = Environment.ProcessorCount > 6;
|
||||
@@ -139,7 +136,6 @@ namespace StgSharp.Mathematics
|
||||
|
||||
private Queue<IntPtr>[] _cache;
|
||||
private Thread[] _threads;
|
||||
private MatrixParallelTaskPackage _wrapTask;
|
||||
|
||||
public MatrixParallelWrap(int id, int wrapSize, bool isFirst)
|
||||
{
|
||||
@@ -169,8 +165,6 @@ namespace StgSharp.Mathematics
|
||||
_threads[end].Start(new Handle(end, this));
|
||||
}
|
||||
|
||||
public ref MatrixParallelTaskPackage WrapTask => ref _wrapTask;
|
||||
|
||||
public int ID { get; init; }
|
||||
|
||||
public Span<IntPtr> EnqueuePackage(Span<IntPtr> packageSpan)
|
||||
@@ -183,9 +177,9 @@ namespace StgSharp.Mathematics
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public bool TryGetNextWrapTask(int idInWrap, out IntPtr handle)
|
||||
public Queue<IntPtr> GetWorkerTaskQueue(int idInWrap)
|
||||
{
|
||||
return _cache[idInWrap].TryDequeue(out handle);
|
||||
return _cache[idInWrap];
|
||||
}
|
||||
|
||||
public record class Handle(int InWrapIndex, MatrixParallelWrap Wrap);
|
||||
@@ -203,42 +197,35 @@ namespace StgSharp.Mathematics
|
||||
while (true)
|
||||
{
|
||||
self.Priority = ThreadPriority.Highest;
|
||||
while (wrap.TryGetNextWrapTask(inWrapIndex, out IntPtr ptr)) {
|
||||
ExecuteTaskPackage((MatrixParallelTaskPackage*)ptr);
|
||||
}
|
||||
ExecuteTaskPackage(wrap.GetWorkerTaskQueue(inWrapIndex));
|
||||
_ = Interlocked.Decrement(ref RemainThreadCount);
|
||||
self.Priority = _AfterWork;
|
||||
_restartEvent.Wait();
|
||||
}
|
||||
}
|
||||
|
||||
private static unsafe void ExecuteTaskPackage(MatrixParallelTaskPackage* p)
|
||||
private static unsafe void ExecuteTaskPackage(Queue<IntPtr> taskQueue)
|
||||
{
|
||||
MatrixKernel* left = p->Left, right = p->Left, result = p->Result;
|
||||
ref MatrixParallelEnumeration leftParam = ref p->LeftEnum, rightParam = ref p->RightEnum, resultParam = ref p->ResultEnum;
|
||||
int count = p->count;
|
||||
ScalarDataPacket* scalar = p->scalerPacket;
|
||||
switch (p->ComputeMode)
|
||||
while (taskQueue.TryDequeue(out nint handle))
|
||||
{
|
||||
case 1: // Unary operation
|
||||
for (int i = 0; i < length; i++) { }
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
case 4:
|
||||
break;
|
||||
case -1:
|
||||
break;
|
||||
case -2:
|
||||
break;
|
||||
case -3:
|
||||
break;
|
||||
case -4:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
MatrixParallelTaskPackage* p = (MatrixParallelTaskPackage*)handle;
|
||||
switch (p->ComputeMode)
|
||||
{
|
||||
case 1:
|
||||
Compute_Unary(p);
|
||||
break;
|
||||
case 2:
|
||||
Compute_UnaryScalar(p);
|
||||
break;
|
||||
case 3:
|
||||
Compute_Binary(p);
|
||||
break;
|
||||
case 4:
|
||||
Compute_BinaryScalar(p);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,7 +241,7 @@ namespace StgSharp.Mathematics
|
||||
while (true)
|
||||
{
|
||||
self.Priority = ThreadPriority.Highest;
|
||||
while (wrap.TryGetNextWrapTask(inWrapIndex, out IntPtr ptr)) {
|
||||
while (wrap.GetWorkerTaskQueue(inWrapIndex, out IntPtr ptr)) {
|
||||
ExecuteTaskPackage((MatrixParallelTaskPackage*)ptr);
|
||||
}
|
||||
_ = Interlocked.Decrement(ref RemainThreadCount);
|
||||
|
||||
Reference in New Issue
Block a user