7 个版本

0.1.4 2023 年 3 月 27 日
0.1.3 2023 年 2 月 5 日
0.1.2 2023 年 1 月 22 日
0.0.1 2022 年 11 月 24 日

#122 in 性能分析

33 每月下载次数
erased_set 中使用

Apache-2.0/MIT

35KB
557 代码行

Calliper

Calliper 是一个基于 Callgrind 的基准测试工具,具有少量但有用的功能。

Docs

状态:还有很多工作要做,但 Calliper 现在应该可以使用。请注意,我计划在 1.0.0 之前任意地在小版本中破坏 API。

目录

使用方法

要使用 Calliper,您必须安装 Valgrind

要使用 Calliper 编写您的第一个基准测试,请将以下内容添加到您的 Cargo.toml

[dev-dependencies]
calliper = "0.1.4"

[[bench]]
name = "my_first_calliper_benchmark"
harness = false

然后,在 $PROJECT/benches/my_first_calliper_benchmark.rs 创建一个文件,内容如下

use calliper::utils::black_box;
use calliper::{Runner, Scenario};

#[inline(never)]
#[no_mangle]
fn binary_search_impl(haystack: &[u8], needle: u8) -> Result<usize, usize> {
    haystack.binary_search(&needle)
}
fn bench_binary_search() {
    let range = (0..255).collect::<Vec<_>>();
    let _ = black_box(binary_search_impl(black_box(&range), black_box(253)));
}

#[inline(never)]
#[no_mangle]
fn linear_search_impl(haystack: &[u8], needle: u8) -> Option<usize> {
    haystack.iter().position(|n| *n == needle)
}

fn bench_linear_search() {
    let range = (0..255).collect::<Vec<_>>();
    black_box(linear_search_impl(black_box(&range), black_box(253)));
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let runner = Runner::default();
    let benches = [
        Scenario::new(bench_linear_search),
        Scenario::new(bench_binary_search),
    ];
    if let Some(results) = runner.run(&benches)? {
        for res in results.into_iter() {
            println!("{}", res.parse());
        }
    }
    Ok(())
}

现在可以使用 cargo bench 执行基准测试。

更复杂的示例可以在本仓库的 benches 文件夹中找到。

许可协议

本项目许可协议为以下之一

任选其一。

致谢

Calliper 受 Iai 基准测试工具 的启发。

依赖项

~3–4.5MB
~96K SLoC