Tester made static to better mimic production code.

This commit is contained in:
mlemanczyk committed 2025-10-28 20:48:35 +01:00
1 parent d149700311
commit ca8ab2bcf8
1 file changed
+8 -11
@@ -12,8 +12,7 @@ namespace EvenPerfectBitScanner.Benchmarks;
[MemoryDiagnoser] [MemoryDiagnoser]
public class PrimeTesterBenchmarks public class PrimeTesterBenchmarks
{ {
private HeuristicPrimeTester _cpuTester = null!; private static readonly HeuristicPrimeTester _heuristicTester = new();
private HeuristicPrimeTester _gpuTester = null!;
private ulong[] _candidates = []; private ulong[] _candidates = [];
[ParamsSource(nameof(GetBenchmarkCases))] [ParamsSource(nameof(GetBenchmarkCases))]
@@ -22,8 +21,6 @@ public class PrimeTesterBenchmarks
[GlobalSetup] [GlobalSetup]
public void GlobalSetup() public void GlobalSetup()
{ {
_cpuTester = new HeuristicPrimeTester();
_gpuTester = new HeuristicPrimeTester();
_candidates = BenchmarkCase.Candidates; _candidates = BenchmarkCase.Candidates;
if (_candidates.Length == 0) if (_candidates.Length == 0)
@@ -32,15 +29,15 @@ public class PrimeTesterBenchmarks
} }
CancellationToken cancellationToken = CancellationToken.None; CancellationToken cancellationToken = CancellationToken.None;
_cpuTester.IsPrimeCpu(_candidates[0], cancellationToken); _ = _heuristicTester.IsPrimeCpu(_candidates[0], cancellationToken);
_gpuTester.IsPrimeGpu(_candidates[0]); _ = _heuristicTester.IsPrimeGpu(_candidates[0]);
_ = Prime.Numbers.IsPrime(_candidates[0]); _ = Prime.Numbers.IsPrime(_candidates[0]);
} }
[Benchmark(Baseline = true)] [Benchmark(Baseline = true)]
public int HeuristicCpu() public int HeuristicCpu()
{ {
HeuristicPrimeTester tester = _cpuTester; HeuristicPrimeTester tester = _heuristicTester;
ulong[] values = _candidates; ulong[] values = _candidates;
CancellationToken cancellationToken = CancellationToken.None; CancellationToken cancellationToken = CancellationToken.None;
int primeCount = 0; int primeCount = 0;
@@ -59,9 +56,8 @@ public class PrimeTesterBenchmarks
[Benchmark] [Benchmark]
public int HeuristicGpu() public int HeuristicGpu()
{ {
HeuristicPrimeTester tester = _gpuTester; HeuristicPrimeTester tester = _heuristicTester;
ulong[] values = _candidates; ulong[] values = _candidates;
CancellationToken cancellationToken = CancellationToken.None;
int primeCount = 0; int primeCount = 0;
for (int i = 0; i < values.Length; i++) for (int i = 0; i < values.Length; i++)
@@ -75,10 +71,12 @@ public class PrimeTesterBenchmarks
return primeCount; return primeCount;
} }
private static readonly PrimeTester _nonHeuristicTester = new();
[Benchmark] [Benchmark]
public int NonHeuristicGpu() public int NonHeuristicGpu()
{ {
PrimeTester tester = PrimeTester.Exclusive; PrimeTester tester = _nonHeuristicTester;
ulong[] values = _candidates; ulong[] values = _candidates;
CancellationToken cancellationToken = CancellationToken.None; CancellationToken cancellationToken = CancellationToken.None;
int primeCount = 0; int primeCount = 0;
@@ -97,7 +95,6 @@ public class PrimeTesterBenchmarks
[Benchmark] [Benchmark]
public int NonHeuristicCpu() public int NonHeuristicCpu()
{ {
// PrimeTester tester = _gpuTester;
ulong[] values = _candidates; ulong[] values = _candidates;
CancellationToken cancellationToken = CancellationToken.None; CancellationToken cancellationToken = CancellationToken.None;
int primeCount = 0; int primeCount = 0;