Rust中如何用Divan对同一函数在不同Feature下做基准测试?
在Rust中针对Feature状态分别做基准测试
当然可以实现同一函数在Feature启用/禁用状态下的基准测试,不管用Divan还是其他工具(比如Criterion.rs),核心思路都是编译不同Feature配置的二进制文件,分别运行基准测试。以下是具体实现方法:
用Divan实现的步骤
1. 配置Cargo.toml
先把依赖和Feature定义好:
[package] name = "bench-feature-demo" version = "0.1.0" edition = "2021" [dependencies] rayon = { version = "1.7", optional = true } [dev-dependencies] divan = "0.1.10" [features] parallel = ["dep:rayon"]
2. 编写基准测试代码
基于你提供的代码调整,确保逻辑在不同Feature下正常工作:
use divan::counter::ItemsCount; use divan::{black_box, Bencher}; fn main() { divan::main() } #[cfg(feature = "parallel")] use rayon::iter::ParallelIterator; fn compute_foo(size: usize) -> usize { #[cfg(feature = "parallel")] { (0..size).into_par_iter() } #[cfg(not(feature = "parallel"))] { (0..size).into_iter() }.map(|i| i * 123 / 4).sum() } #[divan::bench(args = [16, 32, 64, 128, 256, 512, 1024, 2048, 4096])] fn bench_compute_foo(bencher: Bencher, size: usize) { bencher .input_counter(|| ItemsCount::new(size)) .bench_refs(|| black_box(compute_foo(size))); }
3. 分别运行基准测试
- 禁用
parallelFeature时:
cargo divan --no-default-features
- 启用
parallelFeature时:
cargo divan --features parallel
可以把两次的输出结果保存下来,直接对比性能差异。
用Criterion.rs实现的备选方案
如果你想换用更主流的基准测试工具,Criterion.rs的实现逻辑类似:
1. 配置Cargo.toml
[package] name = "bench-feature-demo" version = "0.1.0" edition = "2021" [dependencies] rayon = { version = "1.7", optional = true } [dev-dependencies] criterion = { version = "0.5", features = ["html_reports"] } [features] parallel = ["dep:rayon"]
2. 编写基准测试代码
use criterion::{criterion_group, criterion_main, Criterion}; use rayon::iter::ParallelIterator; fn compute_foo(size: usize) -> usize { #[cfg(feature = "parallel")] { (0..size).into_par_iter() } #[cfg(not(feature = "parallel"))] { (0..size).into_iter() }.map(|i| i * 123 / 4).sum() } fn bench_compute_foo(c: &mut Criterion) { let test_sizes = [16, 32, 64, 128, 256, 512, 1024, 2048, 4096]; for &size in &test_sizes { c.bench_function(&format!("compute_foo/{}", size), |b| { b.iter(|| compute_foo(size)) }); } } criterion_group!(benches, bench_compute_foo); criterion_main!(benches);
3. 运行测试
- 禁用Feature:
cargo bench --no-default-features
- 启用Feature:
cargo bench --features parallel
Criterion会生成HTML报告,方便直观对比两次测试的性能数据。
内容的提问来源于stack exchange,提问作者Netwave
相关产品推荐
相关产品推荐

