Reuse heuristic prime order config across runtime
This commit is contained in:
1 parent
d99610098a
commit
e9cff7bfcd
2 files changed
+10
-1
No files matched your search
@@ -10,15 +10,23 @@ internal static partial class PrimeOrderCalculator
|
|||||||
|
|
||||||
internal readonly struct PrimeOrderSearchConfig(uint smallFactorLimit, int pollardRhoMilliseconds, int maxPowChecks, PrimeOrderMode mode)
|
internal readonly struct PrimeOrderSearchConfig(uint smallFactorLimit, int pollardRhoMilliseconds, int maxPowChecks, PrimeOrderMode mode)
|
||||||
{
|
{
|
||||||
|
private static PrimeOrderSearchConfig _heuristicDefault = CreateHeuristicDefault(UnboundedTaskScheduler.ConfiguredThreadCount);
|
||||||
|
|
||||||
public static PrimeOrderSearchConfig HeuristicDefault
|
public static PrimeOrderSearchConfig HeuristicDefault
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return CreateHeuristicDefault(UnboundedTaskScheduler.ConfiguredThreadCount);
|
return _heuristicDefault;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly PrimeOrderSearchConfig StrictDefault = new(smallFactorLimit: 1_000_000, pollardRhoMilliseconds: 0, maxPowChecks: 0, PrimeOrderMode.Strict);
|
public static readonly PrimeOrderSearchConfig StrictDefault = new(smallFactorLimit: 1_000_000, pollardRhoMilliseconds: 0, maxPowChecks: 0, PrimeOrderMode.Strict);
|
||||||
|
|
||||||
|
public static void ConfigureHeuristicDefault(int threadCount)
|
||||||
|
{
|
||||||
|
_heuristicDefault = CreateHeuristicDefault(threadCount);
|
||||||
|
}
|
||||||
|
|
||||||
public static PrimeOrderSearchConfig CreateHeuristicDefault(int threadCount)
|
public static PrimeOrderSearchConfig CreateHeuristicDefault(int threadCount)
|
||||||
{
|
{
|
||||||
int normalizedThreadCount = threadCount < 1 ? 1 : threadCount;
|
int normalizedThreadCount = threadCount < 1 ? 1 : threadCount;
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ public sealed class UnboundedTaskScheduler : TaskScheduler
|
|||||||
lock (InstanceLock)
|
lock (InstanceLock)
|
||||||
{
|
{
|
||||||
Volatile.Write(ref _configuredThreadCount, normalizedThreadCount);
|
Volatile.Write(ref _configuredThreadCount, normalizedThreadCount);
|
||||||
|
PrimeOrderCalculator.PrimeOrderSearchConfig.ConfigureHeuristicDefault(normalizedThreadCount);
|
||||||
|
|
||||||
if (_instance is null)
|
if (_instance is null)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in new issue
Block a user