aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2025-03-25 16:26:56 +0100
committerTom Smeding <tom@tomsmeding.com>2025-03-25 16:26:56 +0100
commit388df7878914666b43059f94ea9665f44937cf3c (patch)
tree924afb4b7902ef79b67b13e27c943c03cc62750a
parent8c57b0219042b91bfa4a20f9f01df3b7247a1c39 (diff)
bench: Move comparison benchmarks to separate function
-rw-r--r--bench/Main.hs212
1 files changed, 97 insertions, 115 deletions
diff --git a/bench/Main.hs b/bench/Main.hs
index 3ab81a8..cf0e929 100644
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -24,126 +24,16 @@ bgroupIf False = \name _ -> bgroup name []
main :: IO ()
-main =
- bracket (Arith.statisticsEnable False)
+main = do
+ let enable = False
+ bracket (Arith.statisticsEnable enable)
(\() -> do Arith.statisticsEnable False
- Arith.statisticsPrintAll)
+ when enable $ Arith.statisticsPrintAll)
(\() -> main_tests)
main_tests :: IO ()
main_tests = defaultMain
- [bgroup "Num"
- [bench "sum(+) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> runScalar (rsumOuter1 (liftRanked2 (mliftPrim2 (+)) a b)))
- (riota @Double n, riota n)
- ,bench "sum(*) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> runScalar (rsumOuter1 (liftRanked2 (mliftPrim2 (*)) a b)))
- (riota @Double n, riota n)
- ,bench "sum(/) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> runScalar (rsumOuter1 (liftRanked2 (mliftPrim2 (/)) a b)))
- (riota @Double n, riota n)
- ,bench "sum(**) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> runScalar (rsumOuter1 (liftRanked2 (mliftPrim2 (**)) a b)))
- (riota @Double n, riota n)
- ,bench "sum(sin) Double [1e6]" $
- let n = 1_000_000
- in nf (\a -> runScalar (rsumOuter1 (liftRanked1 (mliftPrim sin) a)))
- (riota @Double n)
- ,bench "sum Double [1e6]" $
- let n = 1_000_000
- in nf (\a -> runScalar (rsumOuter1 a))
- (riota @Double n)
- ]
- ,bgroup "NumElt"
- [bench "sum(+) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> runScalar (rsumOuter1 (a + b)))
- (riota @Double n, riota n)
- ,bench "sum(*) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> runScalar (rsumOuter1 (a * b)))
- (riota @Double n, riota n)
- ,bench "sum(/) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> runScalar (rsumOuter1 (a / b)))
- (riota @Double n, riota n)
- ,bench "sum(**) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> runScalar (rsumOuter1 (a ** b)))
- (riota @Double n, riota n)
- ,bench "sum(sin) Double [1e6]" $
- let n = 1_000_000
- in nf (\a -> runScalar (rsumOuter1 (sin a)))
- (riota @Double n)
- ,bench "sum Double [1e6]" $
- let n = 1_000_000
- in nf (\a -> runScalar (rsumOuter1 a))
- (riota @Double n)
- ,bench "sum(*) Double [1e6] stride 1; -1" $
- let n = 1_000_000
- in nf (\(a, b) -> runScalar (rsumOuter1 (a * b)))
- (riota @Double n, rrev1 (riota n))
- ,bench "dotprod Float [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> rdot a b)
- (riota @Float n, riota @Float n)
- ,bench "dotprod Float [1e6] stride 1; -1" $
- let n = 1_000_000
- in nf (\(a, b) -> rdot a b)
- (riota @Float n, rrev1 (riota @Float n))
- ,bench "dotprod Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> rdot a b)
- (riota @Double n, riota @Double n)
- ,bench "dotprod Double [1e6] stride 1; -1" $
- let n = 1_000_000
- in nf (\(a, b) -> rdot a b)
- (riota @Double n, rrev1 (riota @Double n))
- ]
- ,bgroup "hmatrix"
- [bench "sum(+) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> LA.sumElements (a + b))
- (LA.linspace @Double n (0.0, fromIntegral (n - 1))
- ,LA.linspace @Double n (0.0, fromIntegral (n - 1)))
- ,bench "sum(*) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> LA.sumElements (a * b))
- (LA.linspace @Double n (0.0, fromIntegral (n - 1))
- ,LA.linspace @Double n (0.0, fromIntegral (n - 1)))
- ,bench "sum(/) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> LA.sumElements (a / b))
- (LA.linspace @Double n (0.0, fromIntegral (n - 1))
- ,LA.linspace @Double n (0.0, fromIntegral (n - 1)))
- ,bench "sum(**) Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> LA.sumElements (a ** b))
- (LA.linspace @Double n (0.0, fromIntegral (n - 1))
- ,LA.linspace @Double n (0.0, fromIntegral (n - 1)))
- ,bench "sum(sin) Double [1e6]" $
- let n = 1_000_000
- in nf (\a -> LA.sumElements (sin a))
- (LA.linspace @Double n (0.0, fromIntegral (n - 1)))
- ,bench "sum Double [1e6]" $
- let n = 1_000_000
- in nf (\a -> LA.sumElements a)
- (LA.linspace @Double n (0.0, fromIntegral (n - 1)))
- ,bench "dotprod Float [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> a LA.<.> b)
- (LA.linspace @Double n (0.0, fromIntegral (n - 1))
- ,LA.linspace @Double n (fromIntegral (n - 1), 0.0))
- ,bench "dotprod Double [1e6]" $
- let n = 1_000_000
- in nf (\(a, b) -> a LA.<.> b)
- (LA.linspace @Double n (0.0, fromIntegral (n - 1))
- ,LA.linspace @Double n (fromIntegral (n - 1), 0.0))
- ]
+ [bgroup "compare" tests_compare
,bgroup "orthotope"
[bench "normalize [1e6]" $
let n = 1_000_000
@@ -200,3 +90,95 @@ main_tests = defaultMain
]
]
]
+
+tests_compare :: [Benchmark]
+tests_compare =
+ let n = 1_000_000 in
+ [bgroup "Num"
+ [bench "sum(+) Double [1e6]" $
+ nf (\(a, b) -> runScalar (rsumOuter1 (liftRanked2 (mliftPrim2 (+)) a b)))
+ (riota @Double n, riota n)
+ ,bench "sum(*) Double [1e6]" $
+ nf (\(a, b) -> runScalar (rsumOuter1 (liftRanked2 (mliftPrim2 (*)) a b)))
+ (riota @Double n, riota n)
+ ,bench "sum(/) Double [1e6]" $
+ nf (\(a, b) -> runScalar (rsumOuter1 (liftRanked2 (mliftPrim2 (/)) a b)))
+ (riota @Double n, riota n)
+ ,bench "sum(**) Double [1e6]" $
+ nf (\(a, b) -> runScalar (rsumOuter1 (liftRanked2 (mliftPrim2 (**)) a b)))
+ (riota @Double n, riota n)
+ ,bench "sum(sin) Double [1e6]" $
+ nf (\a -> runScalar (rsumOuter1 (liftRanked1 (mliftPrim sin) a)))
+ (riota @Double n)
+ ,bench "sum Double [1e6]" $
+ nf (\a -> runScalar (rsumOuter1 a))
+ (riota @Double n)
+ ]
+ ,bgroup "NumElt"
+ [bench "sum(+) Double [1e6]" $
+ nf (\(a, b) -> runScalar (rsumOuter1 (a + b)))
+ (riota @Double n, riota n)
+ ,bench "sum(*) Double [1e6]" $
+ nf (\(a, b) -> runScalar (rsumOuter1 (a * b)))
+ (riota @Double n, riota n)
+ ,bench "sum(/) Double [1e6]" $
+ nf (\(a, b) -> runScalar (rsumOuter1 (a / b)))
+ (riota @Double n, riota n)
+ ,bench "sum(**) Double [1e6]" $
+ nf (\(a, b) -> runScalar (rsumOuter1 (a ** b)))
+ (riota @Double n, riota n)
+ ,bench "sum(sin) Double [1e6]" $
+ nf (\a -> runScalar (rsumOuter1 (sin a)))
+ (riota @Double n)
+ ,bench "sum Double [1e6]" $
+ nf (\a -> runScalar (rsumOuter1 a))
+ (riota @Double n)
+ ,bench "sum(*) Double [1e6] stride 1; -1" $
+ nf (\(a, b) -> runScalar (rsumOuter1 (a * b)))
+ (riota @Double n, rrev1 (riota n))
+ ,bench "dotprod Float [1e6]" $
+ nf (\(a, b) -> rdot a b)
+ (riota @Float n, riota @Float n)
+ ,bench "dotprod Float [1e6] stride 1; -1" $
+ nf (\(a, b) -> rdot a b)
+ (riota @Float n, rrev1 (riota @Float n))
+ ,bench "dotprod Double [1e6]" $
+ nf (\(a, b) -> rdot a b)
+ (riota @Double n, riota @Double n)
+ ,bench "dotprod Double [1e6] stride 1; -1" $
+ nf (\(a, b) -> rdot a b)
+ (riota @Double n, rrev1 (riota @Double n))
+ ]
+ ,bgroup "hmatrix"
+ [bench "sum(+) Double [1e6]" $
+ nf (\(a, b) -> LA.sumElements (a + b))
+ (LA.linspace @Double n (0.0, fromIntegral (n - 1))
+ ,LA.linspace @Double n (0.0, fromIntegral (n - 1)))
+ ,bench "sum(*) Double [1e6]" $
+ nf (\(a, b) -> LA.sumElements (a * b))
+ (LA.linspace @Double n (0.0, fromIntegral (n - 1))
+ ,LA.linspace @Double n (0.0, fromIntegral (n - 1)))
+ ,bench "sum(/) Double [1e6]" $
+ nf (\(a, b) -> LA.sumElements (a / b))
+ (LA.linspace @Double n (0.0, fromIntegral (n - 1))
+ ,LA.linspace @Double n (0.0, fromIntegral (n - 1)))
+ ,bench "sum(**) Double [1e6]" $
+ nf (\(a, b) -> LA.sumElements (a ** b))
+ (LA.linspace @Double n (0.0, fromIntegral (n - 1))
+ ,LA.linspace @Double n (0.0, fromIntegral (n - 1)))
+ ,bench "sum(sin) Double [1e6]" $
+ nf (\a -> LA.sumElements (sin a))
+ (LA.linspace @Double n (0.0, fromIntegral (n - 1)))
+ ,bench "sum Double [1e6]" $
+ nf (\a -> LA.sumElements a)
+ (LA.linspace @Double n (0.0, fromIntegral (n - 1)))
+ ,bench "dotprod Float [1e6]" $
+ nf (\(a, b) -> a LA.<.> b)
+ (LA.linspace @Double n (0.0, fromIntegral (n - 1))
+ ,LA.linspace @Double n (fromIntegral (n - 1), 0.0))
+ ,bench "dotprod Double [1e6]" $
+ nf (\(a, b) -> a LA.<.> b)
+ (LA.linspace @Double n (0.0, fromIntegral (n - 1))
+ ,LA.linspace @Double n (fromIntegral (n - 1), 0.0))
+ ]
+ ]