Skip to content

Commit a1c1dbb

Browse files
committed
Add benchmarks for memchr::memmem::Finder::find
Results: ``` short_haystack/memchr::memmem::Finder::find time: [1389031300 instructions 1389031304 instructions 1389031309 instructions] long_haystack/memchr::memmem::Finder::find time: [254923877 instructions 254923879 instructions 254923880 instructions] random_haystack/memchr::memmem::Finder::find time: [1964736 instructions 1964736 instructions 1964737 instructions] short_haystack/DynamicAvx2Searcher::search_in time: [1010100472 instructions 1010100481 instructions 1010100491 instructions] long_haystack/DynamicAvx2Searcher::search_in time: [239679929 instructions 239679930 instructions 239679931 instructions] random_haystack/DynamicAvx2Searcher::search_in time: [1574708 instructions 1574708 instructions 1574708 instructions] ``` Summary: * `short_haystack`: +37% instructions for `memchr::memmem::Finder::find` * `long_haystack`: +6% instructions for `memchr::memmem::Finder::find` * `random_haystack`: +24% instructions for `memchr::memmem::Finder::find`
1 parent b3b9b8c commit a1c1dbb

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

bench/benches/i386.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,21 @@ fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
6666
});
6767
});
6868

69+
group.bench_function("memchr::memmem::Finder::find", |b| {
70+
let finders = needles
71+
.iter()
72+
.map(|&needle| memchr::memmem::Finder::new(needle.as_bytes()))
73+
.collect::<Vec<_>>();
74+
75+
b.iter(|| {
76+
for (i, finder) in finders.iter().enumerate() {
77+
for haystack in &needles[i..] {
78+
black_box(finder.find(haystack.as_bytes()));
79+
}
80+
}
81+
});
82+
});
83+
6984
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
7085
{
7186
use sliceslice::x86::DynamicAvx2Searcher;
@@ -154,6 +169,19 @@ fn search_haystack<M: Measurement>(
154169
});
155170
});
156171

172+
group.bench_function("memchr::memmem::Finder::find", |b| {
173+
let finders = needles
174+
.iter()
175+
.map(|needle| memchr::memmem::Finder::new(needle.as_bytes()))
176+
.collect::<Vec<_>>();
177+
178+
b.iter(|| {
179+
for finder in &finders {
180+
black_box(finder.find(haystack));
181+
}
182+
});
183+
});
184+
157185
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
158186
{
159187
use sliceslice::x86::DynamicAvx2Searcher;

bench/benches/random.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,15 @@ fn search<M: Measurement>(c: &mut Criterion<M>) {
5757
},
5858
);
5959

60+
group.bench_with_input(
61+
BenchmarkId::new("memchr::memmem::Finder::find", parameter),
62+
&size,
63+
|b, _| {
64+
let finder = memchr::memmem::Finder::new(needle);
65+
b.iter(|| black_box(finder.find(haystack)));
66+
},
67+
);
68+
6069
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
6170
{
6271
use sliceslice::x86::DynamicAvx2Searcher;

0 commit comments

Comments
 (0)