Accelerator locks removed

This commit is contained in:
mlemanczyk committed 2025-11-23 14:59:29 +01:00
1 parent 79021108f5
commit 07efd5d2a1
8 files changed
+21 -21

No files matched your search

+1 -1
View File
@@ -260,7 +260,7 @@ public sealed class DivisorCycleCache
} }
Accelerator accelerator = _accelerator; Accelerator accelerator = _accelerator;
lock(accelerator) // lock (accelerator)
{ {
divisorBuffer = accelerator.Allocate1D<ulong>(requiredCapacity); divisorBuffer = accelerator.Allocate1D<ulong>(requiredCapacity);
powBuffer = accelerator.Allocate1D<ulong>(requiredCapacity); powBuffer = accelerator.Allocate1D<ulong>(requiredCapacity);
@@ -19,7 +19,7 @@ public sealed class MersenneNumberDivisorByDivisorAccelerator
Counts = intPool.Rent(capacity); Counts = intPool.Rent(capacity);
Cycles = ulongPool.Rent(capacity); Cycles = ulongPool.Rent(capacity);
lock (accelerator) // lock (accelerator)
{ {
DivisorDataBuffer = accelerator.Allocate1D<GpuDivisorPartialData>(capacity); DivisorDataBuffer = accelerator.Allocate1D<GpuDivisorPartialData>(capacity);
OffsetBuffer = accelerator.Allocate1D<int>(capacity); OffsetBuffer = accelerator.Allocate1D<int>(capacity);
@@ -67,7 +67,7 @@ public sealed class MersenneNumberDivisorByDivisorAccelerator
HitsBuffer.Dispose(); HitsBuffer.Dispose();
HitIndexBuffer.Dispose(); HitIndexBuffer.Dispose();
lock (accelerator) // lock (accelerator)
{ {
DivisorDataBuffer = accelerator.Allocate1D<GpuDivisorPartialData>(capacity); DivisorDataBuffer = accelerator.Allocate1D<GpuDivisorPartialData>(capacity);
OffsetBuffer = accelerator.Allocate1D<int>(capacity); OffsetBuffer = accelerator.Allocate1D<int>(capacity);
@@ -135,7 +135,7 @@ public sealed class PrimeOrderCalculatorAccelerator
MemoryBuffer1D<KeyValuePair<ulong, int>, Stride1D.Dense> pow2ModEntriesToTestOnDevice = Pow2ModEntriesToTestOnDevice; MemoryBuffer1D<KeyValuePair<ulong, int>, Stride1D.Dense> pow2ModEntriesToTestOnDevice = Pow2ModEntriesToTestOnDevice;
if (pow2ModEntriesToTestOnDevice.Length < factorsCount) if (pow2ModEntriesToTestOnDevice.Length < factorsCount)
{ {
lock (accelerator) // lock (accelerator)
{ {
pow2ModEntriesToTestOnDevice.Dispose(); pow2ModEntriesToTestOnDevice.Dispose();
Pow2ModEntriesToTestOnDevice = accelerator.Allocate1D<KeyValuePair<ulong, int>>(factorsCount); Pow2ModEntriesToTestOnDevice = accelerator.Allocate1D<KeyValuePair<ulong, int>>(factorsCount);
@@ -145,7 +145,7 @@ public sealed class PrimeOrderCalculatorAccelerator
MemoryBuffer1D<ulong, Stride1D.Dense> input = Input; MemoryBuffer1D<ulong, Stride1D.Dense> input = Input;
if (input.Length < primeTesterCapacity) if (input.Length < primeTesterCapacity)
{ {
lock (accelerator) // lock (accelerator)
{ {
input.Dispose(); input.Dispose();
Input = accelerator.Allocate1D<ulong>(primeTesterCapacity); Input = accelerator.Allocate1D<ulong>(primeTesterCapacity);
@@ -155,7 +155,7 @@ public sealed class PrimeOrderCalculatorAccelerator
MemoryBuffer1D<byte, Stride1D.Dense> outputByte = OutputByte; MemoryBuffer1D<byte, Stride1D.Dense> outputByte = OutputByte;
if (outputByte.Length < primeTesterCapacity) if (outputByte.Length < primeTesterCapacity)
{ {
lock (accelerator) // lock (accelerator)
{ {
outputByte.Dispose(); outputByte.Dispose();
OutputByte = accelerator.Allocate1D<byte>(primeTesterCapacity); OutputByte = accelerator.Allocate1D<byte>(primeTesterCapacity);
@@ -165,7 +165,7 @@ public sealed class PrimeOrderCalculatorAccelerator
MemoryBuffer1D<int, Stride1D.Dense> outputInt = OutputInt; MemoryBuffer1D<int, Stride1D.Dense> outputInt = OutputInt;
if (outputInt.Length < primeTesterCapacity) if (outputInt.Length < primeTesterCapacity)
{ {
lock (accelerator) // lock (accelerator)
{ {
outputInt.Dispose(); outputInt.Dispose();
OutputInt = accelerator.Allocate1D<int>(primeTesterCapacity); OutputInt = accelerator.Allocate1D<int>(primeTesterCapacity);
@@ -180,7 +180,7 @@ public sealed class PrimeOrderCalculatorAccelerator
MemoryBuffer1D<ulong, Stride1D.Dense> outputUlong = OutputUlong; MemoryBuffer1D<ulong, Stride1D.Dense> outputUlong = OutputUlong;
if (outputUlong.Length < newSize) if (outputUlong.Length < newSize)
{ {
lock (accelerator) // lock (accelerator)
{ {
outputUlong.Dispose(); outputUlong.Dispose();
OutputUlong = accelerator.Allocate1D<ulong>(newSize); OutputUlong = accelerator.Allocate1D<ulong>(newSize);
@@ -190,7 +190,7 @@ public sealed class PrimeOrderCalculatorAccelerator
MemoryBuffer1D<int, Stride1D.Dense> outputInt = OutputInt; MemoryBuffer1D<int, Stride1D.Dense> outputInt = OutputInt;
if (outputInt.Length < newSize) if (outputInt.Length < newSize)
{ {
lock (accelerator) // lock (accelerator)
{ {
outputInt.Dispose(); outputInt.Dispose();
OutputInt = accelerator.Allocate1D<int>(newSize); OutputInt = accelerator.Allocate1D<int>(newSize);
@@ -204,7 +204,7 @@ public sealed class PrimeOrderCalculatorAccelerator
MemoryBuffer1D<ulong, Stride1D.Dense> input = Input; MemoryBuffer1D<ulong, Stride1D.Dense> input = Input;
if (input.Length < newSize) if (input.Length < newSize)
{ {
lock (accelerator) // lock (accelerator)
{ {
input.Dispose(); input.Dispose();
Input = accelerator.Allocate1D<ulong>(newSize); Input = accelerator.Allocate1D<ulong>(newSize);
@@ -214,7 +214,7 @@ public sealed class PrimeOrderCalculatorAccelerator
MemoryBuffer1D<ulong, Stride1D.Dense> outputUlong = OutputUlong; MemoryBuffer1D<ulong, Stride1D.Dense> outputUlong = OutputUlong;
if (outputUlong.Length < newSize) if (outputUlong.Length < newSize)
{ {
lock (accelerator) // lock (accelerator)
{ {
outputUlong.Dispose(); outputUlong.Dispose();
OutputUlong = accelerator.Allocate1D<ulong>(newSize); OutputUlong = accelerator.Allocate1D<ulong>(newSize);
@@ -227,7 +227,7 @@ public sealed class PrimeOrderCalculatorAccelerator
var accelerator = _accelerators[acceleratorIndex]; var accelerator = _accelerators[acceleratorIndex];
Accelerator = accelerator; Accelerator = accelerator;
AcceleratorIndex = acceleratorIndex; AcceleratorIndex = acceleratorIndex;
lock (accelerator) // lock (accelerator)
{ {
Input = accelerator.Allocate1D<ulong>(Math.Max(specialMaxFactorCapacity, primeTesterCapacity)); Input = accelerator.Allocate1D<ulong>(Math.Max(specialMaxFactorCapacity, primeTesterCapacity));
OutputByte = Accelerator.Allocate1D<byte>(primeTesterCapacity); OutputByte = Accelerator.Allocate1D<byte>(primeTesterCapacity);
+2 -2
View File
@@ -151,7 +151,7 @@ public class GpuKernelPool
var host = MersenneDivisorCycles.Shared.ExportSmallCyclesSnapshot(); var host = MersenneDivisorCycles.Shared.ExportSmallCyclesSnapshot();
MemoryBuffer1D<ulong, Stride1D.Dense>? device; MemoryBuffer1D<ulong, Stride1D.Dense>? device;
lock (accelerator) // lock (accelerator)
{ {
device = accelerator.Allocate1D<ulong>(host.Length); device = accelerator.Allocate1D<ulong>(host.Length);
} }
@@ -195,7 +195,7 @@ public class GpuKernelPool
MemoryBuffer1D<ulong, Stride1D.Dense>? deviceLastOnePow2; MemoryBuffer1D<ulong, Stride1D.Dense>? deviceLastOnePow2;
MemoryBuffer1D<ulong, Stride1D.Dense>? deviceLastSevenPow2; MemoryBuffer1D<ulong, Stride1D.Dense>? deviceLastSevenPow2;
lock (accelerator) // lock (accelerator)
{ {
deviceLastOne = accelerator.Allocate1D<uint>(hostLastOne.Length); deviceLastOne = accelerator.Allocate1D<uint>(hostLastOne.Length);
deviceLastSeven = accelerator.Allocate1D<uint>(hostLastSeven.Length); deviceLastSeven = accelerator.Allocate1D<uint>(hostLastSeven.Length);
@@ -521,7 +521,7 @@ public sealed partial class MersenneNumberDivisorByDivisorGpuTester : IMersenneN
if (_divisorBuffer == null) if (_divisorBuffer == null)
{ {
lock(accelerator) // lock (accelerator)
{ {
_divisorBuffer = accelerator.Allocate1D<GpuDivisorPartialData>(1); _divisorBuffer = accelerator.Allocate1D<GpuDivisorPartialData>(1);
_offsetBuffer = accelerator.Allocate1D<int>(1); _offsetBuffer = accelerator.Allocate1D<int>(1);
@@ -551,7 +551,7 @@ public sealed partial class MersenneNumberDivisorByDivisorGpuTester : IMersenneN
{ {
int desiredCapacity = requiredCapacity > _capacity ? requiredCapacity : _capacity; int desiredCapacity = requiredCapacity > _capacity ? requiredCapacity : _capacity;
_capacity = desiredCapacity; _capacity = desiredCapacity;
lock (accelerator) // lock (accelerator)
{ {
_exponentsBuffer = accelerator.Allocate1D<ulong>(desiredCapacity); _exponentsBuffer = accelerator.Allocate1D<ulong>(desiredCapacity);
_hitBuffer = accelerator.Allocate1D<byte>(desiredCapacity); _hitBuffer = accelerator.Allocate1D<byte>(desiredCapacity);
@@ -63,7 +63,7 @@ public sealed class MersenneNumberDivisorGpuTester
Queue<MemoryBuffer1D<byte, Stride1D.Dense>> resultBuffers = GetQueue(accelerator); Queue<MemoryBuffer1D<byte, Stride1D.Dense>> resultBuffers = GetQueue(accelerator);
if (!resultBuffers.TryDequeue(out var resultBuffer)) if (!resultBuffers.TryDequeue(out var resultBuffer))
{ {
// lock(accelerator) // lock (accelerator)
{ {
resultBuffer = accelerator.Allocate1D<byte>(1); resultBuffer = accelerator.Allocate1D<byte>(1);
} }
@@ -354,7 +354,7 @@ internal static partial class PrimeOrderGpuHeuristics
MemoryBuffer1D<ulong, Stride1D.Dense>? resultBuffer; MemoryBuffer1D<ulong, Stride1D.Dense>? resultBuffer;
MemoryBuffer1D<byte, Stride1D.Dense>? statusBuffer; MemoryBuffer1D<byte, Stride1D.Dense>? statusBuffer;
lock(accelerator) // lock (accelerator)
{ {
phiFactorBuffer = accelerator.Allocate1D<ulong>(GpuSmallPrimeFactorSlots); phiFactorBuffer = accelerator.Allocate1D<ulong>(GpuSmallPrimeFactorSlots);
phiExponentBuffer = accelerator.Allocate1D<int>(GpuSmallPrimeFactorSlots); phiExponentBuffer = accelerator.Allocate1D<int>(GpuSmallPrimeFactorSlots);
@@ -518,7 +518,7 @@ internal static partial class PrimeOrderGpuHeuristics
// with out preallocated buffers. Share the pool with Pow2ModWide kernel. // with out preallocated buffers. Share the pool with Pow2ModWide kernel.
MemoryBuffer1D<ulong, Stride1D.Dense>? exponentBuffer; MemoryBuffer1D<ulong, Stride1D.Dense>? exponentBuffer;
MemoryBuffer1D<ulong, Stride1D.Dense>? remainderBuffer; MemoryBuffer1D<ulong, Stride1D.Dense>? remainderBuffer;
lock(accelerator) // lock (accelerator)
{ {
exponentBuffer = accelerator.Allocate1D<ulong>(exponents.Length); exponentBuffer = accelerator.Allocate1D<ulong>(exponents.Length);
remainderBuffer = accelerator.Allocate1D<ulong>(exponents.Length); remainderBuffer = accelerator.Allocate1D<ulong>(exponents.Length);
@@ -597,7 +597,7 @@ internal static partial class PrimeOrderGpuHeuristics
MemoryBuffer1D<GpuUInt128, Stride1D.Dense> exponentBuffer; MemoryBuffer1D<GpuUInt128, Stride1D.Dense> exponentBuffer;
MemoryBuffer1D<GpuUInt128, Stride1D.Dense> remainderBuffer; MemoryBuffer1D<GpuUInt128, Stride1D.Dense> remainderBuffer;
lock(accelerator) // lock (accelerator)
{ {
exponentBuffer = accelerator.Allocate1D<GpuUInt128>(length); exponentBuffer = accelerator.Allocate1D<GpuUInt128>(length);
remainderBuffer = accelerator.Allocate1D<GpuUInt128>(length); remainderBuffer = accelerator.Allocate1D<GpuUInt128>(length);
+1 -1
View File
@@ -862,7 +862,7 @@ public class MersenneDivisorCycles
// GpuKernelPool.Run((accelerator, stream) => // GpuKernelPool.Run((accelerator, stream) =>
MemoryBuffer1D<ulong, Stride1D.Dense>? bufferDiv; MemoryBuffer1D<ulong, Stride1D.Dense>? bufferDiv;
MemoryBuffer1D<ulong, Stride1D.Dense>? bufferCycle; MemoryBuffer1D<ulong, Stride1D.Dense>? bufferCycle;
lock(accelerator) // lock (accelerator)
{ {
bufferDiv = accelerator.Allocate1D(validDivisors); bufferDiv = accelerator.Allocate1D(validDivisors);
bufferCycle = accelerator.Allocate1D<ulong>(idx); bufferCycle = accelerator.Allocate1D<ulong>(idx);