【发布时间】:2021-04-18 01:28:52
【问题描述】:
我想对我的 Rust 程序进行基准测试,并且正在比较一些替代方案来做到这一点。然而,我注意到,当使用cargo bench 和bencher crate 运行基准测试时,代码的运行速度始终比使用相同代码运行生产构建 (cargo build --release) 时更快。例如:
主要代码:
use dot_product;
const N: usize = 1000000;
use std::time;
fn main() {
let start = time::Instant::now();
dot_product::rayon_parallel([1; N].to_vec(), [2; N].to_vec());
println!("Time: {:?}", start.elapsed());
}
平均时间:~20ms
基准代码:
#[macro_use]
extern crate bencher;
use dot_product;
use bencher::Bencher;
const N: usize = 1000000;
fn parallel(bench: &mut Bencher) {
bench.iter(|| dot_product::rayon_parallel([1; N].to_vec(), [2; N].to_vec()))
}
benchmark_group!(benches, sequential, parallel);
benchmark_main!(benches);
时间:5,006,199 ns/iter (+/- 1,320,975)
我对其他一些程序进行了同样的尝试,cargo bench 始终提供更快的结果。为什么会发生这种情况?
【问题讨论】:
-
因为你的基准测试什么都不做。
-
bench.iter(|| black_box(dot_product::rayon_parallel([1; N].to_vec(), [2; N].to_vec()))) -
你检查
std::time的分辨率了吗? -
有效,但实际上必须对
[1; N]部分进行黑盒处理。谢谢! -
@danitrod 你能尝试运行你的原始代码 1000 次并计算它需要多少吗? Benchers 运行代码很多次,然后将总时间除以迭代次数。
标签: rust benchmarking