[][src]Crate microbench

A micro-benchmarking library.

Overview

microbench 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.

Iterations Time (ns)
1 19
2 25
3 37
4 47
5 56

microbench 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 9.6 nanoseconds with a goodness of fit (R²) of 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²)

Modules

statistics

Statistics-related utilities.

time

Time-related utilities.

Structs

Analysis

A statistical analysis of a set of execution time samples.

Bytes

A number of bytes.

Options

A set of benchmarking options.

Sample

A sample of the execution time of a function.

Functions

bench

Benchmarks the supplied function and prints the results.

bench_drop

Benchmarks the supplied function ignoring drop time and prints the results.

bench_setup

Benchmarks the supplied function ignoring setup time and prints the results.

measure

Measures the execution time of the supplied function.

measure_drop

Measures the execution time of the supplied function ignoring drop time.

measure_setup

Measures the execution time of the supplied function ignoring setup time.

retain

A function that prevents the optimizer from eliminating the supplied value.