use diol::prelude::*;
fn main() -> std::io::Result<()> {
let mut bench = Bench::new(BenchConfig::from_args()?);
bench.register_many(
list![slice_times_two, slice_times_two_autovec],
[4, 8, 16, 128, 1024].map(PlotArg),
);
bench.run()?;
Ok(())
}
fn slice_times_two(bencher: Bencher, PlotArg(len): PlotArg) {
let mut v = vec![0.0_f64; len];
bencher.bench(|| {
for x in &mut v {
*x *= 2.0;
}
black_box(&mut v);
});
}
fn slice_times_two_autovec(bencher: Bencher, PlotArg(len): PlotArg) {
let mut v = vec![0.0_f64; len];
let arch = pulp::Arch::new();
bencher.bench(|| {
arch.dispatch(
#[inline(always)]
|| {
for x in &mut v {
*x *= 2.0;
}
},
);
black_box(&mut v);
});
}