Add cycle cache hit tracking instrumentation
This commit is contained in:
1 parent
1a4818c794
commit
8acccce471
4 files changed
+50
-93
No files matched your search
@@ -12,12 +12,6 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
|
||||
private ulong _lastStatusDivisor;
|
||||
private int _batchSize = 1_024;
|
||||
|
||||
private const int FactorCachePrimeTrackingLimit = 500_000;
|
||||
private static readonly HashSet<ulong> FactorCacheTrackedPrimes = new();
|
||||
private static readonly object FactorCachePrimeLock = new();
|
||||
private static ulong FactorCachePrimeHitCount;
|
||||
private static bool FactorCachePrimeTrackingDisabled;
|
||||
|
||||
[ThreadStatic]
|
||||
private static GpuUInt128WorkSet _divisorScanGpuWorkSet;
|
||||
|
||||
@@ -122,8 +116,6 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
|
||||
processedCount = 0UL;
|
||||
processedAll = false;
|
||||
|
||||
ObserveFactorCachePrime(prime);
|
||||
|
||||
// The EvenPerfectBitScanner feeds primes >= 138,000,000 here, so allowedMax >= 3 in production runs.
|
||||
// Keeping the guard commented out documents the reasoning for benchmarks and tests.
|
||||
// if (allowedMax < 3UL)
|
||||
@@ -263,43 +255,6 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void ObserveFactorCachePrime(ulong prime)
|
||||
{
|
||||
bool logHit = false;
|
||||
ulong hitNumber = 0UL;
|
||||
bool trackingDisabledNow = false;
|
||||
|
||||
lock (FactorCachePrimeLock)
|
||||
{
|
||||
if (FactorCachePrimeTrackingDisabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!FactorCacheTrackedPrimes.Add(prime))
|
||||
{
|
||||
FactorCachePrimeHitCount++;
|
||||
hitNumber = FactorCachePrimeHitCount;
|
||||
logHit = true;
|
||||
}
|
||||
else if (FactorCacheTrackedPrimes.Count >= FactorCachePrimeTrackingLimit)
|
||||
{
|
||||
FactorCachePrimeTrackingDisabled = true;
|
||||
FactorCacheTrackedPrimes.Clear();
|
||||
trackingDisabledNow = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (logHit)
|
||||
{
|
||||
Console.WriteLine($"Factor cache hit for exponent {prime} ({hitNumber})");
|
||||
}
|
||||
else if (trackingDisabledNow)
|
||||
{
|
||||
Console.WriteLine("Factor cache hit tracking disabled after exceeding the tracking limit.");
|
||||
}
|
||||
}
|
||||
|
||||
private static byte CheckDivisor(ulong prime, ulong divisorCycle, in MontgomeryDivisorData divisorData)
|
||||
{
|
||||
ulong residue = prime.Pow2MontgomeryModWithCycleCpu(divisorCycle, divisorData);
|
||||
|
||||
Reference in new issue
Block a user