[go: up one dir, main page]

criterion-cycles-per-byte 0.6.0

measure time with CPU cycles for criterion
Documentation

criterion-cycles-per-byte

GITHUB Crates.io docs

CyclesPerByte measures ticks using the CPU read time-stamp counter instruction.

Architecture Instruction
x86 rdtsc
x86_64 rdtsc
aarch64 (running GNU/Linux kernel) pmccntr
loongarch64 rdtime.d

Warning This crate measures clock ticks rather than cycles. It will not provide accurate results on modern machines unless you calculate the ratio of ticks to cycles and take steps to ensure that that ratio remains consistent.

Warning In case you're planning to use this library on an aarch64 target, running GNU/Linux kernel, I advise you to read src/lib.rs#L61-L68.

# fn fibonacci_slow(_: usize) {}
# fn fibonacci_fast(_: usize) {}
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
use criterion_cycles_per_byte::CyclesPerByte;
//!
fn bench(c: &mut Criterion<CyclesPerByte>) {
    let mut group = c.benchmark_group("fibonacci");
//!
    for i in 0..20 {
        group.bench_function(BenchmarkId::new("slow", i), |b| b.iter(|| fibonacci_slow(i)));
        group.bench_function(BenchmarkId::new("fast", i), |b| b.iter(|| fibonacci_fast(i)));
    }
//!
    group.finish()
}
//!
criterion_group!(
    name = my_bench;
    config = Criterion::default().with_measurement(CyclesPerByte);
    targets = bench
);
criterion_main!(my_bench);

Note I am not the original writer but am maintaining this crate because it is still being used in several places. I plan to do version updates and bug fixes as necessary but not to add features or attempt fix the (potentially intractable) problems with this method of measurement.

Compatibility

Criterion version Cycles Per Byte Version
0.5 0.6
0.4 0.4