Expand description
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.