From e8cca74f685bb9641b3478be93e40dc952aaa8e9 Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Sat, 13 Dec 2025 16:00:28 +0100 Subject: [PATCH] DeeterministicRandom types optimized. --- .../Cpu/DeterministicRandomCpu.cs | 7 +------ .../Gpu/DeterministicRandomGpu.cs | 20 ++++++------------- .../MersenneNumberDivisorByDivisorTester.cs | 2 ++ 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/PerfectNumbers.Core/Cpu/DeterministicRandomCpu.cs b/PerfectNumbers.Core/Cpu/DeterministicRandomCpu.cs index 084d199..61c7b02 100644 --- a/PerfectNumbers.Core/Cpu/DeterministicRandomCpu.cs +++ b/PerfectNumbers.Core/Cpu/DeterministicRandomCpu.cs @@ -13,11 +13,6 @@ internal static class DeterministicRandomCpu public static ulong NextUInt64() { ulong state = s_threadState; - if (state == 0UL) - { - state = InitializeThreadState(); - } - state ^= state >> 12; state ^= state << 25; state ^= state >> 27; @@ -34,7 +29,7 @@ internal static class DeterministicRandomCpu } [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - private static ulong InitializeThreadState() + public static ulong Initialize() { ulong seed = (ulong)Interlocked.Increment(ref s_seedCounter); seed += 0x9E3779B97F4A7C15UL; diff --git a/PerfectNumbers.Core/Gpu/DeterministicRandomGpu.cs b/PerfectNumbers.Core/Gpu/DeterministicRandomGpu.cs index 996ba67..860b15a 100644 --- a/PerfectNumbers.Core/Gpu/DeterministicRandomGpu.cs +++ b/PerfectNumbers.Core/Gpu/DeterministicRandomGpu.cs @@ -14,33 +14,25 @@ internal struct DeterministicRandomGpu { private static long s_seedCounter; - private ulong _state; - public readonly ulong State - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - get - { - return _state; - } - } + public ulong State; public DeterministicRandomGpu() { - _state = CreateThreadState(); + State = CreateThreadState(); } public DeterministicRandomGpu(ulong initialState) { - _state = initialState; + State = initialState; } public ulong NextUInt64() { - ulong state = _state; + ulong state = State; state ^= state >> 12; state ^= state << 25; state ^= state >> 27; - _state = state; + State = state; return state * 2685821657736338717UL; } @@ -55,7 +47,7 @@ internal struct DeterministicRandomGpu public void SetState(ulong state) { - _state = state; + State = state; } private static ulong CreateThreadState() diff --git a/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs b/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs index 8e505be..fa2cbce 100644 --- a/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs +++ b/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs @@ -324,6 +324,7 @@ public static class MersenneNumberDivisorByDivisorTester if (workerCount == 1) { + DeterministicRandomCpu.Initialize(); var gpu = PrimeOrderCalculatorAccelerator.Rent(1); foreach (ulong prime in filteredPrimes) { @@ -360,6 +361,7 @@ public static class MersenneNumberDivisorByDivisorTester tasks[taskIndex++] = Task.Factory.StartNew( () => { + DeterministicRandomCpu.Initialize(); startGate.Wait(); GpuPrimeWorkLimiter.Acquire(); Console.WriteLine($"Task started for range {rangeStart}");