Microbenchmarking can be used to compare the speed of different approaches to the same operation. Since most code is very fast, to get accurate timing information you must run the operation many times and then divide to get the time per operation.
This library manages the microbenchmarking process: it finds how many iterations of a function are needed to get a good timing estimate per iteration and prints out a human-readable "Your code takes n nanoseconds to run, and can run n times per second".
The only function
microbench takes a function that expects an
integer parameter (which is the quantity you're trying to measure),
and probes the function with increasing parameters until enough time
has elapsed to get a good measurement.
This may be better understood by some example code:
sum1 n = sum [1..n] sum2 n = foldl (+) 0 [1..n] main = do microbench "Sum using sum" sum1 microbench "Sum using foldl" sum2
sum2 are called with varying values of
The output, then, is an estimate of how many integers these
approaches could sum per second.
microbench also accepts a parameter of type
IO () for
benchmarking. It does the same probing process, but manages running
the operation in a loop.
microbench description target probes target with different parameters
until it's ran enough iterations to have a good estimate at the rate per
second of the operation.
description is a textual description of the
thing being benchmarked. Outputs to stdout.