如何对改变设置数据的代码进行基准测试?

时间:2017-06-03 14:13:59

标签: rust benchmarking

每次运行iter之外的设置代码时,内置基准测试工具的当前实现似乎会多次在iter调用内运行代码。当基准测试的代码修改设置数据时,基准代码的后续迭代不再是对同一事物进行基准测试。

作为一个具体的例子,我正在评估从Vec移除值所需的速度:

#![feature(test)]

extern crate test;

use test::Bencher;

#[bench]
fn clearing_a_vector(b: &mut Bencher) {
    let mut things = vec![1];
    b.iter(|| {
        assert!(!things.is_empty());
        things.clear();
    });
}

这将失败:

test clearing_a_vector ... thread 'main' panicked at 'assertion failed: !things.is_empty()', src/lib.rs:11

对向量执行push元素的类似基准测试表明,iter闭包执行了近9.8亿次(取决于闭包的速度)。结果可能非常误导,如果单次运行符合我的预期,就会有数百万次运行。

使用Rust nightly 1.19.0(f89d8d184 2017-05-30)进行测试

1 个答案:

答案 0 :(得分:0)

查看pew,这是最近发布的用于对防锈代码进行基准测试的箱子。它允许您进行一次克隆到每个基准测试的设置,或通过暂停/恢复基准来手动运行设置。

这个库处于非常早期阶段,但它可能正是您正在寻找的。欢迎捐款。