{-# LANGUAGE CPP #-}
module Main where
import Control.Applicative
import Criterion.Main
import Data.Maybe
import Data.Vector.Unboxed ( Vector )
import Data.Word
import System.Random.MWC
import qualified Data.Vector.Unboxed as U
import Prelude as P
import qualified WideWord
import qualified Accelerate
#if ACCELERATE_LLVM_NATIVE_BACKEND
import qualified Data.Array.Accelerate.LLVM.Native as CPU
#endif
#if ACCELERATE_LLVM_PTX_BACKEND
import qualified Data.Array.Accelerate.LLVM.PTX as PTX
#endif
lIMIT :: Int
lIMIT = 1000000
generateData :: IO (Vector Word64, Vector Word64, Vector Word64, Vector Word64, Vector Int)
generateData =
withSystemRandom . asGenIO $ \gen ->
(,,,,) <$> uniformVector gen lIMIT
<*> uniformVector gen lIMIT
<*> uniformVector gen lIMIT
<*> uniformVector gen lIMIT
<*> U.replicateM lIMIT (uniformR (-64,64) gen)
main :: IO ()
main = do
(xh,xl,yh,yl,ss) <- generateData
defaultMain
[ WideWord.benchmark xh xl yh yl ss
, bgroup "accelerate"
$ catMaybes
[ Nothing
#if ACCELERATE_LLVM_NATIVE_BACKEND
, Just $ Accelerate.benchmark "llvm-cpu" CPU.run1 xh xl yh yl ss
#endif
#if ACCELERATE_LLVM_PTX_BACKEND
, Just $ Accelerate.benchmark "llvm-ptx" PTX.run1 xh xl yh yl ss
#endif
]
]