module Main where import Criterion.Main import Control.Monad import System.Random.MWC import qualified MatMul.Tensor as T import qualified MatMul.Linear as L import qualified MatMul.Unrolled as U import qualified MatMul.UnrolledFull as F import qualified MatMul.Vector as V import qualified MatMul.Vector4 as V4 main :: IO () main = do gen <- create es1 <- mkElems gen es2 <- mkElems gen defaultMain [ bgroup "matrix mult 4x4" [ bench "tensor" $ nf ( T.mult ( T.mkMat es1)) ( T.mkMat es2) , bench "linear" $ nf ( L.mult ( L.mkMat es1)) ( L.mkMat es2) , bench "unrolled" $ nf ( U.mult ( U.mkMat es1)) ( U.mkMat es2) , bench "unrolledFull" $ nf ( F.mult ( F.mkMat es1)) ( F.mkMat es2) , bench "vector" $ nf ( V.mult ( V.mkMat es1)) ( V.mkMat es2) , bench "vector4" $ nf (V4.mult (V4.mkMat es1)) (V4.mkMat es2) ] ] where mkElems gen = replicateM 16 (fmap (\x -> x - (2 :: Float) ^^ (-33 :: Int)) (uniform gen :: IO Float))