1
1
-- See CostModelGeneration.md
2
+ {-# OPTIONS_GHC -Wno-deprecations #-}
2
3
module Main (main ) where
3
4
4
5
import CriterionExtensions (BenchmarkingPhase (Continue , Start ), criterionMainWith )
@@ -20,7 +21,7 @@ import Benchmarks.Unit qualified
20
21
21
22
import Criterion.Main
22
23
import Criterion.Types as C
23
- import System.Random (getStdGen )
24
+ import System.Random (RandomGen ( next , split ), StdGen , getStdGen , mkStdGen )
24
25
25
26
---------------- Miscellaneous ----------------
26
27
@@ -42,28 +43,38 @@ import System.Random (getStdGen)
42
43
main :: IO ()
43
44
main = do
44
45
-- We use the initial state of gen repeatedly below, but that doesn't matter.
45
- gen <- System.Random. getStdGen
46
+ genEphemeral <- System.Random. getStdGen
47
+ let seed = extractSeed genEphemeral
48
+ putStrLn $ " Using RNG seed: " ++ show seed
49
+
50
+ let reusedGen = System.Random. mkStdGen seed
46
51
47
52
criterionMainWith
48
53
Start
49
54
defaultConfig $
50
55
Benchmarks.Bitwise. makeBenchmarks
51
- <> Benchmarks.Bool. makeBenchmarks gen
52
- <> Benchmarks.ByteStrings. makeBenchmarks gen
53
- <> Benchmarks.Crypto. makeBenchmarks gen
54
- <> Benchmarks.Data. makeBenchmarks gen
55
- <> Benchmarks.Integers. makeBenchmarks gen
56
- <> Benchmarks.Lists. makeBenchmarks gen
57
- <> Benchmarks.Arrays. makeBenchmarks gen
58
- <> Benchmarks.Misc. makeBenchmarks gen
59
- <> Benchmarks.Pairs. makeBenchmarks gen
60
- <> Benchmarks.Strings. makeBenchmarks gen
61
- <> Benchmarks.Tracing. makeBenchmarks gen
62
- <> Benchmarks.Unit. makeBenchmarks gen
56
+ <> Benchmarks.Bool. makeBenchmarks reusedGen
57
+ <> Benchmarks.ByteStrings. makeBenchmarks reusedGen
58
+ <> Benchmarks.Crypto. makeBenchmarks reusedGen
59
+ <> Benchmarks.Data. makeBenchmarks reusedGen
60
+ <> Benchmarks.Integers. makeBenchmarks reusedGen
61
+ <> Benchmarks.Lists. makeBenchmarks reusedGen
62
+ <> Benchmarks.Arrays. makeBenchmarks reusedGen
63
+ <> Benchmarks.Misc. makeBenchmarks reusedGen
64
+ <> Benchmarks.Pairs. makeBenchmarks reusedGen
65
+ <> Benchmarks.Strings. makeBenchmarks reusedGen
66
+ <> Benchmarks.Tracing. makeBenchmarks reusedGen
67
+ <> Benchmarks.Unit. makeBenchmarks reusedGen
63
68
64
69
{- Run the nop benchmarks with a large time limit (30 seconds) in an attempt to
65
70
get accurate results. -}
66
71
criterionMainWith
67
72
Continue
68
73
(defaultConfig { C. timeLimit = 30 }) $
69
- Benchmarks.Nops. makeBenchmarks gen
74
+ Benchmarks.Nops. makeBenchmarks reusedGen
75
+
76
+ -- Hacky way to get a reproducible seed from StdGen
77
+ extractSeed :: StdGen -> Int
78
+ extractSeed gen =
79
+ let (g1, _) = split gen
80
+ in fst (next g1)
0 commit comments