Expand description
Binggan (餅乾, bǐng gān, means cookie in Chinese) is a benchmarking library for Rust. It is designed to be simple to use and to provide a good overview of the performance of your code and its memory consumption.
It allows arbitrary named inputs to be passed to the benchmarks.
§Example
use binggan::{black_box, InputGroup, PeakMemAlloc, INSTRUMENTED_SYSTEM};
#[global_allocator]
pub static GLOBAL: &PeakMemAlloc<std::alloc::System> = &INSTRUMENTED_SYSTEM;
fn main() {
// Tuples of name and data for the inputs
let data = vec![
(
"max id 100; 100 el all the same",
std::iter::repeat(100).take(100).collect(),
),
(
"max id 100; 100 el all different",
(0..100).collect()
),
];
bench_group(InputGroup::new_with_inputs(data));
}
// Run the benchmark for the group with input `Vec<usize>`
fn bench_group(mut runner: InputGroup<Vec<usize>>) {
runner.set_alloc(GLOBAL); // Set the peak mem allocator. This will enable peak memory reporting.
runner.enable_perf();
runner.register("vec", move |data| {
black_box(test_vec(data));
});
runner.register("hashmap", move |data| {
black_box(test_hashmap(data));
});
runner.run();
}
fn test_vec(data: &Vec<usize>) {
let mut vec = Vec::new();
for idx in data {
if vec.len() <= *idx {
vec.resize(idx + 1, 0);
}
vec[*idx] += 1;
}
}
fn test_hashmap(data: &Vec<usize>) {
let mut map = std::collections::HashMap::new();
for idx in data {
*map.entry(idx).or_insert(0) += 1;
}
}
Structs§
- The main struct to create benchmarks.
InputGroupis a collection of benchmarks that are run with the same inputs.- Input
- The options to configure the benchmarking. The can be set on
InputGroup. - An allocator middleware which keeps track of peak memory consumption.
Statics§
- An instrumented instance of the system allocator.
Traits§
- The PeakAllocTrait trait provides a common interface for all allocators.
Functions§
- A function that is opaque to the optimizer, used to prevent the compiler from optimizing away computations in a benchmark. An identity function that hints to the compiler to be maximally pessimistic about what
black_boxcould do.