forked from jorgecarleitao/arrow2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbitwise.rs
64 lines (52 loc) · 1.71 KB
/
bitwise.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use std::ops::{BitAnd, BitOr, BitXor, Not};
use criterion::{criterion_group, criterion_main, Criterion};
use num_traits::NumCast;
use arrow2::{
array::PrimitiveArray, compute::bitwise::*, types::NativeType,
util::bench_util::create_primitive_array_with_seed,
};
fn bench_or<T>(lhs: &PrimitiveArray<T>, rhs: &PrimitiveArray<T>)
where
T: NativeType + BitOr<Output = T> + NumCast,
{
criterion::black_box(or(lhs, rhs));
}
fn bench_xor<T>(lhs: &PrimitiveArray<T>, rhs: &PrimitiveArray<T>)
where
T: NativeType + BitXor<Output = T> + NumCast,
{
criterion::black_box(xor(lhs, rhs));
}
fn bench_and<T>(lhs: &PrimitiveArray<T>, rhs: &PrimitiveArray<T>)
where
T: NativeType + BitAnd<Output = T> + NumCast,
{
criterion::black_box(and(lhs, rhs));
}
fn bench_not<T>(arr: &PrimitiveArray<T>)
where
T: NativeType + Not<Output = T> + NumCast,
{
criterion::black_box(not(arr));
}
fn add_benchmark(c: &mut Criterion) {
(10..=20).step_by(2).for_each(|log2_size| {
let size = 2usize.pow(log2_size);
let arr_a = create_primitive_array_with_seed::<u64>(size, 0.0, 43);
let arr_b = create_primitive_array_with_seed::<u64>(size, 0.0, 42);
c.bench_function(&format!("or 2^{log2_size}"), |b| {
b.iter(|| bench_or(&arr_a, &arr_b))
});
c.bench_function(&format!("xor 2^{log2_size}"), |b| {
b.iter(|| bench_xor(&arr_a, &arr_b))
});
c.bench_function(&format!("and 2^{log2_size}"), |b| {
b.iter(|| bench_and(&arr_a, &arr_b))
});
c.bench_function(&format!("not 2^{log2_size}"), |b| {
b.iter(|| bench_not(&arr_a))
});
});
}
criterion_group!(benches, add_benchmark);
criterion_main!(benches);