packages feed

accelerate-bignum-0.1.0.0: bench/Main.hs

{-# 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
      ]
    ]