@@ -83,7 +83,7 @@ fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
83
83
84
84
#[ cfg( any( target_arch = "x86" , target_arch = "x86_64" ) ) ]
85
85
{
86
- use sliceslice:: x86:: DynamicAvx2Searcher ;
86
+ use sliceslice:: x86:: { Avx2Searcher , DynamicAvx2Searcher } ;
87
87
88
88
#[ cfg( feature = "sse4-strstr" ) ]
89
89
group. bench_function ( "sse4_strstr::avx2_strstr_v2" , |b| {
@@ -98,6 +98,21 @@ fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
98
98
} ) ;
99
99
} ) ;
100
100
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
+
101
116
group. bench_function ( "DynamicAvx2Searcher::search_in" , |b| {
102
117
let searchers = needles
103
118
. iter ( )
@@ -114,6 +129,26 @@ fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
114
129
} ) ;
115
130
}
116
131
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
+
117
152
group. finish ( ) ;
118
153
}
119
154
@@ -182,7 +217,7 @@ fn search_haystack<M: Measurement>(
182
217
183
218
#[ cfg( any( target_arch = "x86" , target_arch = "x86_64" ) ) ]
184
219
{
185
- use sliceslice:: x86:: DynamicAvx2Searcher ;
220
+ use sliceslice:: x86:: { Avx2Searcher , DynamicAvx2Searcher } ;
186
221
187
222
#[ cfg( feature = "sse4-strstr" ) ]
188
223
group. bench_function ( "sse4_strstr::avx2_strstr_v2" , |b| {
@@ -193,6 +228,19 @@ fn search_haystack<M: Measurement>(
193
228
} ) ;
194
229
} ) ;
195
230
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
+
196
244
group. bench_function ( "DynamicAvx2Searcher::search_in" , |b| {
197
245
let searchers = needles
198
246
. iter ( )
@@ -207,6 +255,24 @@ fn search_haystack<M: Measurement>(
207
255
} ) ;
208
256
}
209
257
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
+
210
276
group. finish ( ) ;
211
277
}
212
278
0 commit comments