From 469c8057d397f8f20249dc8b9f31c8d0719b854b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Lema=C5=84czyk?= Date: Fri, 31 Oct 2025 22:45:59 +0100 Subject: [PATCH] Flatten heuristic trial division bounds checks --- .../Gpu/Kernels/PrimeTesterKernels.cs | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/PerfectNumbers.Core/Gpu/Kernels/PrimeTesterKernels.cs b/PerfectNumbers.Core/Gpu/Kernels/PrimeTesterKernels.cs index 19b08c9..d6842e0 100644 --- a/PerfectNumbers.Core/Gpu/Kernels/PrimeTesterKernels.cs +++ b/PerfectNumbers.Core/Gpu/Kernels/PrimeTesterKernels.cs @@ -92,20 +92,14 @@ internal static class PrimeTesterKernels int divisorLength = (int)divisorSquares.Length; int threadIndex = index; - if (threadIndex >= divisorLength) - { - return; - } + bool skipThread = threadIndex >= divisorLength; + ulong divisorSquare = skipThread ? 0UL : divisorSquares[threadIndex]; + skipThread = skipThread | (divisorSquare > maxDivisorSquare); - ulong divisorSquare = divisorSquares[threadIndex]; - if (divisorSquare > maxDivisorSquare) - { - return; - } - - ulong divisor = divisors[threadIndex]; - divisor = n % divisor; - if (divisor == 0UL) + ulong divisor = skipThread ? 1UL : divisors[threadIndex]; + ulong remainder = skipThread ? 1UL : n % divisor; + bool hasFactor = !skipThread & (remainder == 0UL); + if (hasFactor) { resultFlag[0] = 1; }