Kernels made part of the accelerators for better performance.

This commit is contained in:
mlemanczyk committed 2025-11-13 18:52:46 +01:00
1 parent 0d2a88c45f
commit be435b7760
5 files changed
+29 -53

No files matched your search

+2 -16
View File
@@ -278,10 +278,10 @@ public sealed class PrimeTester
// and implement it.
int length = values.Length;
ArrayPool<ulong> pool = ThreadStaticPools.UlongPool;
var gpu = PrimeOrderCalculatorAccelerator.Rent(1);
var accelerator = gpu.Accelerator;
var kernel = gpu.SharesFactorKernel;
gpu.EnsureCapacity(0, length);
MemoryBuffer1D<ulong, Stride1D.Dense>? inputBuffer = gpu.PrimeTestInput;
MemoryBuffer1D<byte, Stride1D.Dense>? resultBuffer = gpu.OutputByte;
@@ -289,8 +289,7 @@ public sealed class PrimeTester
AcceleratorStream stream = AcceleratorStreamPool.Rent(accelerator);
inputBuffer.View.CopyFromCPU(stream, values);
var kernel = GetSharesFactorKernel(accelerator);
kernel(stream, length, inputBuffer.View, resultBuffer.View);
kernel.Launch(stream, 1, length, inputBuffer.View, resultBuffer.View);
resultBuffer.View.CopyToCPU(stream, in results);
stream.Synchronize();
@@ -298,19 +297,6 @@ public sealed class PrimeTester
PrimeOrderCalculatorAccelerator.Return(gpu);
}
private static Action<AcceleratorStream, Index1D, ArrayView<ulong>, ArrayView<byte>> GetSharesFactorKernel(Accelerator accelerator)
{
var pool = _kernel ?? [];
if (pool.TryGetValue(accelerator, out var cached))
{
return cached;
}
cached = KernelUtil.GetKernel(accelerator.LoadAutoGroupedStreamKernel<Index1D, ArrayView<ulong>, ArrayView<byte>>(PrimeTesterKernels.SharesFactorKernel)).CreateLauncherDelegate<Action<AcceleratorStream, Index1D, ArrayView<ulong>, ArrayView<byte>>>();
pool[accelerator] = cached;
return cached;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static ulong BinaryGcd(ulong u, ulong v)
{