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