Crate benchmarking

Source
Expand description

§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_up and warm_up_with_duration functions of the benchmarking crate runs on one thread. To warm up all CPUs, you can use the warm_up_multi_thread and warm_up_multi_thread_with_duration functions instead. The measure_function and measure_function_with_times functions of the benchmarking crate can execute a closure for N times. To execute it repeatly for a while instead, you can use the bench_function and bench_function_with_duration functions. To execute a closure with multiple threads to measure the throughput, you can use the multi_thread_bench_function and multi_thread_bench_function_with_duration functions of the benchmarking crate.

Structs§

MeasureResult
The result of measurement.
Measurer
To measure the execution time.

Enums§

BenchmarkError

Functions§

bench_function
Run a function for 5 seconds and measure its execution time.
bench_function_n
Run a function for 5 seconds and measure its execution time.
bench_function_n_with_duration
Run a function with a specific duration and measure its execution time.
bench_function_with_duration
Run a function with a specific duration and measure its execution time.
measure_function
Run a function 10 times and measure its execution time.
measure_function_n
Run a function 10 times and measure its execution time.
measure_function_n_with_times
Run a function with a specific times and measure its execution time.
measure_function_with_times
Run a function with a specific times and measure its execution time.
multi_thread_bench_function
Run a function with a number of threads for 5 seconds and measure its execution time.
multi_thread_bench_function_n
Run a function with a number of threads for 5 seconds and measure its execution time.
multi_thread_bench_function_n_with_duration
Run a function with a number of threads and a specific duration and measure its execution time.
multi_thread_bench_function_with_duration
Run a function with a number of threads and a specific duration and measure its execution time.
warm_up
To stimulate CPU to wake up. The running duration is 3 seconds.
warm_up_multi_thread
To stimulate CPUs to wake up.
warm_up_multi_thread_with_duration
To stimulate CPUs to wake up. The running duration is 3 seconds.
warm_up_with_duration
To stimulate CPU to wake up.