From b76ef0b11a5c09e758d91a0fe81158dd2a220787 Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Fri, 17 Oct 2025 03:51:06 +0200 Subject: [PATCH] Cache capacity initialized for better performance --- .../PrimeOrderCalculator.Cpu.cs | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs b/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs index bf04f37..8f3b49a 100644 --- a/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs +++ b/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs @@ -329,7 +329,7 @@ internal static partial class PrimeOrderCalculator bool gpuStackRemainders = false; GpuPow2ModStatus status = GpuPow2ModStatus.Unavailable; - if (allowGpuBatch && IsGpuPow2Allowed) + // if (allowGpuBatch && IsGpuPow2Allowed) { if (batchSize <= StackGpuBatchSize) { @@ -650,20 +650,21 @@ internal static partial class PrimeOrderCalculator private static bool Pow2EqualsOneCpu(ulong exponent, ulong prime, in MontgomeryDivisorData divisorData) { - if (IsGpuPow2Allowed) - { - GpuPow2ModStatus status = PrimeOrderGpuHeuristics.TryPow2Mod(exponent, prime, out ulong remainder, divisorData); - if (status == GpuPow2ModStatus.Success) - { + // if (IsGpuPow2Allowed) + // { + ulong remainder = exponent.Pow2MontgomeryModWindowedGpu(divisorData, false); + // GpuPow2ModStatus status = PrimeOrderGpuHeuristics.TryPow2Mod(exponent, prime, out ulong remainder, divisorData); + // if (status == GpuPow2ModStatus.Success) + // { return remainder == 1UL; - } - } + // } + // } - return exponent.Pow2MontgomeryModWindowedCpu(divisorData, keepMontgomery: false) == 1UL; + // return exponent.Pow2MontgomeryModWindowedCpu(divisorData, keepMontgomery: false) == 1UL; } // [ThreadStatic] - private static readonly Dictionary _primalityCache = []; + private static readonly Dictionary _primalityCache = new(16_777_216); private static readonly ReaderWriterLockSlim _primalityCacheLock = new(LockRecursionPolicy.NoRecursion); // [ThreadStatic]