7 个版本
使用旧的 Rust 2015
0.2.3 | 2018 年 4 月 29 日 |
---|---|
0.2.2 | 2018 年 4 月 25 日 |
0.1.2 | 2018 年 4 月 17 日 |
在 性能分析 中排名 #235
27KB
365 行
普韦
普韦是一个基于 Google 的 C++ 性能基准库编写的 Rust 性能基准库。它目前处于非常早期的 alpha 阶段(我会将其视为 MVP)。它被构建来执行以下操作(这些操作在 rust 性能基准库中无法完成):
- 暂停和恢复基准计时器
- 通过指定参数范围运行多个基准
- 创建一些初始状态,并将其传递给基准的所有运行
基准至少运行 1 秒(或用户指定的 --min_duration
)和至少 8 次(或用户指定的 --min_runs
)。这些运行的平均值输出为 时间 (ns)
列。
更全面的文档可以在 这里 找到。
待办事项:输出其他状态,而不仅仅是平均值。
安装
此库可在 crates.io 上找到。您可以将其作为库链接,或者使用 cargo install
来获取转置脚本(请参阅 输出)。
在您的 Cargo.toml
中添加 pew 作为依赖项。然后,将其添加到您的 crate 根目录
#[macro_use]
extern crate pew;
我通常在 bin/
目录中创建基准,并使用以下命令运行它们: cargo run --bin <benchmark-name> --release
。
用法
在此 处 查看文档。
示例
可以使用以下方式使用此库
fn main() {
Benchmark::with_name("range_bench")
.with_range(1 << 10, 1 << 20, 4)
.with_generator(generator)
.with_bench(pew_bench!(bm_vector1))
.with_bench(pew_bench!(bm_vector2))
.with_bench(pew_bench!(bm_vector3))
.run();
}
有关如何使用此库的更完整示例,请参阅 examples/
目录。
输出
输出是一个以逗号分隔的基准测试结果列表(这是 cargo cargo run --example example1
将输出的内容)。
Name,Time (ns)
range_bench/bm_vector_range/1024,104715
range_bench/bm_vector_range/4096,554838
range_bench/bm_vector_range/16384,2068971
range_bench/bm_vector_range/65536,7739376
range_bench/bm_vector_range/262144,31389948
range_bench/bm_vector_range/1048576,114633815
gen_bench/bm_vector_gen/1024,123643
gen_bench/bm_vector_gen/4096,545581
gen_bench/bm_vector_gen/16384,2590869
gen_bench/bm_vector_gen/65536,7799209
gen_bench/bm_vector_gen/262144,29498657
gen_bench/bm_vector_gen/1048576,113458415
您还可以向基准测试传递一个 --filter
标志,这样只会运行名称包含过滤字符串的基准测试。例如,运行 cargo cargo run --example example1 -- --filter gen
将输出
gen_bench/bm_vector_gen/1024,123643
gen_bench/bm_vector_gen/4096,545581
gen_bench/bm_vector_gen/16384,2590869
gen_bench/bm_vector_gen/65536,7799209
gen_bench/bm_vector_gen/262144,29498657
gen_bench/bm_vector_gen/1048576,113458415
而运行 cargo cargo run --example example1 -- --filter 1024
将输出
range_bench/bm_vector_range/1024,104715
gen_bench/bm_vector_gen/1024,123643
通常我会对同一范围内的多个基准测试进行测试,并绘制结果。我发现通过转置输出更容易绘制结果。有一个二进制文件 pew_transpose
可以实现这一点。可以通过将基准测试代码的输出管道传输来运行它
cargo run --example example1 | pew_transpose
上述转置输出将是
Size,bm_vector_range,bm_vector_gen
1024,105974,106845
4096,418835,409143
16384,1646391,1655855
65536,6566094,6668369
262144,27025772,26948818
1048576,108144239,107596626
待办事项:添加更多输出类型(例如,格式化打印,JSON等)。
命令行界面
命令行界面在运行基准测试时提供了便利的标志和选项
Akshay Nanavati <akshay.nanavati1@gmail.com>
A benchmarking library for Rust based on google/benchmark
USAGE:
example1 [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-f, --filter <FILTER> Only run benchmarks that contain this string
-d, --min_duration <RUN_UNTIL> Run benchmarks till this time (in s) and then output average [default: 1]
-r, --min_runs <MIN_RUNS> Run benchmarks for at least this many runs [default: 8]
这些可以传递给运行您的基准测试的主二进制文件。
许可证
此代码根据 Apache 2.0 许可证授权。
贡献
这个库还处于非常初级的阶段,我非常欢迎任何我可以得到的贡献。这是我第一次编写基准测试库(以及 Rust 库),并希望得到更有经验的人的反馈。
一个好的起点是问题(这些也作为待办事项在此链接)。
依赖关系
~4MB
~78K SLoC