{-# LANGUAGE CPP #-}
module Data.Array.Accelerate.Examples.Internal.Criterion (
runBenchmarks,
nf, whnf, nfIO, whnfIO,
Benchmark, env, bench, bgroup,
) where
import Data.Array.Accelerate.Examples.Internal.Report
import Data.Array.Accelerate.Examples.Internal.ParseArgs
import Data.Array.Accelerate.Examples.Internal.Criterion.Config
import Data.Label
import Control.Monad
import System.IO
import System.Directory
import System.Environment
import Criterion.IO
import Criterion.Main
runBenchmarks :: Options -> [String] -> [Benchmark] -> IO ()
runBenchmarks opt argv benchmarks
= when (get optBenchmark opt)
$ withArgs argv
$ do
let crit = get optCriterion opt
rawFile <- case get rawDataFile crit of
Just f -> return f
Nothing -> do
tmp <- getTemporaryDirectory
(f,h) <- openBinaryTempFile tmp "accelerate-examples.dat"
hClose h
removeFile f
return f
defaultMainWith (set rawDataFile (Just rawFile) crit) benchmarks
reports <- do
exists <- doesFileExist rawFile
if exists
then either fail return =<< do
#if MIN_VERSION_criterion(1,1,1)
rs <- readRecords rawFile
#else
rs <- readReports rawFile
#endif
case get rawDataFile crit of
Nothing -> removeFile rawFile >> return rs
Just _ -> return rs
else return []
processReports opt reports