Remove Montgomery data from GPU divisor flow

This commit is contained in:
Marek Lemańczyk committed 2025-10-24 18:56:28 +02:00
1 parent 69acd3dad9
commit 46a2178d65
4 files changed
+11 -152

No files matched your search

@@ -1,5 +1,4 @@
using System.Runtime.CompilerServices;
using PerfectNumbers.Core;
namespace PerfectNumbers.Core.Gpu;
@@ -7,32 +6,18 @@ internal readonly struct GpuDivisorPartialData
{
public readonly ulong Modulus;
public readonly ReadOnlyGpuUInt128 ModulusWide;
private readonly MontgomeryDivisorData _montgomeryData;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private GpuDivisorPartialData(ulong modulus, ReadOnlyGpuUInt128 modulusWide, in MontgomeryDivisorData montgomeryData)
private GpuDivisorPartialData(ulong modulus, in ReadOnlyGpuUInt128 modulusWide)
{
Modulus = modulus;
ModulusWide = modulusWide;
_montgomeryData = montgomeryData;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static GpuDivisorPartialData Create(ulong modulus)
{
MontgomeryDivisorData montgomery = MontgomeryDivisorData.FromModulus(modulus);
return new GpuDivisorPartialData(modulus, new ReadOnlyGpuUInt128(modulus), in montgomery);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static GpuDivisorPartialData FromMontgomery(in MontgomeryDivisorData divisor)
{
return new GpuDivisorPartialData(divisor.Modulus, new ReadOnlyGpuUInt128(divisor.Modulus), in divisor);
}
public MontgomeryDivisorData MontgomeryData
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => _montgomeryData;
ReadOnlyGpuUInt128 modulusWide = new(modulus);
return new GpuDivisorPartialData(modulus, in modulusWide);
}
}