Readme for fibon-0.1.0

Fibon in a Flash =================================================================== $ git clone git://github.com/dmpots/fibon.git $ cd fibon $ git submodule update --init benchmarks $ cabal configure && cabal build $ ./dist/build/fibon-run/fibon-run Introduction =================================================================== Fibon is a set of tools for running and analysing benchmarks in Haskell. Most importantly, it includes a set of default benchmarks taken from the [Hackage][1] open source repository. Benchmarks ------------------ Fibon makes it easy to use either the fibon benchmarks or your own set of benchmarks. Benchmarks are stored in the `benchmarks/Fibon/Benchmarks` directory. This directory is setup as a [git submodule][2] which means you can easily grab the standard suite or use a suite kept under your own source control. Benchmark Groups ------------------ Benchamarks named and organized into groups based on the filesystem organization. For example, a benchmark in the directory `benchmarks/Fibon/Benchmarks/Hackage/Agum` will have the name `Agum` an be in the benchmark group `Hackage`. Executables ------------------ The fibon package builds three tools 1. `fibon-run` - runs the benchmarks 2. `fibon-analyze` - analyzes the results of a run 2. `fibon-init` - utilty used when adding new benchmarks Size and Tune ------------------ Fibon benchmarks can be run with two different input sizes: `Test` and `Ref`. The `Test` size is useful to make sure that a benchmark can run successsfully, but will not give meaningful timings. Fibon benchmarks can be run under two different tune settings (e.g. compiler optimization settings). The `Base` and `Peak` settings can be configured anyway you want to make the desired comparison. Directory Structure -------------------- Source directories ./benchmarks -- benchmark code ./config -- config files ./lib -- common files used by several executables ./tools -- source code for executables Working directories ./log -- logging output from benchmark runs ./run -- working directory for benchmark runs Getting the Benchmarks =================================================================== The benchmarks are kept in a separate repository as a [git submodule][2]. You can get the fibon benchmarks by updating the submodule from within your fibon working directory $ git submodule update --init benchmarks This will checkout the benchmarks from the fibon-benchmarks repository and place them in your working copy. Running Benchmarks =================================================================== The available benchmarks and configurations are discovered when the fibon package is configured. Benchmarks are searched for in the `benchmarks/Fibon/Benchmarks` directory and configuration files are searched for in the `config` directory. If a configuration file or benchmark is added, you will need to re-run `cabal configure` to make them available to the fibon-run tool. Configuration --------------- Fibon comes with a default configuration. The default configuration will run all benchmarks with the `Base` setting of `-O0` and a `Peak` setting of `-O2` on the `Ref` size. A configuration file can be used to specify more complicated configurations. You can get some example configuration by doing $ git submodule update --init config This will checkout a repository of config files. Note that currently these files contain some user and machine-specific configurations, but should be a useful starting point. You can also selectively run benchmarks, groups, sizes, and tune settings as described below. Running --------------- Benchamarks are run with the `fibon-run` tool. Running `fibon-run` with no arguments will use the default config file. An alternate config file can be specified with the `-c` flag. Also, you can give a list of benchmarks or groups to run on the command line. Use `--help` to see a full list of options. Running the benchmarks will produce some logging to standard out and create four output files in the `log` directory. 1. `*.LOG` - the full log of the run 1. `*.SUMMARY` - the mean runtimes of each benchmark 1. `*.RESULTS` - the full results (passed to `fibon-analyse`) Analyzing Benchmark Results =================================================================== Benchmarks can be analyzed by the `fibon-analyse` tool. $ fibon-analyse log/000.default.RESULTS Adding New Benchmarks =================================================================== TODO Benchmark Notes =================================================================== Ghc610 ChameneosRedux Does not work with -O0. Gets "thread blocked indefinitely" exception Mandelbrot The Test size gives different result, but the Ref size is ok. Think it is just some kind of floating point wibbles. [1]: http://hackage.haskell.org [2]: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#submodules