#cycle #criterion #cpu #x86-64 #benchmark #measure #instructions

dev criterion-cycles-per-byte

使用 CPU 循环来衡量 criterion 的时间

7 个不稳定版本

0.6.1 2024 年 8 月 13 日
0.6.0 2023 年 11 月 25 日
0.5.0 2023 年 5 月 28 日
0.4.0 2022 年 12 月 16 日
0.1.1 2019 年 9 月 27 日

#30 in 分析

Download history 1338/week @ 2024-05-04 2035/week @ 2024-05-11 1326/week @ 2024-05-18 1088/week @ 2024-05-25 1227/week @ 2024-06-01 1438/week @ 2024-06-08 1663/week @ 2024-06-15 1429/week @ 2024-06-22 1191/week @ 2024-06-29 1361/week @ 2024-07-06 1392/week @ 2024-07-13 1322/week @ 2024-07-20 1649/week @ 2024-07-27 1354/week @ 2024-08-03 1592/week @ 2024-08-10 1762/week @ 2024-08-17

6,601 每月下载量
不到 25 crates 中使用

MIT/Apache

11KB
120

criterion-cycles-per-byte

GITHUB Crates.io docs

CyclesPerByte 使用 CPU 读取时间戳计数指令来衡量滴答。

循环测量指令

架构 指令
x86 rdtsc / rdpru
x86_64 rdtsc / rdpru
aarch64 (运行 GNU/Linux 内核) pmccntr
loongarch64 rdtime.d

RDPRU 指令仅在 Zen 2 以上的 AMD CPU 上可用,并且默认不使用。要启用它,请使用 rdpru 配置标志,例如通过使用 RUSTFLAGS="--cfg rdpru"。请注意,这个 crate 不在运行时检查指令的可用性,这可能导致基准执行期间的“非法指令”异常。

启用 rdpru 后,还强烈建议将基准固定在一个核心上,例如通过使用 tasksetRUSTFLAGS="--cfg rdpru" taskset --cpu-list 0 cargo bench。否则,该 crate 可能会因为基准线程在 CPU 核心之间迁移而产生极其错误的测量结果。

警告:x86

除非启用 rdpru,否则此 crate 测量的是时钟滴答而不是循环。除非你计算出滴答与循环的比例并采取措施确保该比例保持一致,否则它不会在现代机器上提供准确的结果。

警告:aarch64

如果您打算在运行 GNU/Linux 内核的 aarch64 目标上使用这个库,我建议您阅读 src/lib.rs#L61-L68

示例

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);

维护状态

我不是原始作者,但我维护这个 crate,因为它仍然在一些地方被使用。我计划根据需要更新版本和修复错误,但不会添加功能或尝试解决(可能难以解决的)测量方法的问题。

兼容性

Criterion 版本 每字节周期版本
0.5 0.6
0.4 0.4

依赖项

~8–19MB
~250K SLoC