GPU calculations frequency adjusted

This commit is contained in:
mlemanczyk committed 2025-11-19 21:38:07 +01:00
1 parent 5cac51479e
commit 54fdff0a4e
2 files changed
+10 -9

No files matched your search

@@ -8,6 +8,7 @@ public static class PerfectNumberConstants
public const int DefaultSmallPrimeFactorSlotCount = 64; public const int DefaultSmallPrimeFactorSlotCount = 64;
public const int DefaultSpecialMaxFactorCapacity = 1024; public const int DefaultSpecialMaxFactorCapacity = 1024;
public const ulong ExtraDivisorCycleSearchLimit = 64UL; public const ulong ExtraDivisorCycleSearchLimit = 64UL;
public const int GpuFrequency = 768 - 1;
public const int MaxQForDivisorCycles = 4_000_000; public const int MaxQForDivisorCycles = 4_000_000;
public static readonly uint PrimesLimit = 1_000_000; //(ulong)Array.MaxLength;// 1_000_000; public static readonly uint PrimesLimit = 1_000_000; //(ulong)Array.MaxLength;// 1_000_000;
public const int MaxOddPowersCount = 128; public const int MaxOddPowersCount = 128;
@@ -1177,7 +1177,7 @@ internal static partial class PrimeOrderCalculator
// bool isPrime = HeuristicCombinedPrimeTester.IsPrimeGpu(gpu, composite); // bool isPrime = HeuristicCombinedPrimeTester.IsPrimeGpu(gpu, composite);
bool runOnGpu = RunOnGpu(); bool runOnGpu = RunOnGpu();
bool isPrime = runOnGpu ? PrimeTester.IsPrime(composite) : HeuristicCombinedPrimeTester.IsPrimeGpu(gpu, composite); bool isPrime = !runOnGpu ? PrimeTester.IsPrime(composite) : HeuristicCombinedPrimeTester.IsPrimeGpu(gpu, composite);
// bool isPrime = PrimeTester.IsPrime(composite); // bool isPrime = PrimeTester.IsPrime(composite);
// bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(composite); // bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(composite);
@@ -1375,19 +1375,19 @@ internal static partial class PrimeOrderCalculator
private static bool RunOnGpu() private static bool RunOnGpu()
{ {
const int GpuFrequency = 1024 - 1; // return true;
int cpuCount = Atomic.Add(ref _cpuCount, 1);
int cpuCount = Atomic.Add(target: ref _cpuCount, 1); // return (cpuCount % GpuFrequency) == 0;
if (cpuCount == GpuFrequency) if (cpuCount == PerfectNumberConstants.GpuFrequency)
{ {
Atomic.Add(ref _cpuCount, -GpuFrequency); Atomic.Add(ref _cpuCount, -PerfectNumberConstants.GpuFrequency);
} }
else if (cpuCount > GpuFrequency) else if (cpuCount > PerfectNumberConstants.GpuFrequency)
{ {
cpuCount -= GpuFrequency; cpuCount -= PerfectNumberConstants.GpuFrequency;
} }
return cpuCount != GpuFrequency; return cpuCount == PerfectNumberConstants.GpuFrequency;
} }
private static void PopulateSmallPrimeFactorsCpu( private static void PopulateSmallPrimeFactorsCpu(