fibon-0.2.0: tools/fibon-run/Fibon/Run/Config.hs
module Fibon.Run.Config (
Fibon.ConfigMonad.append
, Fibon.ConfigMonad.setTimeout
, Fibon.ConfigMonad.done
, Fibon.ConfigMonad.collectExtraStatsFrom
, Fibon.ConfigMonad.noExtraStats
, Fibon.ConfigMonad.useGhcDir
, Fibon.ConfigMonad.useGhcInPlaceDir
, Fibon.ConfigMonad.getEnv
, Fibon.Timeout.Timeout(..)
, Fibon.ConfigMonad.FlagParameter(..)
, Fibon.ConfigMonad.Configuration
, Fibon.ConfigMonad.ConfigState(..)
, Fibon.Benchmarks.FibonGroup(..)
, Fibon.Benchmarks.FibonBenchmark(..)
, Fibon.Benchmarks.allBenchmarks
, Fibon.InputSize.InputSize(..)
, RunConfig(..)
, TuneSetting(..)
, TuneSelection(..)
, BenchmarkRunSelection(..)
, BenchmarkConfigSelection(..)
, ConfigBuilder
, ConfigId
, mkConfig
)
where
import Fibon.Benchmarks
import Fibon.BenchmarkInstance
import Fibon.InputSize
import Fibon.ConfigMonad
import Fibon.Timeout
data RunConfig = RunConfig {
configId :: ConfigId
, sizeList :: [InputSize]
, tuneList :: [TuneSetting]
, runList :: [BenchmarkRunSelection]
, iterations :: Int
, configBuilder :: ConfigBuilder
}
type ConfigId = String
type ConfigBuilder = TuneSelection -> BenchmarkConfigSelection -> ConfigMonad
data TuneSetting =
Base
| Peak
deriving(Eq, Read, Show, Ord, Enum)
data TuneSelection =
ConfigTune TuneSetting
| ConfigTuneDefault
deriving(Show, Eq, Ord)
data BenchmarkRunSelection =
RunGroup FibonGroup
| RunSingle FibonBenchmark
deriving(Show, Eq, Ord)
data BenchmarkConfigSelection =
ConfigBenchGroup FibonGroup
| ConfigBench FibonBenchmark
| ConfigBenchDefault
deriving(Show, Eq, Ord)
mkConfig :: RunConfig
-> FibonBenchmark
-> InputSize
-> TuneSetting
-> [(String, String)]
-> Configuration
mkConfig rc bm size tune env = runWithInitialFlags benchFlags env configM
where
configM = mapM_ (uncurry builder) [
(ConfigTuneDefault, ConfigBenchDefault)
, (ConfigTune tune , ConfigBenchDefault)
, (ConfigTuneDefault, ConfigBenchGroup group)
, (ConfigTune tune , ConfigBenchGroup group)
, (ConfigTuneDefault, ConfigBench bm)
, (ConfigTune tune , ConfigBench bm)
]
builder = configBuilder rc
group = benchGroup bm
benchFlags = flagConfig $ benchInstance bm size