diff options
author | Tom Smeding <tom@tomsmeding.com> | 2025-03-25 16:26:56 +0100 |
---|---|---|
committer | Tom Smeding <tom@tomsmeding.com> | 2025-03-25 16:26:56 +0100 |
commit | 388df7878914666b43059f94ea9665f44937cf3c (patch) | |
tree | 924afb4b7902ef79b67b13e27c943c03cc62750a | |
parent | 8c57b0219042b91bfa4a20f9f01df3b7247a1c39 (diff) |
bench: Move comparison benchmarks to separate function
-rw-r--r-- | bench/Main.hs | 212 |
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)) + ] + ] |