diff --git a/PerfectNumbers.Core/Gpu/Kernels/PrimeOrderKernels.cs b/PerfectNumbers.Core/Gpu/Kernels/PrimeOrderKernels.cs index 493aa1b..c7076f5 100644 --- a/PerfectNumbers.Core/Gpu/Kernels/PrimeOrderKernels.cs +++ b/PerfectNumbers.Core/Gpu/Kernels/PrimeOrderKernels.cs @@ -7,7 +7,7 @@ using ILGPU.Runtime; namespace PerfectNumbers.Core.Gpu; -internal static class PrimeOrderKernels +internal static partial class PrimeOrderGpuHeuristics { internal static void PartialFactorKernel( Index1D index, diff --git a/PerfectNumbers.Core/Gpu/PrimeOrderGpuHeuristics.cs b/PerfectNumbers.Core/Gpu/PrimeOrderGpuHeuristics.cs index 9b77a3d..a855dd7 100644 --- a/PerfectNumbers.Core/Gpu/PrimeOrderGpuHeuristics.cs +++ b/PerfectNumbers.Core/Gpu/PrimeOrderGpuHeuristics.cs @@ -123,7 +123,7 @@ internal static partial class PrimeOrderGpuHeuristics { return PartialFactorKernelCache.GetOrAdd(accelerator, static accel => { - var loaded = accel.LoadAutoGroupedStreamKernel, ArrayView1D, int, int, ulong, uint, ArrayView1D, ArrayView1D, ArrayView1D, ArrayView1D, ArrayView1D>(PrimeOrderKernels.PartialFactorKernel); + var loaded = accel.LoadAutoGroupedStreamKernel, ArrayView1D, int, int, ulong, uint, ArrayView1D, ArrayView1D, ArrayView1D, ArrayView1D, ArrayView1D>(PartialFactorKernel); var kernel = KernelUtil.GetKernel(loaded); return kernel.CreateLauncherDelegate, ArrayView1D, int, int, ulong, uint, ArrayView1D, ArrayView1D, ArrayView1D, ArrayView1D, ArrayView1D>>(); }); @@ -420,15 +420,15 @@ internal static partial class PrimeOrderGpuHeuristics byte status = 0; statusBuffer.View.CopyToCPU(ref status, 1); - PrimeOrderKernels.PrimeOrderKernelStatus kernelStatus = (PrimeOrderKernels.PrimeOrderKernelStatus)status; - if (kernelStatus == PrimeOrderKernels.PrimeOrderKernelStatus.Fallback) + PrimeOrderKernelStatus kernelStatus = (PrimeOrderKernelStatus)status; + if (kernelStatus == PrimeOrderKernelStatus.Fallback) { DisposeResources(); lease.Dispose(); return false; } - if (kernelStatus == PrimeOrderKernels.PrimeOrderKernelStatus.PollardOverflow) + if (kernelStatus == PrimeOrderKernelStatus.PollardOverflow) { DisposeResources(); lease.Dispose(); @@ -437,7 +437,7 @@ internal static partial class PrimeOrderGpuHeuristics resultBuffer.View.CopyToCPU(ref order, 1); - if (kernelStatus == PrimeOrderKernels.PrimeOrderKernelStatus.FactoringFailure) + if (kernelStatus == PrimeOrderKernelStatus.FactoringFailure) { order = 0UL; } @@ -467,7 +467,7 @@ internal static partial class PrimeOrderGpuHeuristics { return OrderKernelCache.GetOrAdd(accelerator, static accel => { - var loaded = accel.LoadAutoGroupedStreamKernel, ArrayView1D, int, OrderKernelBuffers>(PrimeOrderKernels.CalculateOrderKernel); + var loaded = accel.LoadAutoGroupedStreamKernel, ArrayView1D, int, OrderKernelBuffers>(CalculateOrderKernel); var kernel = KernelUtil.GetKernel(loaded); return kernel.CreateLauncherDelegate(); }); @@ -658,27 +658,14 @@ internal static partial class PrimeOrderGpuHeuristics { return Pow2ModKernelCache.GetOrAdd(accelerator, static accel => { - var loaded = accel.LoadAutoGroupedStreamKernel, MontgomeryDivisorData, ArrayView1D>(PrimeOrderKernels.Pow2ModKernel); + var loaded = accel.LoadAutoGroupedStreamKernel, MontgomeryDivisorData, ArrayView1D>(Pow2ModKernel); var kernel = KernelUtil.GetKernel(loaded); return kernel.CreateLauncherDelegate, MontgomeryDivisorData, ArrayView1D>>(); }); } - private static Action, GpuUInt128, ArrayView1D> GetPow2ModWideKernel(Accelerator accelerator) - { - return Pow2ModKernelWideCache.GetOrAdd(accelerator, static accel => - { - var loaded = accel.LoadAutoGroupedStreamKernel, GpuUInt128, ArrayView1D>(PrimeOrderKernels.Pow2ModKernelWide); - var kernel = KernelUtil.GetKernel(loaded); - return kernel.CreateLauncherDelegate, GpuUInt128, ArrayView1D>>(); - }); - } - private static GpuUInt128 Pow2ModKernelCore(GpuUInt128 exponent, GpuUInt128 modulus) - { - return PrimeOrderKernels.Pow2ModKernelCore(exponent, modulus); - } internal readonly record struct PrimeOrderGpuCapability(int ModulusBits, int ExponentBits) { diff --git a/PerfectNumbers.Core/PrimeTester.cs b/PerfectNumbers.Core/PrimeTester.cs index 0a6bcc8..cffad8d 100644 --- a/PerfectNumbers.Core/PrimeTester.cs +++ b/PerfectNumbers.Core/PrimeTester.cs @@ -335,4 +335,3 @@ public sealed class PrimeTester(bool useInternal = false) return u << shift; } } -} diff --git a/PerfectNumbers.Core/ULongExtensions.cs b/PerfectNumbers.Core/ULongExtensions.cs index fe97565..b788b5a 100644 --- a/PerfectNumbers.Core/ULongExtensions.cs +++ b/PerfectNumbers.Core/ULongExtensions.cs @@ -574,6 +574,7 @@ public static class ULongExtensions } + } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static ulong Pow2MontgomeryModSingleBit(ulong exponent, in MontgomeryDivisorData divisor, bool keepMontgomery) {