7 个版本

使用旧的 Rust 2015

0.2.3 2018 年 4 月 29 日
0.2.2 2018 年 4 月 25 日
0.1.2 2018 年 4 月 17 日

性能分析 中排名 #235

Apache-2.0

27KB
365

普韦

普韦是一个基于 Google 的 C++ 性能基准库编写的 Rust 性能基准库。它目前处于非常早期的 alpha 阶段(我会将其视为 MVP)。它被构建来执行以下操作(这些操作在 rust 性能基准库中无法完成):

  1. 暂停和恢复基准计时器
  2. 通过指定参数范围运行多个基准
  3. 创建一些初始状态,并将其传递给基准的所有运行

基准至少运行 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