hsbencher: Flexible benchmark runner for Haskell and non-Haskell benchmarks.
This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.
Warnings:
- Exposed modules use unallocated top-level names: HSBencher
Benchmark frameworks are usually very specific to the host language/environment. Hence they are usually about as reusable as compiler passes (that is, not).
Nevertheless, hsbencher
is an attempt at a reusable benchmark
framework. It knows fairly little about what the benchmarks do, and
is mostly concerned with defining and iterating through
configuration spaces (e.g. varying the number of threads), and
managing the data that results.
Benchmark data is stored in simple text files, and optionally uploaded to Google Fusion Tables.
hsbencher
attempts to stradle the divide between language-specific
and language-agnostic by having an extensible set of BuildMethod
s.
As shipped, hsbencher
knows a little about cabal, ghc, and less
about Make, but it can be taught more.
The general philosophy is to have benchmarks follow a simple protocol, for example printing out a line "SELFTIMED: 3.3s" if they wish to report their own timing. The focus is on benchmarks that run long enough to run in their own process. This is typical of parallelism benchmarks and different than the fine grained benchmarks that are well supported by Criterion.
hsbencher
is used by creating a script or executable that imports HSBencher
and provides a list of benchmarks, each of which is decorated with its
parameter space. Below is a minimal example that creates a two-configuration
parameter space:
import HSBencher main = defaultMainWithBechmarks . [ Benchmark "bench1/bench1.cabal" ["1000"] $ . Or [ Set NoMeaning (RuntimeParam "+RTS -qa -RTS") . , Set NoMeaning (RuntimeEnv "HELLO" "yes") ] ]
The output would appear as in this gist: https://gist.github.com/rrnewton/5667800
More examples can be found here: https://github.com/rrnewton/HSBencher/tree/master/example
ChangesLog:
(1.3.8) Added
--skipto
and--runid
arguments(1.3.4) Added ability to prune benchmarks with patterns on command line.
(1.4.2) Breaking changes, don't use Benchmark constructor directly. Use mkBenchmark.
[Skip to Readme]
Properties
Versions | 1.0, 1.1, 1.1.0.1, 1.1.0.2, 1.2, 1.3.1, 1.3.4, 1.3.6, 1.3.8, 1.3.9, 1.4.2, 1.5.1, 1.5.3, 1.5.3.1, 1.8.0.4, 1.12, 1.14, 1.14.1, 1.20, 1.20.0.1, 1.20.0.2, 1.20.0.3, 1.20.0.5 |
---|---|
Change log | None available |
Dependencies | async, base (>=4.5 && <=4.7), bytestring, containers, directory, filepath, GenericPretty (>=1.2), handa-gdata (>=0.6.2), http-conduit, hydra-print (>=0.1.0.3), io-streams (>=1.1), mtl, process, random, time, unix [details] |
License | BSD-3-Clause |
Copyright | (c) Ryan Newton 2013 |
Author | Ryan Newton |
Maintainer | rrnewton@gmail.com |
Category | Development |
Uploaded | by RyanNewton at 2013-11-19T04:42:53Z |
Modules
- HSBencher
- HSBencher.App
- HSBencher.Config
- HSBencher.Fusion
- HSBencher.Logging
- HSBencher.MeasureProcess
- HSBencher.Methods
- HSBencher.Types
- HSBencher.Utils
Flags
Automatic Flags
Name | Description | Default |
---|---|---|
fusion | Add support for Google Fusion Table upload of benchmark data. | Enabled |
hydra | Add support for (and dependency on) the hydra-print library. | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- hsbencher-1.4.2.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
Package maintainers
For package maintainers and hackage trustees