Log by-divisor progress updates
This commit is contained in:
1 parent
5ce0cf74fc
commit
eb0a5b2655
1 file changed
+29
-1
@@ -17,6 +17,7 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
||||
private readonly object _sync = new();
|
||||
private ulong _divisorLimit;
|
||||
private bool _isConfigured;
|
||||
private ulong _lastStatusDivisor;
|
||||
|
||||
private readonly ConcurrentDictionary<Accelerator, Action<Index1D, ulong, ArrayView<ulong>, ArrayView<ulong>, ArrayView<ulong>, ArrayView<byte>>> _updateKernelCache = new();
|
||||
private readonly ConcurrentDictionary<Accelerator, Action<Index1D, ulong, ArrayView<ulong>, ArrayView<ulong>, ArrayView<byte>>> _initialKernelCache = new();
|
||||
@@ -39,6 +40,7 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
||||
}
|
||||
|
||||
_divisorLimit = ComputeDivisorLimitFromMaxPrime(maxPrime);
|
||||
_lastStatusDivisor = 0UL;
|
||||
_isConfigured = true;
|
||||
}
|
||||
}
|
||||
@@ -106,13 +108,16 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
||||
hitsBuffer.View.CopyToCPU(ref MemoryMarshal.GetReference(hitsSpan), count);
|
||||
|
||||
bool composite = false;
|
||||
ulong lastProcessed = 0UL;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
if (divisorsSpan[i] > allowedMax)
|
||||
ulong divisor = divisorsSpan[i];
|
||||
if (divisor > allowedMax)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
lastProcessed = divisor;
|
||||
if (hitsSpan[i] != 0)
|
||||
{
|
||||
composite = true;
|
||||
@@ -120,6 +125,11 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
||||
}
|
||||
}
|
||||
|
||||
if (lastProcessed != 0UL)
|
||||
{
|
||||
ReportStatus(lastProcessed);
|
||||
}
|
||||
|
||||
ArrayPool<byte>.Shared.Return(hits, clearArray: true);
|
||||
|
||||
hitsBuffer.Dispose();
|
||||
@@ -174,6 +184,7 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
||||
hitsBuffer.View.CopyToCPU(ref MemoryMarshal.GetReference(hitsSpan), count);
|
||||
|
||||
bool composite = false;
|
||||
ulong lastProcessed = 0UL;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
ulong divisor = newDivisorsSpan[i];
|
||||
@@ -181,12 +192,18 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
||||
_divisors.Add(divisor);
|
||||
_remainders.Add(remainder);
|
||||
_lastPrimes.Add(prime);
|
||||
lastProcessed = divisor;
|
||||
if (!composite && hitsSpan[i] != 0)
|
||||
{
|
||||
composite = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (lastProcessed != 0UL)
|
||||
{
|
||||
ReportStatus(lastProcessed);
|
||||
}
|
||||
|
||||
ArrayPool<ulong>.Shared.Return(newRemainders, clearArray: true);
|
||||
ArrayPool<byte>.Shared.Return(hits, clearArray: true);
|
||||
|
||||
@@ -198,6 +215,17 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
||||
return composite;
|
||||
}
|
||||
|
||||
private void ReportStatus(ulong divisor)
|
||||
{
|
||||
if (divisor <= _lastStatusDivisor)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_lastStatusDivisor = divisor;
|
||||
Console.WriteLine($"...processed by-divisor candidate = {divisor}");
|
||||
}
|
||||
|
||||
private static ulong ComputeDivisorLimitFromMaxPrime(ulong maxPrime)
|
||||
{
|
||||
if (maxPrime <= 1UL)
|
||||
|
||||
Reference in new issue
Block a user