MontgomeryDivisorData converted to a pooled class to limit GC pressure. MontgomeryDivisorDataGpu added for GPU operations. PrimeOrderCalculator kernels precompiled during warmup.
This commit is contained in:
1 parent
07efd5d2a1
commit
070e2a14fd
32 files changed
+310
-192
No files matched your search
@@ -17,18 +17,28 @@ internal static class Pow2MontgomeryKernels
|
||||
public static void Pow2MontgomeryKernelKeepMontgomery(
|
||||
Index1D index,
|
||||
ArrayView1D<ulong, Stride1D.Dense> exponents,
|
||||
MontgomeryDivisorData divisor,
|
||||
ulong divisorModulus,
|
||||
ulong divisorNPrime,
|
||||
ulong divisorMontgomeryOne,
|
||||
ulong divisorMontgomeryTwo,
|
||||
ulong divisorMontgomeryTwoSquared,
|
||||
ArrayView1D<ulong, Stride1D.Dense> results)
|
||||
{
|
||||
MontgomeryDivisorDataGpu divisor = new(divisorModulus, divisorNPrime, divisorMontgomeryOne, divisorMontgomeryTwo, divisorMontgomeryTwoSquared);
|
||||
results[0] = ULongExtensions.Pow2MontgomeryModWindowedGpuKeepMontgomery(divisor, exponents[0]);
|
||||
}
|
||||
|
||||
public static void Pow2MontgomeryKernelConvertToStandard(
|
||||
Index1D index,
|
||||
ArrayView1D<ulong, Stride1D.Dense> exponents,
|
||||
MontgomeryDivisorData divisor,
|
||||
ulong divisorModulus,
|
||||
ulong divisorNPrime,
|
||||
ulong divisorMontgomeryOne,
|
||||
ulong divisorMontgomeryTwo,
|
||||
ulong divisorMontgomeryTwoSquared,
|
||||
ArrayView1D<ulong, Stride1D.Dense> results)
|
||||
{
|
||||
MontgomeryDivisorDataGpu divisor = new(divisorModulus, divisorNPrime, divisorMontgomeryOne, divisorMontgomeryTwo, divisorMontgomeryTwoSquared);
|
||||
results[0] = ULongExtensions.Pow2MontgomeryModWindowedGpuConvertToStandard(divisor, exponents[0]);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user