14 releases
| 0.4.13 | May 1, 2024 |
|---|---|
| 0.4.12 | Feb 4, 2023 |
| 0.4.11 | Mar 5, 2022 |
| 0.4.10 | Apr 21, 2021 |
| 0.4.4 | Jul 28, 2019 |
#129 in Profiling
8,094 downloads per month
Used in 4 crates
28KB
572 lines
Benchmarking
This crate can be used to execute something and measure the execution time. It does not output anything to screens and filesystems.
Examples
const VEC_LENGTH: usize = 100;
benchmarking::warm_up();
let bench_result = benchmarking::measure_function(|measurer| {
let mut vec: Vec<usize> = Vec::with_capacity(VEC_LENGTH);
unsafe {
vec.set_len(VEC_LENGTH);
}
for i in 0..VEC_LENGTH {
measurer.measure(|| {
vec[i]
});
}
vec
}).unwrap();
println!("Reading a number from a vec takes {:?}!", bench_result.elapsed());
const VEC_LENGTH: usize = 100;
benchmarking::warm_up();
let bench_result = benchmarking::measure_function(|measurer| {
let mut vec: Vec<usize> = Vec::with_capacity(VEC_LENGTH);
measurer.measure(|| {
for i in 0..VEC_LENGTH {
vec.push(i);
}
});
vec
}).unwrap();
println!("Filling 0 to 99 into a vec takes {:?}!", bench_result.elapsed());
const VEC_LENGTH: usize = 100;
benchmarking::warm_up();
let bench_result = benchmarking::measure_function(|measurer| {
let mut vec: Vec<usize> = Vec::with_capacity(VEC_LENGTH);
for loop_seq in 0..VEC_LENGTH {
measurer.measure(|| {
vec.push(loop_seq);
});
}
vec
}).unwrap();
println!("Pushing a number into a vec takes {:?}!", bench_result.elapsed());
const VEC_LENGTH: usize = 100;
benchmarking::warm_up();
let bench_result = benchmarking::measure_function_n(2, |measurers| {
let mut vec: Vec<usize> = Vec::with_capacity(VEC_LENGTH);
for i in 0..VEC_LENGTH {
measurers[1].measure(|| {
vec.push(i);
});
}
for i in 0..VEC_LENGTH {
measurers[0].measure(|| {
vec[i]
});
}
vec
}).unwrap();
println!("Reading a number from a vec takes {:?}!", bench_result[0].elapsed());
println!("Pushing a number into a vec takes {:?}!", bench_result[1].elapsed());
- The
warm_upandwarm_up_with_durationfunctions of thebenchmarkingcrate runs on one thread. To warm up all CPUs, you can use thewarm_up_multi_threadandwarm_up_multi_thread_with_durationfunctions instead. - The
measure_functionandmeasure_function_with_timesfunctions of thebenchmarkingcrate can execute a closure for N times. To execute it repeatly for a while instead, you can use thebench_functionandbench_function_with_durationfunctions. - To execute a closure with multiple threads to measure the throughput, you can use the
multi_thread_bench_functionandmulti_thread_bench_function_with_durationfunctions of thebenchmarkingcrate.
Crates.io
https://crates.io/crates/benchmarking
Documentation
https://docs.rs/benchmarking