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 中使用
35KB
557 代码行
Calliper
Calliper 是一个基于 Callgrind 的基准测试工具,具有少量但有用的功能。状态:还有很多工作要做,但 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 文件夹中找到。
许可协议
本项目许可协议为以下之一
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
致谢
Calliper 受 Iai 基准测试工具 的启发。
依赖项
~3–4.5MB
~96K SLoC