### 9 unstable releases (4 breaking)

0.5.0 | Apr 3, 2019 |
---|---|

0.4.0 | Dec 31, 2018 |

0.3.3 | Aug 18, 2018 |

0.3.2 | Mar 1, 2017 |

0.1.0 | Dec 25, 2016 |

#**112** in Profiling

**3,999** downloads per month

Used in **18** crates
(16 directly)

**Apache-2.0**

23KB

293 lines

# microbench

A micro-benchmarking library (inspired by core_bench).

Released under the Apache License 2.0.

Supported on Rust 1.31.0 and later.

**Note:** The

function (used to prevent the optimizer from removing computations) may not
operate correctly or may have poor performance on the stable and beta channels of Rust. If you are
using a nightly release of Rust, enable the `retain`

crate feature to enable a better
implementation of this function.`nightly`

## Overview

uses linear regression to estimate the execution time of code segments. For
example, the following table might represent data collected by `microbench`

about a code
segment.`microbench`

Iterations | Time (ns) |
---|---|

1 | 19 |

2 | 25 |

3 | 37 |

4 | 47 |

5 | 56 |

of course takes many more than 5 samples and the number of iterations grows
geometrically rather than linearly, but the idea remains the same. After collecting data like
this, `microbench`

uses ordinary least squares (OLS) linear regression to estimate the actual
execution time of the code segment. Using OLS with the above data would yield an estimated
execution time of `microbench`

nanoseconds with a goodness of fit (R²) of `9.``6`

.`0.``992`

## Example

`use` `microbench``::``{``self``,` Options`}``;`
`fn` `fibonacci_iterative``(``n``:` `u64``)`` ``->` `u64` `{`
`let` `(``mut` x`,` `mut` y`,` `mut` z`)` `=` `(``0``,` `1``,` `1``)``;`
`for` `_` `in` `0``..`n `{` x `=` y`;` y `=` z`;` z `=` x `+` y`;` `}`
x
`}`
`fn` `fibonacci_recursive``(``n``:` `u64``)`` ``->` `u64` `{`
`if` n `<` `2` `{`
n
`}` `else` `{`
`fibonacci_recursive``(`n `-` `2``)` `+` `fibonacci_recursive``(`n `-` `1``)`
`}`
`}`
`let` options `=` `Options``::`default`(``)``;`
`microbench``::`bench`(``&`options`,` `"`iterative_16`"``,` `|``|` `fibonacci_iterative``(``16``)``)``;`
`microbench``::`bench`(``&`options`,` `"`recursive_16`"``,` `|``|` `fibonacci_recursive``(``16``)``)``;`

Example output:

`iterative_16`` (5.0s`) `...`` 281.733 ns/iter (0.998 R²`)
`recursive_16`` (5.0s`) `...`` 9_407.020 ns/iter (0.997 R²`)