Skip to content

`CyclesPerByte` measures clock cycles using the x86 or x86_64 `rdtsc` instruction.

License

Notifications You must be signed in to change notification settings

itzmeanjan/criterion-cycles-per-byte

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

`CyclesPerByte` measures clock cycles using the x86 or x86_64 `rdtsc` instruction.

Resources

License

Stars

Watchers

Forks

Languages

  • Rust 100.0%