packages feed

static-tensor-0.1.0.0: bench/MatMul.hs

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))