|
| 1 | +#![allow(deprecated)] |
| 2 | + |
1 | 3 | use criterion::{black_box, criterion_group, criterion_main, Criterion}; |
2 | 4 | use memmem::{Searcher, TwoWaySearcher}; |
| 5 | +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] |
| 6 | +use sliceslice::x86::avx2::{deprecated::*, *}; |
3 | 7 | use std::{ |
4 | 8 | fs::{self, File}, |
5 | 9 | io::{BufRead, BufReader}, |
6 | 10 | }; |
7 | | -use strstr::avx2::*; |
8 | 11 |
|
9 | 12 | fn search_short_haystack(c: &mut Criterion) { |
10 | 13 | let mut needles = BufReader::new(File::open("data/words.txt").unwrap()) |
@@ -51,59 +54,64 @@ fn search_short_haystack(c: &mut Criterion) { |
51 | 54 | }); |
52 | 55 | }); |
53 | 56 |
|
54 | | - group.bench_function("strstr_avx2_original", |b| { |
55 | | - b.iter(|| { |
56 | | - for (i, needle) in needles.iter().enumerate() { |
57 | | - for haystack in &needles[i..] { |
58 | | - black_box(unsafe { |
59 | | - strstr_avx2_original(haystack.as_bytes(), needle.as_bytes()) |
60 | | - }); |
| 57 | + #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] |
| 58 | + { |
| 59 | + group.bench_function("strstr_avx2_original", |b| { |
| 60 | + b.iter(|| { |
| 61 | + for (i, needle) in needles.iter().enumerate() { |
| 62 | + for haystack in &needles[i..] { |
| 63 | + black_box(unsafe { |
| 64 | + strstr_avx2_original(haystack.as_bytes(), needle.as_bytes()) |
| 65 | + }); |
| 66 | + } |
61 | 67 | } |
62 | | - } |
| 68 | + }); |
63 | 69 | }); |
64 | | - }); |
65 | 70 |
|
66 | | - group.bench_function("strstr_avx2_rust", |b| { |
67 | | - b.iter(|| { |
68 | | - for (i, needle) in needles.iter().enumerate() { |
69 | | - for haystack in &needles[i..] { |
70 | | - black_box(strstr_avx2_rust(haystack.as_bytes(), needle.as_bytes())); |
| 71 | + group.bench_function("strstr_avx2_rust", |b| { |
| 72 | + b.iter(|| { |
| 73 | + for (i, needle) in needles.iter().enumerate() { |
| 74 | + for haystack in &needles[i..] { |
| 75 | + black_box(unsafe { |
| 76 | + strstr_avx2_rust(haystack.as_bytes(), needle.as_bytes()) |
| 77 | + }); |
| 78 | + } |
71 | 79 | } |
72 | | - } |
| 80 | + }); |
73 | 81 | }); |
74 | | - }); |
75 | 82 |
|
76 | | - group.bench_function("StrStrAVX2Searcher::search_in", |b| { |
77 | | - let searchers = needles |
78 | | - .iter() |
79 | | - .map(|&needle| StrStrAVX2Searcher::new(needle.as_bytes())) |
80 | | - .collect::<Vec<_>>(); |
81 | | - |
82 | | - b.iter(|| { |
83 | | - for (i, searcher) in searchers.iter().enumerate() { |
84 | | - for haystack in &needles[i..] { |
85 | | - black_box(searcher.search_in(haystack.as_bytes())); |
| 83 | + group.bench_function("StrStrAVX2Searcher::search_in", |b| { |
| 84 | + let searchers = needles |
| 85 | + .iter() |
| 86 | + .map(|&needle| unsafe { StrStrAVX2Searcher::new(needle.as_bytes()) }) |
| 87 | + .collect::<Vec<_>>(); |
| 88 | + |
| 89 | + b.iter(|| { |
| 90 | + for (i, searcher) in searchers.iter().enumerate() { |
| 91 | + for haystack in &needles[i..] { |
| 92 | + black_box(unsafe { searcher.search_in(haystack.as_bytes()) }); |
| 93 | + } |
86 | 94 | } |
87 | | - } |
| 95 | + }); |
88 | 96 | }); |
89 | | - }); |
90 | | - |
91 | | - group.bench_function("DynamicAvx2Searcher::search_in", |b| { |
92 | | - let searchers = needles |
93 | | - .iter() |
94 | | - .map(|&needle| unsafe { |
95 | | - DynamicAvx2Searcher::new(needle.as_bytes().to_owned().into_boxed_slice()) |
96 | | - }) |
97 | | - .collect::<Vec<_>>(); |
98 | 97 |
|
99 | | - b.iter(|| { |
100 | | - for (i, searcher) in searchers.iter().enumerate() { |
101 | | - for haystack in &needles[i..] { |
102 | | - black_box(searcher.search_in(haystack.as_bytes())); |
| 98 | + group.bench_function("DynamicAvx2Searcher::search_in", |b| { |
| 99 | + let searchers = needles |
| 100 | + .iter() |
| 101 | + .map(|&needle| unsafe { |
| 102 | + DynamicAvx2Searcher::new(needle.as_bytes().to_owned().into_boxed_slice()) |
| 103 | + }) |
| 104 | + .collect::<Vec<_>>(); |
| 105 | + |
| 106 | + b.iter(|| { |
| 107 | + for (i, searcher) in searchers.iter().enumerate() { |
| 108 | + for haystack in &needles[i..] { |
| 109 | + black_box(unsafe { searcher.search_in(haystack.as_bytes()) }); |
| 110 | + } |
103 | 111 | } |
104 | | - } |
| 112 | + }); |
105 | 113 | }); |
106 | | - }); |
| 114 | + } |
107 | 115 |
|
108 | 116 | group.finish(); |
109 | 117 | } |
@@ -148,49 +156,54 @@ fn search_long_haystack(c: &mut Criterion) { |
148 | 156 | }); |
149 | 157 | }); |
150 | 158 |
|
151 | | - group.bench_function("strstr_avx2_original", |b| { |
152 | | - b.iter(|| { |
153 | | - for needle in &needles { |
154 | | - black_box(unsafe { strstr_avx2_original(haystack.as_bytes(), needle.as_bytes()) }); |
155 | | - } |
| 159 | + #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] |
| 160 | + { |
| 161 | + group.bench_function("strstr_avx2_original", |b| { |
| 162 | + b.iter(|| { |
| 163 | + for needle in &needles { |
| 164 | + black_box(unsafe { |
| 165 | + strstr_avx2_original(haystack.as_bytes(), needle.as_bytes()) |
| 166 | + }); |
| 167 | + } |
| 168 | + }); |
156 | 169 | }); |
157 | | - }); |
158 | 170 |
|
159 | | - group.bench_function("strstr_avx2_rust", |b| { |
160 | | - b.iter(|| { |
161 | | - for needle in &needles { |
162 | | - black_box(strstr_avx2_rust(haystack.as_bytes(), needle.as_bytes())); |
163 | | - } |
| 171 | + group.bench_function("strstr_avx2_rust", |b| { |
| 172 | + b.iter(|| { |
| 173 | + for needle in &needles { |
| 174 | + black_box(unsafe { strstr_avx2_rust(haystack.as_bytes(), needle.as_bytes()) }); |
| 175 | + } |
| 176 | + }); |
164 | 177 | }); |
165 | | - }); |
166 | 178 |
|
167 | | - group.bench_function("StrStrAVX2Searcher::search_in", |b| { |
168 | | - let searchers = needles |
169 | | - .iter() |
170 | | - .map(|needle| StrStrAVX2Searcher::new(needle.as_bytes())) |
171 | | - .collect::<Vec<_>>(); |
| 179 | + group.bench_function("StrStrAVX2Searcher::search_in", |b| { |
| 180 | + let searchers = needles |
| 181 | + .iter() |
| 182 | + .map(|needle| unsafe { StrStrAVX2Searcher::new(needle.as_bytes()) }) |
| 183 | + .collect::<Vec<_>>(); |
172 | 184 |
|
173 | | - b.iter(|| { |
174 | | - for searcher in &searchers { |
175 | | - black_box(searcher.search_in(haystack.as_bytes())); |
176 | | - } |
| 185 | + b.iter(|| { |
| 186 | + for searcher in &searchers { |
| 187 | + black_box(unsafe { searcher.search_in(haystack.as_bytes()) }); |
| 188 | + } |
| 189 | + }); |
177 | 190 | }); |
178 | | - }); |
179 | | - |
180 | | - group.bench_function("DynamicAvx2Searcher::search_in", |b| { |
181 | | - let searchers = needles |
182 | | - .iter() |
183 | | - .map(|needle| unsafe { |
184 | | - DynamicAvx2Searcher::new(needle.as_bytes().to_owned().into_boxed_slice()) |
185 | | - }) |
186 | | - .collect::<Vec<_>>(); |
187 | 191 |
|
188 | | - b.iter(|| { |
189 | | - for searcher in &searchers { |
190 | | - black_box(searcher.search_in(haystack.as_bytes())); |
191 | | - } |
| 192 | + group.bench_function("DynamicAvx2Searcher::search_in", |b| { |
| 193 | + let searchers = needles |
| 194 | + .iter() |
| 195 | + .map(|needle| unsafe { |
| 196 | + DynamicAvx2Searcher::new(needle.as_bytes().to_owned().into_boxed_slice()) |
| 197 | + }) |
| 198 | + .collect::<Vec<_>>(); |
| 199 | + |
| 200 | + b.iter(|| { |
| 201 | + for searcher in &searchers { |
| 202 | + black_box(unsafe { searcher.search_in(haystack.as_bytes()) }); |
| 203 | + } |
| 204 | + }); |
192 | 205 | }); |
193 | | - }); |
| 206 | + } |
194 | 207 |
|
195 | 208 | group.finish(); |
196 | 209 | } |
|
0 commit comments