packages feed

accelerate-examples-1.0.0.0: examples/pagerank/Config.hs

{-# LANGUAGE TemplateHaskell #-}

module Config where

import Data.Label
import System.Console.GetOpt


data Config = Config
  {
    _configSteps        :: Int
  , _configChunkSize    :: Int
  , _configCount        :: Bool
  , _configNoSeq        :: Bool
  }
  deriving Show

$(mkLabels [''Config])

defaults :: Config
defaults = Config
  { _configSteps        = 10
  , _configChunkSize    = 12000000
  , _configCount        = False
  , _configNoSeq        = True
  }


options :: [OptDescr (Config -> Config)]
options =
  [ Option []   ["steps"]       (ReqArg (set configSteps . read) "INT")     "number of steps to perform"
  , Option []   ["chunk-size"]  (ReqArg (set configChunkSize . read) "INT") "size of chunks to be processed"
  , Option []   ["count"]       (NoArg  (set configCount True))             "count number of pages in the links file"
  , Option []   ["noseq"]       (NoArg  (set configNoSeq True))                "do not use Accelerate sequencing"
  ]


header :: [String]
header =
  [ "accelerate-pagerank (c) [2011..2013] The Accelerate Team"
  , ""
  , "Usage: accelerate-pagerank [OPTIONS] <LINKS_FILE> <TITLES_FILE> [+RTS -M<HEAP_SIZE>]"
  , ""
  , "  NOTE: The -M flag sets the Haskell heap size. If high performance is"
  , "        desired, then this value, as well as the chunk size, will need to"
  , "        be adjusted. The idea being to maximise the chunk size without"
  , "        running out of device memory. With experimentation, you can arrive"
  , "        at a heap size that will force garbage collection before device"
  , "        memory runs out."
  , ""
  ]

footer :: [String]
footer = [ "" ]