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 readonly object _sync = new();
|
||||||
private ulong _divisorLimit;
|
private ulong _divisorLimit;
|
||||||
private bool _isConfigured;
|
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<ulong>, ArrayView<byte>>> _updateKernelCache = new();
|
||||||
private readonly ConcurrentDictionary<Accelerator, Action<Index1D, ulong, ArrayView<ulong>, ArrayView<ulong>, ArrayView<byte>>> _initialKernelCache = 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);
|
_divisorLimit = ComputeDivisorLimitFromMaxPrime(maxPrime);
|
||||||
|
_lastStatusDivisor = 0UL;
|
||||||
_isConfigured = true;
|
_isConfigured = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,13 +108,16 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
|||||||
hitsBuffer.View.CopyToCPU(ref MemoryMarshal.GetReference(hitsSpan), count);
|
hitsBuffer.View.CopyToCPU(ref MemoryMarshal.GetReference(hitsSpan), count);
|
||||||
|
|
||||||
bool composite = false;
|
bool composite = false;
|
||||||
|
ulong lastProcessed = 0UL;
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
if (divisorsSpan[i] > allowedMax)
|
ulong divisor = divisorsSpan[i];
|
||||||
|
if (divisor > allowedMax)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lastProcessed = divisor;
|
||||||
if (hitsSpan[i] != 0)
|
if (hitsSpan[i] != 0)
|
||||||
{
|
{
|
||||||
composite = true;
|
composite = true;
|
||||||
@@ -120,6 +125,11 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lastProcessed != 0UL)
|
||||||
|
{
|
||||||
|
ReportStatus(lastProcessed);
|
||||||
|
}
|
||||||
|
|
||||||
ArrayPool<byte>.Shared.Return(hits, clearArray: true);
|
ArrayPool<byte>.Shared.Return(hits, clearArray: true);
|
||||||
|
|
||||||
hitsBuffer.Dispose();
|
hitsBuffer.Dispose();
|
||||||
@@ -174,6 +184,7 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
|||||||
hitsBuffer.View.CopyToCPU(ref MemoryMarshal.GetReference(hitsSpan), count);
|
hitsBuffer.View.CopyToCPU(ref MemoryMarshal.GetReference(hitsSpan), count);
|
||||||
|
|
||||||
bool composite = false;
|
bool composite = false;
|
||||||
|
ulong lastProcessed = 0UL;
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
ulong divisor = newDivisorsSpan[i];
|
ulong divisor = newDivisorsSpan[i];
|
||||||
@@ -181,12 +192,18 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
|||||||
_divisors.Add(divisor);
|
_divisors.Add(divisor);
|
||||||
_remainders.Add(remainder);
|
_remainders.Add(remainder);
|
||||||
_lastPrimes.Add(prime);
|
_lastPrimes.Add(prime);
|
||||||
|
lastProcessed = divisor;
|
||||||
if (!composite && hitsSpan[i] != 0)
|
if (!composite && hitsSpan[i] != 0)
|
||||||
{
|
{
|
||||||
composite = true;
|
composite = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lastProcessed != 0UL)
|
||||||
|
{
|
||||||
|
ReportStatus(lastProcessed);
|
||||||
|
}
|
||||||
|
|
||||||
ArrayPool<ulong>.Shared.Return(newRemainders, clearArray: true);
|
ArrayPool<ulong>.Shared.Return(newRemainders, clearArray: true);
|
||||||
ArrayPool<byte>.Shared.Return(hits, clearArray: true);
|
ArrayPool<byte>.Shared.Return(hits, clearArray: true);
|
||||||
|
|
||||||
@@ -198,6 +215,17 @@ public sealed class MersenneNumberDivisorByDivisorGpuTester
|
|||||||
return composite;
|
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)
|
private static ulong ComputeDivisorLimitFromMaxPrime(ulong maxPrime)
|
||||||
{
|
{
|
||||||
if (maxPrime <= 1UL)
|
if (maxPrime <= 1UL)
|
||||||
|
|||||||
Reference in new issue
Block a user