Formatting

This commit is contained in:
Marek Lemańczyk committed 2025-09-25 00:05:46 +02:00
1 parent d72cfc9748
commit 84c3c23997
1 file changed
+87 -87
+87 -87
View File
@@ -34,8 +34,8 @@ internal static class Program
private static bool _useByDivisorMode; private static bool _useByDivisorMode;
private static bool _byDivisorPrecheckOnly; private static bool _byDivisorPrecheckOnly;
private static UInt128 _divisor; private static UInt128 _divisor;
private static MersenneNumberDivisorGpuTester? _divisorTester; private static MersenneNumberDivisorGpuTester? _divisorTester;
private static IMersenneNumberDivisorByDivisorTester? _byDivisorTester; private static IMersenneNumberDivisorByDivisorTester? _byDivisorTester;
private static ulong? _orderWarmupLimitOverride; private static ulong? _orderWarmupLimitOverride;
private static unsafe delegate*<ulong, ref ulong, ulong> _transformP; private static unsafe delegate*<ulong, ref ulong, ulong> _transformP;
private static long _state; private static long _state;
@@ -448,18 +448,18 @@ internal static class Program
} }
Console.WriteLine($"Loading divisor cycles into memory..."); Console.WriteLine($"Loading divisor cycles into memory...");
if (string.Equals(Path.GetExtension(cyclesPath), ".csv", StringComparison.OrdinalIgnoreCase)) if (string.Equals(Path.GetExtension(cyclesPath), ".csv", StringComparison.OrdinalIgnoreCase))
{ {
MersenneDivisorCycles.Shared.LoadFrom(cyclesPath); MersenneDivisorCycles.Shared.LoadFrom(cyclesPath);
} }
else else
{ {
MersenneDivisorCycles.Shared.LoadFrom(cyclesPath); MersenneDivisorCycles.Shared.LoadFrom(cyclesPath);
} }
DivisorCycleCache.Shared.ReloadFromCurrentSnapshot(); DivisorCycleCache.Shared.ReloadFromCurrentSnapshot();
Console.WriteLine("Divisor cycles are ready"); Console.WriteLine("Divisor cycles are ready");
if (useByDivisor) if (useByDivisor)
{ {
@@ -519,14 +519,14 @@ internal static class Program
_divisorTester = new MersenneNumberDivisorGpuTester(); _divisorTester = new MersenneNumberDivisorGpuTester();
} }
else if (useByDivisor) else if (useByDivisor)
{ {
_byDivisorTester = mersenneOnGpu _byDivisorTester = mersenneOnGpu
? new MersenneNumberDivisorByDivisorGpuTester() ? new MersenneNumberDivisorByDivisorGpuTester()
: new MersenneNumberDivisorByDivisorCpuTester(); : new MersenneNumberDivisorByDivisorCpuTester();
_byDivisorTester.BatchSize = scanBatchSize; _byDivisorTester.BatchSize = scanBatchSize;
_byDivisorTester.UseDivisorCycles = useDivisorCycles; _byDivisorTester.UseDivisorCycles = useDivisorCycles;
} }
// Load RLE blacklist (optional) // Load RLE blacklist (optional)
if (!string.IsNullOrEmpty(_rleBlacklistPath)) if (!string.IsNullOrEmpty(_rleBlacklistPath))
@@ -885,18 +885,18 @@ internal static class Program
bool exhausted = false; bool exhausted = false;
ulong divisor = 0UL; ulong divisor = 0UL;
int activeCount = 0; int activeCount = 0;
Span<byte> hitsSpan = default; Span<byte> hitsSpan = default;
int hitIndex = 0; int hitIndex = 0;
int index = 0; int index = 0;
bool useCycleFilter = _byDivisorTester!.UseDivisorCycles; bool useCycleFilter = _byDivisorTester!.UseDivisorCycles;
DivisorCycleCache.Lease cycleLease = default; DivisorCycleCache.Lease cycleLease = default;
ulong cycleLeaseStart = 0UL; ulong cycleLeaseStart = 0UL;
ulong cycleLeaseEnd = 0UL; ulong cycleLeaseEnd = 0UL;
ulong[]? cycleValues = null; ulong[]? cycleValues = null;
ulong divisorCycle = 0UL; ulong divisorCycle = 0UL;
try try
{ {
while (true) while (true)
{ {
if (Volatile.Read(ref remainingStates) == 0) if (Volatile.Read(ref remainingStates) == 0)
@@ -909,11 +909,11 @@ internal static class Program
divisor = AcquireNextDivisor(ref nextDivisor, divisorLimit, ref divisorsExhaustedFlag, ref finalDivisorBits, out exhausted, ref localDivisorCursor, ref localDivisorsRemaining); divisor = AcquireNextDivisor(ref nextDivisor, divisorLimit, ref divisorsExhaustedFlag, ref finalDivisorBits, out exhausted, ref localDivisorCursor, ref localDivisorsRemaining);
if (divisor == 0UL) if (divisor == 0UL)
{ {
if (!exhausted) if (!exhausted)
{ {
if (Volatile.Read(ref remainingStates) == 0) if (Volatile.Read(ref remainingStates) == 0)
{ {
break; break;
} }
@@ -946,48 +946,48 @@ internal static class Program
break; break;
} }
continue; continue;
} }
if (useCycleFilter) if (useCycleFilter)
{ {
if (!cycleLease.IsValid || divisor < cycleLeaseStart || divisor > cycleLeaseEnd) if (!cycleLease.IsValid || divisor < cycleLeaseStart || divisor > cycleLeaseEnd)
{ {
cycleLease.Dispose(); cycleLease.Dispose();
cycleLease = DivisorCycleCache.Shared.Acquire(divisor); cycleLease = DivisorCycleCache.Shared.Acquire(divisor);
cycleLeaseStart = cycleLease.Start; cycleLeaseStart = cycleLease.Start;
cycleLeaseEnd = cycleLease.End; cycleLeaseEnd = cycleLease.End;
cycleValues = cycleLease.Values; cycleValues = cycleLease.Values;
} }
else if (cycleValues is null) else if (cycleValues is null)
{ {
cycleValues = cycleLease.Values; cycleValues = cycleLease.Values;
} }
if (cycleValues is not null && divisor >= cycleLeaseStart) if (cycleValues is not null && divisor >= cycleLeaseStart)
{ {
ulong offset = divisor - cycleLeaseStart; ulong offset = divisor - cycleLeaseStart;
if (offset < (ulong)cycleValues.Length) if (offset < (ulong)cycleValues.Length)
{ {
divisorCycle = cycleValues[(int)offset]; divisorCycle = cycleValues[(int)offset];
} }
else else
{ {
divisorCycle = cycleLease.GetCycle(divisor); divisorCycle = cycleLease.GetCycle(divisor);
} }
} }
else else
{ {
divisorCycle = cycleLease.GetCycle(divisor); divisorCycle = cycleLease.GetCycle(divisor);
} }
} }
else else
{ {
divisorCycle = 0UL; divisorCycle = 0UL;
} }
// Can we prepare as many buffers as many threads were requested upfront and have them prepared in separate task, so that they're always ready when needed? // Can we prepare as many buffers as many threads were requested upfront and have them prepared in separate task, so that they're always ready when needed?
activeCount = BuildPrimeBuffer(divisor, primeValues, allowedMaxValues, stateFlags, primeBuffer, indexBuffer, completionsBuffer, ref completionsCount, ref remainingStates, activeStateMask, ref activeStartIndex); activeCount = BuildPrimeBuffer(divisor, primeValues, allowedMaxValues, stateFlags, primeBuffer, indexBuffer, completionsBuffer, ref completionsCount, ref remainingStates, activeStateMask, ref activeStartIndex);
if (completionsCount > 0) if (completionsCount > 0)
{ {
@@ -999,9 +999,9 @@ internal static class Program
continue; continue;
} }
hitsSpan = hitsBuffer.AsSpan(0, activeCount); hitsSpan = hitsBuffer.AsSpan(0, activeCount);
hitsSpan.Clear(); hitsSpan.Clear();
session.CheckDivisor(divisor, divisorCycle, primeBuffer.AsSpan(0, activeCount), hitsSpan); session.CheckDivisor(divisor, divisorCycle, primeBuffer.AsSpan(0, activeCount), hitsSpan);
for (hitIndex = 0; hitIndex < activeCount; hitIndex++) for (hitIndex = 0; hitIndex < activeCount; hitIndex++)
{ {
@@ -1039,15 +1039,15 @@ internal static class Program
{ {
FlushPendingResults(compositesBuffer, ref compositesCount); FlushPendingResults(compositesBuffer, ref compositesCount);
} }
} }
finally finally
{ {
cycleLease.Dispose(); cycleLease.Dispose();
ArrayPool<PendingResult>.Shared.Return(compositesBuffer, clearArray: true); ArrayPool<PendingResult>.Shared.Return(compositesBuffer, clearArray: true);
ArrayPool<PendingResult>.Shared.Return(completionsBuffer, clearArray: true); ArrayPool<PendingResult>.Shared.Return(completionsBuffer, clearArray: true);
ArrayPool<int>.Shared.Return(indexBuffer, clearArray: true); ArrayPool<int>.Shared.Return(indexBuffer, clearArray: true);
ArrayPool<ulong>.Shared.Return(primeBuffer, clearArray: true); ArrayPool<ulong>.Shared.Return(primeBuffer, clearArray: true);
ArrayPool<byte>.Shared.Return(hitsBuffer, clearArray: true); ArrayPool<byte>.Shared.Return(hitsBuffer, clearArray: true);
} }
}); });
} }