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)
|
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)
|
||||||
|
|||||||
Reference in new issue
Block a user