GPU contexts and accelerators made shared to prevent application crashes with high no. of threads.

This commit is contained in:
mlemanczyk committed 2025-11-02 12:51:31 +01:00
1 parent b33a3c8e75
commit 0e7bbae132
2 files changed
+29 -19

No files matched your search

+12 -7
View File
@@ -99,7 +99,7 @@ public sealed class PrimeTester
// if (belowGpuRange)
// {
return IsPrime(n);
return IsPrime(n);
// }
// var limiter = GpuPrimeWorkLimiter.Acquire();
@@ -378,12 +378,16 @@ public sealed class PrimeTester
public HeuristicGpuDivisorTables HeuristicGpuTables => _heuristicDivisorTables;
private static readonly Context _sharedContext = Context.CreateDefault();
private static readonly Device _sharedDevice = _sharedContext.GetPreferredDevice(false);
private static readonly Accelerator _sharedAccelerator = _sharedDevice.CreateAccelerator(_sharedContext);
internal PrimeTesterGpuContextLease(int minBufferCapacity)
{
AcceleratorContext = Context.CreateDefault();
Accelerator = AcceleratorContext.GetPreferredDevice(false).CreateAccelerator(AcceleratorContext);
AcceleratorContext = _sharedContext;// Context.CreateDefault();
Accelerator = _sharedAccelerator; //AcceleratorContext.GetPreferredDevice(false).CreateAccelerator(AcceleratorContext);
Kernel = Accelerator.LoadAutoGroupedStreamKernel<Index1D, ArrayView<ulong>, ArrayView<uint>, ArrayView<uint>, ArrayView<uint>, ArrayView<uint>, ArrayView<uint>, ArrayView<ulong>, ArrayView<ulong>, ArrayView<ulong>, ArrayView<ulong>, ArrayView<ulong>, ArrayView<byte>>(PrimeTesterKernels.SmallPrimeSieveKernel);
HeuristicTrialDivisionKernel = Accelerator.LoadAutoGroupedStreamKernel<Index1D, ArrayView<int>, ulong, ulong, HeuristicGpuDivisorTableKind, HeuristicGpuDivisorTables>(PrimeTesterKernels.HeuristicTrialDivisionKernel);
HeuristicTrialDivisionKernel = Accelerator.LoadAutoGroupedStreamKernel<Index1D, ArrayView<int>, ulong, ulong, HeuristicGpuDivisorTableKind, HeuristicGpuDivisorTables>(PrimeTesterKernels.HeuristicTrialDivisionKernel);
_sharedTables = RentSharedTables(Accelerator);
@@ -439,7 +443,7 @@ public sealed class PrimeTester
}
_returned = true;
PrimeTesterGpuContextPool.Return(this);
Return(this);
}
internal void DisposeResources()
@@ -448,8 +452,9 @@ public sealed class PrimeTester
Output?.Dispose();
HeuristicFlag?.Dispose();
ReleaseSharedTables(_sharedTables);
Accelerator.Dispose();
AcceleratorContext.Dispose();
// These resources are shared between GPU leases
// Accelerator.Dispose();
// AcceleratorContext.Dispose();
}
}