diff options
| -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)) +    ] +  ] | 
