Replace status modulo with subtract loop

This commit is contained in:
Marek Lemańczyk committed 2025-10-09 03:51:56 +02:00
1 parent 574e4b8007
commit eae153e4a4
1 file changed
+12 -5
@@ -95,7 +95,7 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
{ {
lock (_sync) lock (_sync)
{ {
UpdateStatusUnsafe(lastProcessed, processedCount); UpdateStatusUnsafe(processedCount);
} }
} }
@@ -283,7 +283,7 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
return (byte)sum; return (byte)sum;
} }
private void UpdateStatusUnsafe(ulong lastProcessed, ulong processedCount) private void UpdateStatusUnsafe(ulong processedCount)
{ {
if (processedCount == 0UL) if (processedCount == 0UL)
{ {
@@ -298,9 +298,16 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
} }
ulong total = _lastStatusDivisor + processedCount; ulong total = _lastStatusDivisor + processedCount;
// TODO: Replace this modulo with the ring-buffer style counter (subtract loop) used in the fast CLI if (total >= interval)
// status benchmarks so we avoid `%` in this hot loop while still wrapping progress correctly. {
_lastStatusDivisor = total % interval; do
{
total -= interval;
}
while (total >= interval);
}
_lastStatusDivisor = total;
} }
private static ulong ComputeDivisorLimitFromMaxPrime(ulong maxPrime) private static ulong ComputeDivisorLimitFromMaxPrime(ulong maxPrime)