use aligned_vec::AVec;
use diol::prelude::*;
use lmutils::ld::{
encode_and_missing::{encode_and_missing_avx512, encode_and_missing_naive},
LD_BLOCK_SIZE,
};
fn main() -> std::io::Result<()> {
let mut bench = Bench::new(BenchConfig::from_args()?);
bench.register_many(
list![
naive, avx512
],
[64, 640, 6400, 64000, 640000, 6400000, 64000000],
);
bench.run()?;
Ok(())
}
fn data(len: usize) -> AVec<u8> {
let mut vec = AVec::with_capacity(LD_BLOCK_SIZE, len);
vec.resize(len, 0b00011011);
vec
}
fn naive(bencher: Bencher, len: usize) {
let data = data(len);
bencher.bench(|| {
std::hint::black_box(encode_and_missing_naive(&mut data.clone()));
});
}
fn avx512(bencher: Bencher, len: usize) {
let data = data(len);
bencher.bench(|| {
if is_x86_feature_detected!("avx512f") {
encode_and_missing_avx512(&mut data.clone());
}
});
}