ベンチマーク
+RTS -s
とりあえず実行時間を計りたい場合は、少なくともtimeコマンドよりもこちらのほうが有用。
criterion
ベンチマークの定番ライブラリ。
code:haskell
import Criterion.Main
main :: IO ()
main = defaultMain
piに対するshow関数をベンチマークする例。実行すると、結果の平均、標準偏差などが表示されるほか、CSVやJSON形式の出力も可能(--help参照、TBD)
cabalファイルには以下のように記述する。
code:benchmark.cabal
benchmark mybench
type: exitcode-stdio-1.0
main-is: bench.hs
hs-source-dirs: benchmarks
build-depends: base, criterion, YOUR-PACKAGE
ghc-options: -Wall -threaded -O2
default-language: Haskell2010
cabal v2-run bench:mybench -- とするとベンチマークを実行できる。cabal v2-benchも一応使えるが、オプションは一切指定できない。
gauge
Criterion.MainをGauge.Mainで置き換えるだけで使えるcriterionとほぼ互換性のあるライブラリ。--smallオプションを渡すことで結果を1行で表示でき、SNSなどへのシェアにもうってつけ。
code:text
fibonacci/mason mean 8.257 μs ( +- 596.4 ns )
Rust製のツール。コマンドを直接渡すと、いい感じに複数回実行して平均を算出してくれる。