BitContradiction filtering changes to cut invalid divisors during checks.
This commit is contained in:
1 parent
b31aab4d89
commit
f1eaab8582
19 files changed
+3912
-2361
No files matched your search
@@ -4,18 +4,21 @@ using PerfectNumbers.Core.Gpu;
|
||||
|
||||
namespace PerfectNumbers.Core;
|
||||
|
||||
#pragma warning disable CA2211 // The fields are settable on purpose for the best performance
|
||||
#pragma warning disable CA2211 // Non-constant fields should not be visible
|
||||
|
||||
public static class EnvironmentConfiguration
|
||||
{
|
||||
public static ulong DivisorLimit = ulong.MaxValue;
|
||||
public static int GpuBatchSize = GpuConstants.ScanBatchSize;
|
||||
public static int GpuPrimeThreads = 1;
|
||||
public static int GpuRatio = PerfectNumberConstants.GpuRatio;
|
||||
public static ComputationDevice MersenneDevice = ComputationDevice.Cpu;
|
||||
public static BigInteger MinK = BigInteger.One;
|
||||
public static ComputationDevice OrderDevice = ComputationDevice.Cpu;
|
||||
public static int RollingAccelerators = PerfectNumberConstants.RollingAccelerators;
|
||||
public static string? StateFilePath;
|
||||
public static int ThreadCount;
|
||||
public static bool UseGpu;
|
||||
public static bool UseGpuOrder;
|
||||
public static bool UseHybridOrder;
|
||||
public static bool UseCpuOrder;
|
||||
@@ -24,6 +27,7 @@ public static class EnvironmentConfiguration
|
||||
public static ByDivisor.ByDivisorClassModel? ByDivisorClassModel;
|
||||
public static ByDivisor.ByDivisorScanTuning ByDivisorScanTuning = ByDivisor.ByDivisorScanTuning.Default;
|
||||
public static double ByDivisorCheapKLimit = 10_000d;
|
||||
public static ByDivisorKIncrementMode ByDivisorKIncrementMode = ByDivisorKIncrementMode.Sequential;
|
||||
public static Persistence.ByDivisorClassModelRepository? ByDivisorClassModelRepository;
|
||||
public static Persistence.KStateRepository? ByDivisorKStateRepository;
|
||||
public static Persistence.KStateRepository? ByDivisorCheapKStateRepository;
|
||||
@@ -31,13 +35,31 @@ public static class EnvironmentConfiguration
|
||||
public static Persistence.KStateRepository? ByDivisorGroupsStateRepository;
|
||||
public static Persistence.Pow2Minus1StateRepository? ByDivisorPow2Minus1Repository;
|
||||
public static Persistence.BitContradictionStateRepository? BitContradictionStateRepository;
|
||||
public static CalculationMethod CalculationMethod = CalculationMethod.Residue;
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
|
||||
public static void Initialize()
|
||||
{
|
||||
if (MersenneDevice == ComputationDevice.Gpu &&
|
||||
ByDivisorKIncrementMode == ByDivisorKIncrementMode.BitContradiction)
|
||||
{
|
||||
OrderDevice = ComputationDevice.Gpu;
|
||||
}
|
||||
|
||||
UseGpuOrder = OrderDevice == ComputationDevice.Gpu;
|
||||
UseHybridOrder = OrderDevice == ComputationDevice.Hybrid;
|
||||
UseCpuOrder = OrderDevice == ComputationDevice.Cpu;
|
||||
|
||||
UseGpu =
|
||||
UseGpuOrder || UseHybridOrder ||
|
||||
MersenneDevice is ComputationDevice.Hybrid or ComputationDevice.Gpu;
|
||||
|
||||
RollingAccelerators = UseGpu
|
||||
? Math.Min(Math.Min(
|
||||
PerfectNumberConstants.RollingAccelerators, GpuPrimeThreads), ThreadCount)
|
||||
: 0;
|
||||
|
||||
UsePow2GroupDivisors = ByDivisorKIncrementMode == ByDivisorKIncrementMode.Pow2Groups;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user