Skip to content

Commit da7b0f4

Browse files
committed
Add benchmarks for std::simd implementation
1 parent e053ae2 commit da7b0f4

File tree

2 files changed

+71
-2
lines changed

2 files changed

+71
-2
lines changed

bench/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,6 @@ harness = false
2626
[profile.bench]
2727
codegen-units = 1
2828
lto = true
29+
30+
[features]
31+
stdsimd = ["sliceslice/stdsimd"]

bench/benches/i386.rs

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
8383

8484
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
8585
{
86-
use sliceslice::x86::DynamicAvx2Searcher;
86+
use sliceslice::x86::{Avx2Searcher, DynamicAvx2Searcher};
8787

8888
#[cfg(feature = "sse4-strstr")]
8989
group.bench_function("sse4_strstr::avx2_strstr_v2", |b| {
@@ -98,6 +98,21 @@ fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
9898
});
9999
});
100100

101+
group.bench_function("Avx2Searcher::search_in", |b| {
102+
let searchers = needles
103+
.iter()
104+
.map(|&needle| unsafe { Avx2Searcher::new(needle.as_bytes()) })
105+
.collect::<Vec<_>>();
106+
107+
b.iter(|| {
108+
for (i, searcher) in searchers.iter().enumerate() {
109+
for haystack in &needles[i..] {
110+
black_box(unsafe { searcher.search_in(haystack.as_bytes()) });
111+
}
112+
}
113+
});
114+
});
115+
101116
group.bench_function("DynamicAvx2Searcher::search_in", |b| {
102117
let searchers = needles
103118
.iter()
@@ -114,6 +129,26 @@ fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
114129
});
115130
}
116131

132+
#[cfg(feature = "stdsimd")]
133+
{
134+
use sliceslice::stdsimd::StdSimdSearcher;
135+
136+
group.bench_function("StdSimdSearcher::search_in", |b| {
137+
let searchers = needles
138+
.iter()
139+
.map(|&needle| StdSimdSearcher::new(needle.as_bytes()))
140+
.collect::<Vec<_>>();
141+
142+
b.iter(|| {
143+
for (i, searcher) in searchers.iter().enumerate() {
144+
for haystack in &needles[i..] {
145+
black_box(searcher.search_in(haystack.as_bytes()));
146+
}
147+
}
148+
});
149+
});
150+
}
151+
117152
group.finish();
118153
}
119154

@@ -182,7 +217,7 @@ fn search_haystack<M: Measurement>(
182217

183218
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
184219
{
185-
use sliceslice::x86::DynamicAvx2Searcher;
220+
use sliceslice::x86::{Avx2Searcher, DynamicAvx2Searcher};
186221

187222
#[cfg(feature = "sse4-strstr")]
188223
group.bench_function("sse4_strstr::avx2_strstr_v2", |b| {
@@ -193,6 +228,19 @@ fn search_haystack<M: Measurement>(
193228
});
194229
});
195230

231+
group.bench_function("Avx2Searcher::search_in", |b| {
232+
let searchers = needles
233+
.iter()
234+
.map(|needle| unsafe { Avx2Searcher::new(needle.as_bytes()) })
235+
.collect::<Vec<_>>();
236+
237+
b.iter(|| {
238+
for searcher in &searchers {
239+
black_box(unsafe { searcher.search_in(haystack) });
240+
}
241+
});
242+
});
243+
196244
group.bench_function("DynamicAvx2Searcher::search_in", |b| {
197245
let searchers = needles
198246
.iter()
@@ -207,6 +255,24 @@ fn search_haystack<M: Measurement>(
207255
});
208256
}
209257

258+
#[cfg(feature = "stdsimd")]
259+
{
260+
use sliceslice::stdsimd::StdSimdSearcher;
261+
262+
group.bench_function("StdSimdSearcher::search_in", |b| {
263+
let searchers = needles
264+
.iter()
265+
.map(|needle| StdSimdSearcher::new(needle.as_bytes()))
266+
.collect::<Vec<_>>();
267+
268+
b.iter(|| {
269+
for searcher in &searchers {
270+
black_box(searcher.search_in(haystack));
271+
}
272+
});
273+
});
274+
}
275+
210276
group.finish();
211277
}
212278

0 commit comments

Comments
 (0)