Skip to content

Commit e0ea40c

Browse files
committed
bench: add simd bitvec benchmark
1 parent dbfbbe3 commit e0ea40c

File tree

2 files changed

+119
-0
lines changed

2 files changed

+119
-0
lines changed

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,13 @@ std = []
2222

2323
[dev-dependencies]
2424
criterion = "0.3"
25+
# for normal bench
2526
bit-vec = "0.6"
2627
bitvec = "1.0.0"
28+
# for simd bench
29+
wide = "0.7.4"
30+
bitvec_simd = "0.15.0"
31+
bitvector_simd = "0.2.2"
2732

2833
[[bench]]
2934
name = "comparison"

benches/comparison.rs

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,110 @@ fn benchmark_bitvector_simd4_u16x8(c: &mut Criterion) {
7979
});
8080
}
8181

82+
fn benchmark_bitvector_bitvec_simd(c: &mut Criterion) {
83+
let b1 = bitvec_simd::BitVec::ones(100_000);
84+
let b2 = bitvec_simd::BitVec::zeros(100_000);
85+
c.bench_function("bitvec_simd 0.15.0", |b| {
86+
b.iter(|| {
87+
black_box(b1.and_cloned(&b2));
88+
})
89+
});
90+
}
91+
92+
fn benchmark_bitvector_bitvec_simd2(c: &mut Criterion) {
93+
c.bench_function("bitvec_simd 0.15.0 with creation", |b| {
94+
b.iter(|| {
95+
let b1 = bitvec_simd::BitVec::ones(100_000);
96+
let b2 = bitvec_simd::BitVec::zeros(100_000);
97+
black_box(b1.and(b2));
98+
})
99+
});
100+
}
101+
102+
fn benchmark_bitvector_bitvec_simd3(c: &mut Criterion) {
103+
c.bench_function("bitvec_simd 0.15.0 resize false", |b| {
104+
b.iter(|| {
105+
let mut b1 = bitvec_simd::BitVec::ones(100_000);
106+
black_box(b1.resize(200_000, false));
107+
})
108+
});
109+
}
110+
111+
fn benchmark_bitvector_bitvec_simd4(c: &mut Criterion) {
112+
c.bench_function("bitvec_simd 0.15.0 resize true", |b| {
113+
b.iter(|| {
114+
let mut b1 = bitvec_simd::BitVec::ones(100_000);
115+
black_box(b1.resize(200_000, true));
116+
})
117+
});
118+
}
119+
120+
fn benchmark_bitvector_bitvec_simd_u16x8(c: &mut Criterion) {
121+
use wide::*;
122+
123+
let b1 = bitvec_simd::BitVecSimd::<[u16x8; 4], 8>::ones(100_000);
124+
let b2 = bitvec_simd::BitVecSimd::<[u16x8; 4], 8>::zeros(100_000);
125+
c.bench_function("bitvec_simd 0.15.0 u16x8", |b| {
126+
b.iter(|| {
127+
black_box(b1.and_cloned(&b2));
128+
})
129+
});
130+
}
131+
132+
fn benchmark_bitvector_bitvec_simd2_u16x8(c: &mut Criterion) {
133+
use wide::*;
134+
135+
c.bench_function("bitvec_simd 0.15.0 u16x8 with creation", |b| {
136+
b.iter(|| {
137+
let b1 = bitvec_simd::BitVecSimd::<[u16x8; 4], 8>::ones(100_000);
138+
let b2 = bitvec_simd::BitVecSimd::<[u16x8; 4], 8>::zeros(100_000);
139+
black_box(b1.and(b2));
140+
})
141+
});
142+
}
143+
144+
fn benchmark_bitvector_bitvec_simd3_u16x8(c: &mut Criterion) {
145+
use wide::*;
146+
147+
c.bench_function("bitvec_simd 0.15.0 u16x8 resize false", |b| {
148+
b.iter(|| {
149+
let mut b1 = bitvec_simd::BitVecSimd::<[u16x8; 4], 8>::ones(100_000);
150+
black_box(b1.resize(200_000, false));
151+
})
152+
});
153+
}
154+
155+
fn benchmark_bitvector_bitvec_simd4_u16x8(c: &mut Criterion) {
156+
use wide::*;
157+
158+
c.bench_function("bitvec_simd 0.15.0 u16x8 resize true", |b| {
159+
b.iter(|| {
160+
let mut b1 = bitvec_simd::BitVecSimd::<[u16x8; 4], 8>::ones(100_000);
161+
black_box(b1.resize(200_000, true));
162+
})
163+
});
164+
}
165+
166+
fn benchmark_bitvector_bitvector_simd(c: &mut Criterion) {
167+
let b1 = bitvector_simd::BitVector::ones(100_000);
168+
let b2 = bitvector_simd::BitVector::zeros(100_000);
169+
c.bench_function("bitvector_simd 0.2.2", |b| {
170+
b.iter(|| {
171+
black_box(b1.and_cloned(&b2));
172+
})
173+
});
174+
}
175+
176+
fn benchmark_bitvector_bitvector_simd2(c: &mut Criterion) {
177+
c.bench_function("bitvector_simd 0.2.2 with creation", |b| {
178+
b.iter(|| {
179+
let b1 = bitvector_simd::BitVector::ones(100_000);
180+
let b2 = bitvector_simd::BitVector::zeros(100_000);
181+
black_box(b1.and(b2));
182+
})
183+
});
184+
}
185+
82186
fn benchmark_bitvector_bitvec(c: &mut Criterion) {
83187
let b1 = bit_vec::BitVec::from_elem(100_000, true);
84188
let b2 = bit_vec::BitVec::from_elem(100_000, false);
@@ -141,26 +245,36 @@ criterion_group!(
141245
normal_benches,
142246
benchmark_bitvector_simd,
143247
benchmark_bitvector_simd_u16x8,
248+
benchmark_bitvector_bitvec_simd,
249+
benchmark_bitvector_bitvec_simd_u16x8,
250+
benchmark_bitvector_bitvector_simd,
144251
benchmark_bitvector_bitvec,
145252
benchmark_bitvector_bitvec_n
146253
);
147254
criterion_group!(
148255
with_creation_benches,
149256
benchmark_bitvector_simd2,
150257
benchmark_bitvector_simd2_u16x8,
258+
benchmark_bitvector_bitvec_simd2,
259+
benchmark_bitvector_bitvec_simd2_u16x8,
260+
benchmark_bitvector_bitvector_simd2,
151261
benchmark_bitvector_bitvec2,
152262
benchmark_bitvector_bitvec_n2
153263
);
154264
criterion_group!(
155265
resize_false_benches,
156266
benchmark_bitvector_simd3,
157267
benchmark_bitvector_simd3_u16x8,
268+
benchmark_bitvector_bitvec_simd3,
269+
benchmark_bitvector_bitvec_simd3_u16x8,
158270
benchmark_bitvector_bitvec_n3
159271
);
160272
criterion_group!(
161273
resize_true_benches,
162274
benchmark_bitvector_simd4,
163275
benchmark_bitvector_simd4_u16x8,
276+
benchmark_bitvector_bitvec_simd4,
277+
benchmark_bitvector_bitvec_simd4_u16x8,
164278
benchmark_bitvector_bitvec_n4
165279
);
166280
criterion_main!(

0 commit comments

Comments
 (0)