blob: 692657f84b0fd72ccfc5a88608bf138a19dcfaaf [file] [log] [blame]
XNNPACK Teamb455b122019-09-27 18:10:33 -07001// Copyright (c) Facebook, Inc. and its affiliates.
2// All rights reserved.
3//
4// Copyright 2019 Google LLC
5//
6// This source code is licensed under the BSD-style license found in the
7// LICENSE file in the root directory of this source tree.
8
9#include <gtest/gtest.h>
10
11#include "convolution-operator-tester.h"
12
13
Marat Dukhan97262462021-06-18 16:14:17 -070014TEST(CONVOLUTION_NHWC_QC8, 1x1) {
15 ConvolutionOperatorTester()
16 .input_size(27, 29)
17 .kernel_size(1, 1)
18 .group_input_channels(23)
19 .group_output_channels(19)
20 .iterations(3)
21 .TestNHWCxQC8();
22}
23
24TEST(CONVOLUTION_NHWC_QC8, 1x1_with_qmin) {
25 ConvolutionOperatorTester()
26 .input_size(27, 29)
27 .kernel_size(1, 1)
28 .group_input_channels(23)
29 .group_output_channels(19)
30 .qmin(128)
31 .iterations(3)
32 .TestNHWCxQC8();
33}
34
35TEST(CONVOLUTION_NHWC_QC8, 1x1_with_qmax) {
36 ConvolutionOperatorTester()
37 .input_size(27, 29)
38 .kernel_size(1, 1)
39 .group_input_channels(23)
40 .group_output_channels(19)
41 .qmax(128)
42 .iterations(3)
43 .TestNHWCxQC8();
44}
45
46TEST(CONVOLUTION_NHWC_QC8, 1x1_with_input_stride) {
47 ConvolutionOperatorTester()
48 .input_size(27, 29)
49 .kernel_size(1, 1)
50 .input_channel_stride(28)
51 .group_input_channels(23)
52 .group_output_channels(19)
53 .iterations(3)
54 .TestNHWCxQC8();
55}
56
57TEST(CONVOLUTION_NHWC_QC8, 1x1_with_output_stride) {
58 ConvolutionOperatorTester()
59 .input_size(27, 29)
60 .kernel_size(1, 1)
61 .output_channel_stride(29)
62 .group_input_channels(23)
63 .group_output_channels(19)
64 .iterations(3)
65 .TestNHWCxQC8();
66}
67
68TEST(CONVOLUTION_NHWC_QC8, 1x1_without_bias) {
69 ConvolutionOperatorTester()
70 .has_bias(false)
71 .input_size(13, 14)
72 .kernel_size(1, 1)
73 .group_input_channels(23)
74 .group_output_channels(19)
75 .iterations(3)
76 .TestNHWCxQC8();
77}
78
79TEST(CONVOLUTION_NHWC_QC8, 1x1_with_batch) {
80 ConvolutionOperatorTester()
81 .batch_size(3)
82 .input_size(13, 14)
83 .kernel_size(1, 1)
84 .group_input_channels(23)
85 .group_output_channels(19)
86 .iterations(3)
87 .TestNHWCxQC8();
88}
89
90TEST(CONVOLUTION_NHWC_QC8, grouped_1x1) {
91 ConvolutionOperatorTester()
92 .input_size(24, 25)
93 .kernel_size(1, 1)
94 .groups(2)
95 .group_input_channels(17)
96 .group_output_channels(19)
97 .iterations(3)
98 .TestNHWCxQC8();
99}
100
101TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_qmin) {
102 ConvolutionOperatorTester()
103 .input_size(24, 25)
104 .kernel_size(1, 1)
105 .groups(2)
106 .group_input_channels(17)
107 .group_output_channels(19)
108 .qmin(128)
109 .iterations(3)
110 .TestNHWCxQC8();
111}
112
113TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_qmax) {
114 ConvolutionOperatorTester()
115 .input_size(24, 25)
116 .kernel_size(1, 1)
117 .groups(2)
118 .group_input_channels(17)
119 .group_output_channels(19)
120 .qmax(128)
121 .iterations(3)
122 .TestNHWCxQC8();
123}
124
125TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_input_stride) {
126 ConvolutionOperatorTester()
127 .input_size(24, 25)
128 .kernel_size(1, 1)
129 .groups(2)
130 .input_channel_stride(37)
131 .group_input_channels(17)
132 .group_output_channels(19)
133 .iterations(3)
134 .TestNHWCxQC8();
135}
136
137TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_output_stride) {
138 ConvolutionOperatorTester()
139 .input_size(24, 25)
140 .kernel_size(1, 1)
141 .groups(2)
142 .output_channel_stride(41)
143 .group_input_channels(17)
144 .group_output_channels(19)
145 .iterations(3)
146 .TestNHWCxQC8();
147}
148
149TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_without_bias) {
150 ConvolutionOperatorTester()
151 .has_bias(false)
152 .input_size(24, 25)
153 .kernel_size(1, 1)
154 .groups(2)
155 .group_input_channels(17)
156 .group_output_channels(19)
157 .iterations(3)
158 .TestNHWCxQC8();
159}
160
161TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_batch) {
162 ConvolutionOperatorTester()
163 .batch_size(3)
164 .input_size(24, 25)
165 .kernel_size(1, 1)
166 .groups(2)
167 .group_input_channels(17)
168 .group_output_channels(19)
169 .iterations(3)
170 .TestNHWCxQC8();
171}
172
173TEST(CONVOLUTION_NHWC_QC8, 1x3) {
174 ConvolutionOperatorTester()
175 .input_size(20, 19)
176 .padding_width(1)
177 .kernel_size(1, 3)
178 .group_input_channels(17)
179 .group_output_channels(15)
180 .iterations(3)
181 .TestNHWCxQC8();
182}
183
184TEST(CONVOLUTION_NHWC_QC8, grouped_1x3) {
185 ConvolutionOperatorTester()
186 .input_size(20, 19)
187 .padding_width(1)
188 .kernel_size(1, 3)
189 .groups(2)
190 .group_input_channels(17)
191 .group_output_channels(15)
192 .iterations(3)
193 .TestNHWCxQC8();
194}
195
196TEST(CONVOLUTION_NHWC_QC8, 3x1) {
197 ConvolutionOperatorTester()
198 .input_size(19, 20)
199 .padding_height(1)
200 .kernel_size(3, 1)
201 .group_input_channels(17)
202 .group_output_channels(15)
203 .iterations(3)
204 .TestNHWCxQC8();
205}
206
207TEST(CONVOLUTION_NHWC_QC8, grouped_3x1) {
208 ConvolutionOperatorTester()
209 .input_size(19, 20)
210 .padding_height(1)
211 .kernel_size(3, 1)
212 .groups(2)
213 .group_input_channels(17)
214 .group_output_channels(15)
215 .iterations(3)
216 .TestNHWCxQC8();
217}
218
219TEST(CONVOLUTION_NHWC_QC8, 3x3) {
220 ConvolutionOperatorTester()
221 .input_size(13, 12)
222 .padding(1)
223 .kernel_size(3, 3)
224 .group_input_channels(15)
225 .group_output_channels(17)
226 .iterations(3)
227 .TestNHWCxQC8();
228}
229
230TEST(CONVOLUTION_NHWC_QC8, 3x3_without_padding) {
231 ConvolutionOperatorTester()
232 .input_size(13, 12)
233 .kernel_size(3, 3)
234 .group_input_channels(15)
235 .group_output_channels(17)
236 .iterations(3)
237 .TestNHWCxQC8();
238}
239
240TEST(CONVOLUTION_NHWC_QC8, 3x3_with_left_padding) {
241 ConvolutionOperatorTester()
242 .input_size(13, 12)
243 .padding_left(1)
244 .kernel_size(3, 3)
245 .group_input_channels(15)
246 .group_output_channels(17)
247 .iterations(3)
248 .TestNHWCxQC8();
249}
250
251TEST(CONVOLUTION_NHWC_QC8, 3x3_with_right_padding) {
252 ConvolutionOperatorTester()
253 .input_size(13, 12)
254 .padding_right(1)
255 .kernel_size(3, 3)
256 .group_input_channels(15)
257 .group_output_channels(17)
258 .iterations(3)
259 .TestNHWCxQC8();
260}
261
262TEST(CONVOLUTION_NHWC_QC8, 3x3_with_top_padding) {
263 ConvolutionOperatorTester()
264 .input_size(13, 12)
265 .padding_top(1)
266 .kernel_size(3, 3)
267 .group_input_channels(15)
268 .group_output_channels(17)
269 .iterations(3)
270 .TestNHWCxQC8();
271}
272
273TEST(CONVOLUTION_NHWC_QC8, 3x3_with_bottom_padding) {
274 ConvolutionOperatorTester()
275 .input_size(13, 12)
276 .padding_bottom(1)
277 .kernel_size(3, 3)
278 .group_input_channels(15)
279 .group_output_channels(17)
280 .iterations(3)
281 .TestNHWCxQC8();
282}
283
284TEST(CONVOLUTION_NHWC_QC8, 3x3_with_input_stride) {
285 ConvolutionOperatorTester()
286 .input_size(13, 12)
287 .padding(1)
288 .kernel_size(3, 3)
289 .input_channel_stride(22)
290 .group_input_channels(15)
291 .group_output_channels(17)
292 .iterations(3)
293 .TestNHWCxQC8();
294}
295
296TEST(CONVOLUTION_NHWC_QC8, 3x3_with_output_stride) {
297 ConvolutionOperatorTester()
298 .input_size(13, 12)
299 .padding(1)
300 .kernel_size(3, 3)
301 .output_channel_stride(23)
302 .group_input_channels(15)
303 .group_output_channels(17)
304 .iterations(3)
305 .TestNHWCxQC8();
306}
307
308TEST(CONVOLUTION_NHWC_QC8, 3x3_without_bias) {
309 ConvolutionOperatorTester()
310 .has_bias(false)
311 .input_size(10, 9)
312 .padding(1)
313 .kernel_size(3, 3)
314 .group_input_channels(15)
315 .group_output_channels(17)
316 .iterations(3)
317 .TestNHWCxQC8();
318}
319
320TEST(CONVOLUTION_NHWC_QC8, 3x3_with_batch) {
321 ConvolutionOperatorTester()
322 .batch_size(3)
323 .input_size(10, 9)
324 .padding(1)
325 .kernel_size(3, 3)
326 .group_input_channels(15)
327 .group_output_channels(17)
328 .iterations(3)
329 .TestNHWCxQC8();
330}
331
332TEST(CONVOLUTION_NHWC_QC8, grouped_3x3) {
333 ConvolutionOperatorTester()
334 .input_size(10, 11)
335 .padding(1)
336 .kernel_size(3, 3)
337 .groups(2)
338 .group_input_channels(14)
339 .group_output_channels(13)
340 .iterations(3)
341 .TestNHWCxQC8();
342}
343
344TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_without_padding) {
345 ConvolutionOperatorTester()
346 .input_size(13, 12)
347 .kernel_size(3, 3)
348 .group_input_channels(15)
349 .group_output_channels(17)
350 .iterations(3)
351 .TestNHWCxQC8();
352}
353
354TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_left_padding) {
355 ConvolutionOperatorTester()
356 .input_size(10, 11)
357 .padding_left(1)
358 .kernel_size(3, 3)
359 .groups(2)
360 .group_input_channels(14)
361 .group_output_channels(13)
362 .iterations(3)
363 .TestNHWCxQC8();
364}
365
366TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_right_padding) {
367 ConvolutionOperatorTester()
368 .input_size(10, 11)
369 .padding_right(1)
370 .kernel_size(3, 3)
371 .groups(2)
372 .group_input_channels(14)
373 .group_output_channels(13)
374 .iterations(3)
375 .TestNHWCxQC8();
376}
377
378TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_top_padding) {
379 ConvolutionOperatorTester()
380 .input_size(10, 11)
381 .padding_top(1)
382 .kernel_size(3, 3)
383 .groups(2)
384 .group_input_channels(14)
385 .group_output_channels(13)
386 .iterations(3)
387 .TestNHWCxQC8();
388}
389
390TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_bottom_padding) {
391 ConvolutionOperatorTester()
392 .input_size(10, 11)
393 .padding_bottom(1)
394 .kernel_size(3, 3)
395 .groups(2)
396 .group_input_channels(14)
397 .group_output_channels(13)
398 .iterations(3)
399 .TestNHWCxQC8();
400}
401
402TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_input_stride) {
403 ConvolutionOperatorTester()
404 .input_size(10, 11)
405 .padding(1)
406 .kernel_size(3, 3)
407 .groups(2)
408 .input_channel_stride(29)
409 .group_input_channels(14)
410 .group_output_channels(13)
411 .iterations(3)
412 .TestNHWCxQC8();
413}
414
415TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_output_stride) {
416 ConvolutionOperatorTester()
417 .input_size(10, 11)
418 .padding(1)
419 .kernel_size(3, 3)
420 .groups(2)
421 .output_channel_stride(31)
422 .group_input_channels(14)
423 .group_output_channels(13)
424 .iterations(3)
425 .TestNHWCxQC8();
426}
427
428TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_without_bias) {
429 ConvolutionOperatorTester()
430 .has_bias(false)
431 .input_size(10, 11)
432 .padding(1)
433 .kernel_size(3, 3)
434 .groups(2)
435 .group_input_channels(14)
436 .group_output_channels(13)
437 .iterations(3)
438 .TestNHWCxQC8();
439}
440
441TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_batch) {
442 ConvolutionOperatorTester()
443 .batch_size(3)
444 .input_size(10, 11)
445 .padding(1)
446 .kernel_size(3, 3)
447 .groups(2)
448 .group_input_channels(14)
449 .group_output_channels(13)
450 .iterations(3)
451 .TestNHWCxQC8();
452}
453
454TEST(CONVOLUTION_NHWC_QC8, 3x3s2) {
455 ConvolutionOperatorTester()
456 .input_size(14, 13)
457 .padding(1)
458 .kernel_size(3, 3)
459 .subsampling(2)
460 .group_input_channels(27)
461 .group_output_channels(19)
462 .iterations(3)
463 .TestNHWCxQC8();
464}
465
466TEST(CONVOLUTION_NHWC_QC8, 3x3s2_with_tf_same_padding) {
467 for (size_t input_height = 13; input_height <= 14; input_height++) {
468 for (size_t input_width = 13; input_width <= 14; input_width++) {
469 ConvolutionOperatorTester()
470 .input_size(input_height, input_width)
471 .padding_tf_same(true)
472 .kernel_size(3, 3)
473 .subsampling(2)
474 .group_input_channels(27)
475 .group_output_channels(19)
476 .iterations(3)
477 .TestNHWCxQC8();
478 }
479 }
480}
481
482TEST(CONVOLUTION_NHWC_QC8, 3x3s1x2) {
483 ConvolutionOperatorTester()
484 .input_size(14, 13)
485 .padding(1)
486 .kernel_size(3, 3)
487 .subsampling(1, 2)
488 .group_input_channels(27)
489 .group_output_channels(19)
490 .iterations(3)
491 .TestNHWCxQC8();
492}
493
494TEST(CONVOLUTION_NHWC_QC8, 3x3s1x2_with_tf_same_padding) {
495 for (size_t input_height = 13; input_height <= 14; input_height++) {
496 for (size_t input_width = 13; input_width <= 14; input_width++) {
497 ConvolutionOperatorTester()
498 .input_size(input_height, input_width)
499 .padding_tf_same(true)
500 .kernel_size(3, 3)
501 .subsampling(1, 2)
502 .group_input_channels(27)
503 .group_output_channels(19)
504 .iterations(3)
505 .TestNHWCxQC8();
506 }
507 }
508}
509
510TEST(CONVOLUTION_NHWC_QC8, 3x3s2x1) {
511 ConvolutionOperatorTester()
512 .input_size(14, 13)
513 .padding(1)
514 .kernel_size(3, 3)
515 .subsampling(2, 1)
516 .group_input_channels(27)
517 .group_output_channels(19)
518 .iterations(3)
519 .TestNHWCxQC8();
520}
521
522TEST(CONVOLUTION_NHWC_QC8, 3x3s2x1_with_tf_same_padding) {
523 for (size_t input_height = 13; input_height <= 14; input_height++) {
524 for (size_t input_width = 13; input_width <= 14; input_width++) {
525 ConvolutionOperatorTester()
526 .input_size(input_height, input_width)
527 .padding_tf_same(true)
528 .kernel_size(3, 3)
529 .subsampling(2, 1)
530 .group_input_channels(27)
531 .group_output_channels(19)
532 .iterations(3)
533 .TestNHWCxQC8();
534 }
535 }
536}
537
538TEST(CONVOLUTION_NHWC_QC8, 3x3d2) {
539 ConvolutionOperatorTester()
540 .input_size(14, 13)
541 .padding(2)
542 .kernel_size(3, 3)
543 .dilation(2)
544 .group_input_channels(27)
545 .group_output_channels(19)
546 .iterations(3)
547 .TestNHWCxQC8();
548}
549
550TEST(CONVOLUTION_NHWC_QC8, 3x3d1x2) {
551 ConvolutionOperatorTester()
552 .input_size(14, 13)
553 .padding(1, 2)
554 .kernel_size(3, 3)
555 .dilation(1, 2)
556 .group_input_channels(27)
557 .group_output_channels(19)
558 .iterations(3)
559 .TestNHWCxQC8();
560}
561
562TEST(CONVOLUTION_NHWC_QC8, 3x3d2x1) {
563 ConvolutionOperatorTester()
564 .input_size(14, 13)
565 .padding(2, 1)
566 .kernel_size(3, 3)
567 .dilation(2, 1)
568 .group_input_channels(27)
569 .group_output_channels(19)
570 .iterations(3)
571 .TestNHWCxQC8();
572}
573
574TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3) {
575 ConvolutionOperatorTester()
576 .input_size(15, 14)
577 .padding(1, 1)
578 .kernel_size(3, 3)
579 .groups(27)
580 .iterations(3)
581 .TestNHWCxQC8();
582}
583
584TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3_without_bias) {
585 ConvolutionOperatorTester()
586 .has_bias(false)
587 .input_size(15, 14)
588 .padding(1, 1)
589 .kernel_size(3, 3)
590 .groups(27)
591 .iterations(3)
592 .TestNHWCxQC8();
593}
594
595TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s2) {
596 ConvolutionOperatorTester()
597 .input_size(15, 14)
598 .padding(1, 1)
599 .kernel_size(3, 3)
600 .subsampling(2)
601 .groups(27)
602 .iterations(3)
603 .TestNHWCxQC8();
604}
605
606TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s2_with_tf_same_padding) {
607 for (size_t input_height = 14; input_height <= 15; input_height++) {
608 for (size_t input_width = 14; input_width <= 15; input_width++) {
609 ConvolutionOperatorTester()
610 .input_size(input_height, input_width)
611 .padding_tf_same(true)
612 .kernel_size(3, 3)
613 .subsampling(2)
614 .groups(27)
615 .iterations(3)
616 .TestNHWCxQC8();
617 }
618 }
619}
620
621TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s1x2) {
622 ConvolutionOperatorTester()
623 .input_size(15, 14)
624 .padding(1, 1)
625 .kernel_size(3, 3)
626 .subsampling(1, 2)
627 .groups(27)
628 .iterations(3)
629 .TestNHWCxQC8();
630}
631
632TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s1x2_with_tf_same_padding) {
633 for (size_t input_height = 14; input_height <= 15; input_height++) {
634 for (size_t input_width = 14; input_width <= 15; input_width++) {
635 ConvolutionOperatorTester()
636 .input_size(input_height, input_width)
637 .padding_tf_same(true)
638 .kernel_size(3, 3)
639 .subsampling(1, 2)
640 .groups(27)
641 .iterations(3)
642 .TestNHWCxQC8();
643 }
644 }
645}
646
647TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s2x1) {
648 ConvolutionOperatorTester()
649 .input_size(15, 14)
650 .padding(1, 1)
651 .kernel_size(3, 3)
652 .subsampling(2, 1)
653 .groups(27)
654 .iterations(3)
655 .TestNHWCxQC8();
656}
657
658TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s2x1_with_tf_same_padding) {
659 for (size_t input_height = 14; input_height <= 15; input_height++) {
660 for (size_t input_width = 14; input_width <= 15; input_width++) {
661 ConvolutionOperatorTester()
662 .input_size(input_height, input_width)
663 .padding_tf_same(true)
664 .kernel_size(3, 3)
665 .subsampling(2, 1)
666 .groups(27)
667 .iterations(3)
668 .TestNHWCxQC8();
669 }
670 }
671}
672
673TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3d2) {
674 ConvolutionOperatorTester()
675 .input_size(15, 14)
676 .padding(1, 1)
677 .kernel_size(3, 3)
678 .dilation(2)
679 .groups(27)
680 .iterations(3)
681 .TestNHWCxQC8();
682}
683
684TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3d1x2) {
685 ConvolutionOperatorTester()
686 .input_size(15, 14)
687 .padding(1, 1)
688 .kernel_size(3, 3)
689 .dilation(1, 2)
690 .groups(27)
691 .iterations(3)
692 .TestNHWCxQC8();
693}
694
695TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3d2x1) {
696 ConvolutionOperatorTester()
697 .input_size(15, 14)
698 .padding(1, 1)
699 .kernel_size(3, 3)
700 .dilation(2, 1)
701 .groups(27)
702 .iterations(3)
703 .TestNHWCxQC8();
704}
705
706TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 1x1) {
707 ConvolutionOperatorTester()
708 .depthwise_layout(true)
709 .input_size(15, 14)
710 .kernel_size(1, 1)
711 .groups(24)
712 .iterations(3)
713 .TestNHWCxQC8();
714}
715
716TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 1x1_with_depth_multiplier) {
717 ConvolutionOperatorTester()
718 .depthwise_layout(true)
719 .input_size(15, 14)
720 .kernel_size(1, 1)
721 .groups(24)
722 .group_output_channels(3)
723 .iterations(3)
724 .TestNHWCxQC8();
725}
726
727TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 1x1_without_bias) {
728 ConvolutionOperatorTester()
729 .depthwise_layout(true)
730 .has_bias(false)
731 .input_size(15, 14)
732 .kernel_size(1, 1)
733 .groups(24)
734 .iterations(3)
735 .TestNHWCxQC8();
736}
737
738TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 3x3) {
739 ConvolutionOperatorTester()
740 .depthwise_layout(true)
741 .input_size(15, 14)
742 .padding(1, 1)
743 .kernel_size(3, 3)
744 .groups(24)
745 .iterations(3)
746 .TestNHWCxQC8();
747}
748
749TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 3x3_with_depth_multiplier) {
750 ConvolutionOperatorTester()
751 .depthwise_layout(true)
752 .input_size(15, 14)
753 .padding(1, 1)
754 .kernel_size(3, 3)
755 .groups(24)
756 .group_output_channels(3)
757 .iterations(3)
758 .TestNHWCxQC8();
759}
760
761TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 3x3_without_bias) {
762 ConvolutionOperatorTester()
763 .depthwise_layout(true)
764 .has_bias(false)
765 .input_size(15, 14)
766 .padding(1, 1)
767 .kernel_size(3, 3)
768 .groups(24)
769 .iterations(3)
770 .TestNHWCxQC8();
771}
772
773TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 3x3s2_with_tf_same_padding) {
774 for (size_t input_height = 14; input_height <= 15; input_height++) {
775 for (size_t input_width = 14; input_width <= 15; input_width++) {
776 ConvolutionOperatorTester()
777 .depthwise_layout(true)
778 .input_size(input_height, input_width)
779 .padding_tf_same(true)
780 .kernel_size(3, 3)
781 .groups(24)
782 .iterations(3)
783 .TestNHWCxQC8();
784 }
785 }
786}
787
788TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 5x5) {
789 ConvolutionOperatorTester()
790 .depthwise_layout(true)
791 .input_size(15, 14)
792 .padding(2, 2)
793 .kernel_size(5, 5)
794 .groups(24)
795 .iterations(3)
796 .TestNHWCxQC8();
797}
798
799TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 5x5_without_bias) {
800 ConvolutionOperatorTester()
801 .depthwise_layout(true)
802 .has_bias(false)
803 .input_size(15, 14)
804 .padding(2, 2)
805 .kernel_size(5, 5)
806 .groups(24)
807 .iterations(3)
808 .TestNHWCxQC8();
809}
810
811TEST(CONVOLUTION_NHWC_QC8, setup_changing_input_buffer) {
812 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
813 ConvolutionOperatorTester()
814 .batch_size(3)
815 .input_height(8)
816 .input_width(8)
817 .kernel_height(5)
818 .kernel_width(3)
819 .group_input_channels(15)
820 .group_output_channels(17)
821 .TestSetupNHWCxQC8();
822}
823
824TEST(CONVOLUTION_NHWC_QC8, setup_changing_input_buffer_grouped) {
825 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
826 ConvolutionOperatorTester()
827 .batch_size(3)
828 .input_height(8)
829 .input_width(8)
830 .kernel_height(5)
831 .kernel_width(3)
832 .groups(2)
833 .group_input_channels(15)
834 .group_output_channels(17)
835 .TestSetupNHWCxQC8();
836}
837
838TEST(CONVOLUTION_NHWC_QC8, setup_changing_input_buffer_depthwise) {
839 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
840 ConvolutionOperatorTester()
841 .batch_size(3)
842 .input_height(8)
843 .input_width(8)
844 .kernel_height(3)
845 .kernel_width(3)
846 .groups(19)
847 .group_input_channels(1)
848 .group_output_channels(1)
849 .TestSetupNHWCxQC8();
850}
851
852TEST(CONVOLUTION_NHWC_QC8, setup_increasing_batch) {
853 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
854 ConvolutionOperatorTester()
855 .batch_size(3)
856 .next_batch_size(5)
857 .input_height(8)
858 .input_width(8)
859 .kernel_height(5)
860 .kernel_width(3)
861 .group_input_channels(15)
862 .group_output_channels(17)
863 .TestSetupNHWCxQC8();
864}
865
866TEST(CONVOLUTION_NHWC_QC8, setup_increasing_batch_grouped) {
867 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
868 ConvolutionOperatorTester()
869 .batch_size(3)
870 .next_batch_size(5)
871 .input_height(8)
872 .input_width(8)
873 .kernel_height(5)
874 .kernel_width(3)
875 .groups(2)
876 .group_input_channels(15)
877 .group_output_channels(17)
878 .TestSetupNHWCxQC8();
879}
880
881TEST(CONVOLUTION_NHWC_QC8, setup_increasing_batch_depthwise) {
882 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
883 ConvolutionOperatorTester()
884 .batch_size(3)
885 .next_batch_size(5)
886 .input_height(8)
887 .input_width(8)
888 .kernel_height(3)
889 .kernel_width(3)
890 .groups(19)
891 .group_input_channels(1)
892 .group_output_channels(1)
893 .TestSetupNHWCxQC8();
894}
895
896TEST(CONVOLUTION_NHWC_QC8, setup_decreasing_batch) {
897 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
898 ConvolutionOperatorTester()
899 .batch_size(5)
900 .next_batch_size(3)
901 .input_height(8)
902 .input_width(8)
903 .kernel_height(5)
904 .kernel_width(3)
905 .group_input_channels(15)
906 .group_output_channels(17)
907 .TestSetupNHWCxQC8();
908}
909
910TEST(CONVOLUTION_NHWC_QC8, setup_decreasing_batch_grouped) {
911 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
912 ConvolutionOperatorTester()
913 .batch_size(5)
914 .next_batch_size(3)
915 .input_height(8)
916 .input_width(8)
917 .kernel_height(5)
918 .kernel_width(3)
919 .groups(2)
920 .group_input_channels(15)
921 .group_output_channels(17)
922 .TestSetupNHWCxQC8();
923}
924
925TEST(CONVOLUTION_NHWC_QC8, setup_decreasing_batch_depthwise) {
926 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
927 ConvolutionOperatorTester()
928 .batch_size(5)
929 .next_batch_size(3)
930 .input_height(8)
931 .input_width(8)
932 .kernel_height(3)
933 .kernel_width(3)
934 .groups(19)
935 .group_input_channels(1)
936 .group_output_channels(1)
937 .TestSetupNHWCxQC8();
938}
939
940TEST(CONVOLUTION_NHWC_QC8, setup_changing_height) {
941 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
942 ConvolutionOperatorTester()
943 .batch_size(3)
944 .input_height(8)
945 .input_width(8)
946 .next_input_height(9)
947 .kernel_height(5)
948 .kernel_width(3)
949 .group_input_channels(15)
950 .group_output_channels(17)
951 .TestSetupNHWCxQC8();
952 ConvolutionOperatorTester()
953 .batch_size(3)
954 .input_height(8)
955 .input_width(8)
956 .next_input_height(7)
957 .kernel_height(5)
958 .kernel_width(3)
959 .group_input_channels(15)
960 .group_output_channels(17)
961 .TestSetupNHWCxQC8();
962}
963
964TEST(CONVOLUTION_NHWC_QC8, setup_changing_height_grouped) {
965 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
966 ConvolutionOperatorTester()
967 .batch_size(3)
968 .input_height(8)
969 .input_width(8)
970 .next_input_height(9)
971 .kernel_height(5)
972 .kernel_width(3)
973 .groups(2)
974 .group_input_channels(15)
975 .group_output_channels(17)
976 .TestSetupNHWCxQC8();
977 ConvolutionOperatorTester()
978 .batch_size(3)
979 .input_height(8)
980 .input_width(8)
981 .next_input_height(7)
982 .kernel_height(5)
983 .kernel_width(3)
984 .groups(2)
985 .group_input_channels(15)
986 .group_output_channels(17)
987 .TestSetupNHWCxQC8();
988}
989
990TEST(CONVOLUTION_NHWC_QC8, setup_changing_height_depthwise) {
991 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
992 ConvolutionOperatorTester()
993 .batch_size(3)
994 .input_height(8)
995 .input_width(8)
996 .next_input_height(9)
997 .kernel_height(3)
998 .kernel_width(3)
999 .groups(19)
1000 .group_input_channels(1)
1001 .group_output_channels(1)
1002 .TestSetupNHWCxQC8();
1003 ConvolutionOperatorTester()
1004 .batch_size(3)
1005 .input_height(8)
1006 .input_width(8)
1007 .next_input_height(7)
1008 .kernel_height(3)
1009 .kernel_width(3)
1010 .groups(19)
1011 .group_input_channels(1)
1012 .group_output_channels(1)
1013 .TestSetupNHWCxQC8();
1014}
1015
1016TEST(CONVOLUTION_NHWC_QC8, setup_changing_width) {
1017 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1018 ConvolutionOperatorTester()
1019 .batch_size(3)
1020 .input_height(8)
1021 .input_width(8)
1022 .next_input_width(9)
1023 .kernel_height(5)
1024 .kernel_width(3)
1025 .group_input_channels(15)
1026 .group_output_channels(17)
1027 .TestSetupNHWCxQC8();
1028 ConvolutionOperatorTester()
1029 .batch_size(3)
1030 .input_height(8)
1031 .input_width(8)
1032 .next_input_width(7)
1033 .kernel_height(5)
1034 .kernel_width(3)
1035 .group_input_channels(15)
1036 .group_output_channels(17)
1037 .TestSetupNHWCxQC8();
1038}
1039
1040TEST(CONVOLUTION_NHWC_QC8, setup_changing_width_grouped) {
1041 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1042 ConvolutionOperatorTester()
1043 .batch_size(3)
1044 .input_height(8)
1045 .input_width(8)
1046 .next_input_width(9)
1047 .kernel_height(5)
1048 .kernel_width(3)
1049 .groups(2)
1050 .group_input_channels(15)
1051 .group_output_channels(17)
1052 .TestSetupNHWCxQC8();
1053 ConvolutionOperatorTester()
1054 .batch_size(3)
1055 .input_height(8)
1056 .input_width(8)
1057 .next_input_width(7)
1058 .kernel_height(5)
1059 .kernel_width(3)
1060 .groups(2)
1061 .group_input_channels(15)
1062 .group_output_channels(17)
1063 .TestSetupNHWCxQC8();
1064}
1065
1066TEST(CONVOLUTION_NHWC_QC8, setup_changing_width_depthwise) {
1067 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1068 ConvolutionOperatorTester()
1069 .batch_size(3)
1070 .input_height(8)
1071 .input_width(8)
1072 .next_input_width(9)
1073 .kernel_height(3)
1074 .kernel_width(3)
1075 .groups(19)
1076 .group_input_channels(1)
1077 .group_output_channels(1)
1078 .TestSetupNHWCxQC8();
1079 ConvolutionOperatorTester()
1080 .batch_size(3)
1081 .input_height(8)
1082 .input_width(8)
1083 .next_input_width(7)
1084 .kernel_height(3)
1085 .kernel_width(3)
1086 .groups(19)
1087 .group_input_channels(1)
1088 .group_output_channels(1)
1089 .TestSetupNHWCxQC8();
1090}
1091
1092TEST(CONVOLUTION_NHWC_QC8, setup_swap_height_and_width) {
1093 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1094 ConvolutionOperatorTester()
1095 .batch_size(3)
1096 .input_height(9)
1097 .input_width(8)
1098 .next_input_height(8)
1099 .next_input_width(9)
1100 .kernel_height(5)
1101 .kernel_width(3)
1102 .group_input_channels(15)
1103 .group_output_channels(17)
1104 .TestSetupNHWCxQC8();
1105}
1106
1107TEST(CONVOLUTION_NHWC_QC8, setup_swap_height_and_width_grouped) {
1108 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1109 ConvolutionOperatorTester()
1110 .batch_size(3)
1111 .input_height(9)
1112 .input_width(8)
1113 .next_input_height(8)
1114 .next_input_width(9)
1115 .kernel_height(5)
1116 .kernel_width(3)
1117 .groups(2)
1118 .group_input_channels(15)
1119 .group_output_channels(17)
1120 .TestSetupNHWCxQC8();
1121}
1122
1123TEST(CONVOLUTION_NHWC_QC8, setup_swap_height_and_width_depthwise) {
1124 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1125 ConvolutionOperatorTester()
1126 .batch_size(3)
1127 .input_height(9)
1128 .input_width(8)
1129 .next_input_height(8)
1130 .next_input_width(9)
1131 .kernel_height(3)
1132 .kernel_width(3)
1133 .groups(19)
1134 .group_input_channels(1)
1135 .group_output_channels(1)
1136 .TestSetupNHWCxQC8();
1137}
1138
1139
Marat Dukhan16f1e1a2020-08-04 16:38:22 -07001140TEST(CONVOLUTION_NHWC_QS8, 1x1) {
1141 ConvolutionOperatorTester()
1142 .input_size(27, 29)
1143 .kernel_size(1, 1)
1144 .group_input_channels(23)
1145 .group_output_channels(19)
1146 .iterations(3)
1147 .TestNHWCxQS8();
1148}
1149
1150TEST(CONVOLUTION_NHWC_QS8, 1x1_with_qmin) {
1151 ConvolutionOperatorTester()
1152 .input_size(27, 29)
1153 .kernel_size(1, 1)
1154 .group_input_channels(23)
1155 .group_output_channels(19)
1156 .qmin(128)
1157 .iterations(3)
1158 .TestNHWCxQS8();
1159}
1160
1161TEST(CONVOLUTION_NHWC_QS8, 1x1_with_qmax) {
1162 ConvolutionOperatorTester()
1163 .input_size(27, 29)
1164 .kernel_size(1, 1)
1165 .group_input_channels(23)
1166 .group_output_channels(19)
1167 .qmax(128)
1168 .iterations(3)
1169 .TestNHWCxQS8();
1170}
1171
1172TEST(CONVOLUTION_NHWC_QS8, 1x1_with_input_stride) {
1173 ConvolutionOperatorTester()
1174 .input_size(27, 29)
1175 .kernel_size(1, 1)
1176 .input_channel_stride(28)
1177 .group_input_channels(23)
1178 .group_output_channels(19)
1179 .iterations(3)
1180 .TestNHWCxQS8();
1181}
1182
1183TEST(CONVOLUTION_NHWC_QS8, 1x1_with_output_stride) {
1184 ConvolutionOperatorTester()
1185 .input_size(27, 29)
1186 .kernel_size(1, 1)
1187 .output_channel_stride(29)
1188 .group_input_channels(23)
1189 .group_output_channels(19)
1190 .iterations(3)
1191 .TestNHWCxQS8();
1192}
1193
1194TEST(CONVOLUTION_NHWC_QS8, 1x1_without_bias) {
1195 ConvolutionOperatorTester()
1196 .has_bias(false)
1197 .input_size(13, 14)
1198 .kernel_size(1, 1)
1199 .group_input_channels(23)
1200 .group_output_channels(19)
1201 .iterations(3)
1202 .TestNHWCxQS8();
1203}
1204
1205TEST(CONVOLUTION_NHWC_QS8, 1x1_with_batch) {
1206 ConvolutionOperatorTester()
1207 .batch_size(3)
1208 .input_size(13, 14)
1209 .kernel_size(1, 1)
1210 .group_input_channels(23)
1211 .group_output_channels(19)
1212 .iterations(3)
1213 .TestNHWCxQS8();
1214}
1215
1216TEST(CONVOLUTION_NHWC_QS8, grouped_1x1) {
1217 ConvolutionOperatorTester()
1218 .input_size(24, 25)
1219 .kernel_size(1, 1)
1220 .groups(2)
1221 .group_input_channels(17)
1222 .group_output_channels(19)
1223 .iterations(3)
1224 .TestNHWCxQS8();
1225}
1226
1227TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_qmin) {
1228 ConvolutionOperatorTester()
1229 .input_size(24, 25)
1230 .kernel_size(1, 1)
1231 .groups(2)
1232 .group_input_channels(17)
1233 .group_output_channels(19)
1234 .qmin(128)
1235 .iterations(3)
1236 .TestNHWCxQS8();
1237}
1238
1239TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_qmax) {
1240 ConvolutionOperatorTester()
1241 .input_size(24, 25)
1242 .kernel_size(1, 1)
1243 .groups(2)
1244 .group_input_channels(17)
1245 .group_output_channels(19)
1246 .qmax(128)
1247 .iterations(3)
1248 .TestNHWCxQS8();
1249}
1250
1251TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_input_stride) {
1252 ConvolutionOperatorTester()
1253 .input_size(24, 25)
1254 .kernel_size(1, 1)
1255 .groups(2)
1256 .input_channel_stride(37)
1257 .group_input_channels(17)
1258 .group_output_channels(19)
1259 .iterations(3)
1260 .TestNHWCxQS8();
1261}
1262
1263TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_output_stride) {
1264 ConvolutionOperatorTester()
1265 .input_size(24, 25)
1266 .kernel_size(1, 1)
1267 .groups(2)
1268 .output_channel_stride(41)
1269 .group_input_channels(17)
1270 .group_output_channels(19)
1271 .iterations(3)
1272 .TestNHWCxQS8();
1273}
1274
1275TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_without_bias) {
1276 ConvolutionOperatorTester()
1277 .has_bias(false)
1278 .input_size(24, 25)
1279 .kernel_size(1, 1)
1280 .groups(2)
1281 .group_input_channels(17)
1282 .group_output_channels(19)
1283 .iterations(3)
1284 .TestNHWCxQS8();
1285}
1286
1287TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_batch) {
1288 ConvolutionOperatorTester()
1289 .batch_size(3)
1290 .input_size(24, 25)
1291 .kernel_size(1, 1)
1292 .groups(2)
1293 .group_input_channels(17)
1294 .group_output_channels(19)
1295 .iterations(3)
1296 .TestNHWCxQS8();
1297}
1298
1299TEST(CONVOLUTION_NHWC_QS8, 1x3) {
1300 ConvolutionOperatorTester()
1301 .input_size(20, 19)
1302 .padding_width(1)
1303 .kernel_size(1, 3)
1304 .group_input_channels(17)
1305 .group_output_channels(15)
1306 .iterations(3)
1307 .TestNHWCxQS8();
1308}
1309
1310TEST(CONVOLUTION_NHWC_QS8, grouped_1x3) {
1311 ConvolutionOperatorTester()
1312 .input_size(20, 19)
1313 .padding_width(1)
1314 .kernel_size(1, 3)
1315 .groups(2)
1316 .group_input_channels(17)
1317 .group_output_channels(15)
1318 .iterations(3)
1319 .TestNHWCxQS8();
1320}
1321
1322TEST(CONVOLUTION_NHWC_QS8, 3x1) {
1323 ConvolutionOperatorTester()
1324 .input_size(19, 20)
1325 .padding_height(1)
1326 .kernel_size(3, 1)
1327 .group_input_channels(17)
1328 .group_output_channels(15)
1329 .iterations(3)
1330 .TestNHWCxQS8();
1331}
1332
1333TEST(CONVOLUTION_NHWC_QS8, grouped_3x1) {
1334 ConvolutionOperatorTester()
1335 .input_size(19, 20)
1336 .padding_height(1)
1337 .kernel_size(3, 1)
1338 .groups(2)
1339 .group_input_channels(17)
1340 .group_output_channels(15)
1341 .iterations(3)
1342 .TestNHWCxQS8();
1343}
1344
1345TEST(CONVOLUTION_NHWC_QS8, 3x3) {
1346 ConvolutionOperatorTester()
1347 .input_size(13, 12)
1348 .padding(1)
1349 .kernel_size(3, 3)
1350 .group_input_channels(15)
1351 .group_output_channels(17)
1352 .iterations(3)
1353 .TestNHWCxQS8();
1354}
1355
1356TEST(CONVOLUTION_NHWC_QS8, 3x3_without_padding) {
1357 ConvolutionOperatorTester()
1358 .input_size(13, 12)
1359 .kernel_size(3, 3)
1360 .group_input_channels(15)
1361 .group_output_channels(17)
1362 .iterations(3)
1363 .TestNHWCxQS8();
1364}
1365
1366TEST(CONVOLUTION_NHWC_QS8, 3x3_with_left_padding) {
1367 ConvolutionOperatorTester()
1368 .input_size(13, 12)
1369 .padding_left(1)
1370 .kernel_size(3, 3)
1371 .group_input_channels(15)
1372 .group_output_channels(17)
1373 .iterations(3)
1374 .TestNHWCxQS8();
1375}
1376
1377TEST(CONVOLUTION_NHWC_QS8, 3x3_with_right_padding) {
1378 ConvolutionOperatorTester()
1379 .input_size(13, 12)
1380 .padding_right(1)
1381 .kernel_size(3, 3)
1382 .group_input_channels(15)
1383 .group_output_channels(17)
1384 .iterations(3)
1385 .TestNHWCxQS8();
1386}
1387
1388TEST(CONVOLUTION_NHWC_QS8, 3x3_with_top_padding) {
1389 ConvolutionOperatorTester()
1390 .input_size(13, 12)
1391 .padding_top(1)
1392 .kernel_size(3, 3)
1393 .group_input_channels(15)
1394 .group_output_channels(17)
1395 .iterations(3)
1396 .TestNHWCxQS8();
1397}
1398
1399TEST(CONVOLUTION_NHWC_QS8, 3x3_with_bottom_padding) {
1400 ConvolutionOperatorTester()
1401 .input_size(13, 12)
1402 .padding_bottom(1)
1403 .kernel_size(3, 3)
1404 .group_input_channels(15)
1405 .group_output_channels(17)
1406 .iterations(3)
1407 .TestNHWCxQS8();
1408}
1409
1410TEST(CONVOLUTION_NHWC_QS8, 3x3_with_input_stride) {
1411 ConvolutionOperatorTester()
1412 .input_size(13, 12)
1413 .padding(1)
1414 .kernel_size(3, 3)
1415 .input_channel_stride(22)
1416 .group_input_channels(15)
1417 .group_output_channels(17)
1418 .iterations(3)
1419 .TestNHWCxQS8();
1420}
1421
1422TEST(CONVOLUTION_NHWC_QS8, 3x3_with_output_stride) {
1423 ConvolutionOperatorTester()
1424 .input_size(13, 12)
1425 .padding(1)
1426 .kernel_size(3, 3)
1427 .output_channel_stride(23)
1428 .group_input_channels(15)
1429 .group_output_channels(17)
1430 .iterations(3)
1431 .TestNHWCxQS8();
1432}
1433
1434TEST(CONVOLUTION_NHWC_QS8, 3x3_without_bias) {
1435 ConvolutionOperatorTester()
1436 .has_bias(false)
1437 .input_size(10, 9)
1438 .padding(1)
1439 .kernel_size(3, 3)
1440 .group_input_channels(15)
1441 .group_output_channels(17)
1442 .iterations(3)
1443 .TestNHWCxQS8();
1444}
1445
1446TEST(CONVOLUTION_NHWC_QS8, 3x3_with_batch) {
1447 ConvolutionOperatorTester()
1448 .batch_size(3)
1449 .input_size(10, 9)
1450 .padding(1)
1451 .kernel_size(3, 3)
1452 .group_input_channels(15)
1453 .group_output_channels(17)
1454 .iterations(3)
1455 .TestNHWCxQS8();
1456}
1457
1458TEST(CONVOLUTION_NHWC_QS8, grouped_3x3) {
1459 ConvolutionOperatorTester()
1460 .input_size(10, 11)
1461 .padding(1)
1462 .kernel_size(3, 3)
1463 .groups(2)
1464 .group_input_channels(14)
1465 .group_output_channels(13)
1466 .iterations(3)
1467 .TestNHWCxQS8();
1468}
1469
1470TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_without_padding) {
1471 ConvolutionOperatorTester()
1472 .input_size(13, 12)
1473 .kernel_size(3, 3)
1474 .group_input_channels(15)
1475 .group_output_channels(17)
1476 .iterations(3)
1477 .TestNHWCxQS8();
1478}
1479
1480TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_left_padding) {
1481 ConvolutionOperatorTester()
1482 .input_size(10, 11)
1483 .padding_left(1)
1484 .kernel_size(3, 3)
1485 .groups(2)
1486 .group_input_channels(14)
1487 .group_output_channels(13)
1488 .iterations(3)
1489 .TestNHWCxQS8();
1490}
1491
1492TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_right_padding) {
1493 ConvolutionOperatorTester()
1494 .input_size(10, 11)
1495 .padding_right(1)
1496 .kernel_size(3, 3)
1497 .groups(2)
1498 .group_input_channels(14)
1499 .group_output_channels(13)
1500 .iterations(3)
1501 .TestNHWCxQS8();
1502}
1503
1504TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_top_padding) {
1505 ConvolutionOperatorTester()
1506 .input_size(10, 11)
1507 .padding_top(1)
1508 .kernel_size(3, 3)
1509 .groups(2)
1510 .group_input_channels(14)
1511 .group_output_channels(13)
1512 .iterations(3)
1513 .TestNHWCxQS8();
1514}
1515
1516TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_bottom_padding) {
1517 ConvolutionOperatorTester()
1518 .input_size(10, 11)
1519 .padding_bottom(1)
1520 .kernel_size(3, 3)
1521 .groups(2)
1522 .group_input_channels(14)
1523 .group_output_channels(13)
1524 .iterations(3)
1525 .TestNHWCxQS8();
1526}
1527
1528TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_input_stride) {
1529 ConvolutionOperatorTester()
1530 .input_size(10, 11)
1531 .padding(1)
1532 .kernel_size(3, 3)
1533 .groups(2)
1534 .input_channel_stride(29)
1535 .group_input_channels(14)
1536 .group_output_channels(13)
1537 .iterations(3)
1538 .TestNHWCxQS8();
1539}
1540
1541TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_output_stride) {
1542 ConvolutionOperatorTester()
1543 .input_size(10, 11)
1544 .padding(1)
1545 .kernel_size(3, 3)
1546 .groups(2)
1547 .output_channel_stride(31)
1548 .group_input_channels(14)
1549 .group_output_channels(13)
1550 .iterations(3)
1551 .TestNHWCxQS8();
1552}
1553
1554TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_without_bias) {
1555 ConvolutionOperatorTester()
1556 .has_bias(false)
1557 .input_size(10, 11)
1558 .padding(1)
1559 .kernel_size(3, 3)
1560 .groups(2)
1561 .group_input_channels(14)
1562 .group_output_channels(13)
1563 .iterations(3)
1564 .TestNHWCxQS8();
1565}
1566
1567TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_batch) {
1568 ConvolutionOperatorTester()
1569 .batch_size(3)
1570 .input_size(10, 11)
1571 .padding(1)
1572 .kernel_size(3, 3)
1573 .groups(2)
1574 .group_input_channels(14)
1575 .group_output_channels(13)
1576 .iterations(3)
1577 .TestNHWCxQS8();
1578}
1579
1580TEST(CONVOLUTION_NHWC_QS8, 3x3s2) {
1581 ConvolutionOperatorTester()
1582 .input_size(14, 13)
1583 .padding(1)
1584 .kernel_size(3, 3)
1585 .subsampling(2)
1586 .group_input_channels(27)
1587 .group_output_channels(19)
1588 .iterations(3)
1589 .TestNHWCxQS8();
1590}
1591
1592TEST(CONVOLUTION_NHWC_QS8, 3x3s2_with_tf_same_padding) {
1593 for (size_t input_height = 13; input_height <= 14; input_height++) {
1594 for (size_t input_width = 13; input_width <= 14; input_width++) {
1595 ConvolutionOperatorTester()
1596 .input_size(input_height, input_width)
1597 .padding_tf_same(true)
1598 .kernel_size(3, 3)
1599 .subsampling(2)
1600 .group_input_channels(27)
1601 .group_output_channels(19)
1602 .iterations(3)
1603 .TestNHWCxQS8();
1604 }
1605 }
1606}
1607
1608TEST(CONVOLUTION_NHWC_QS8, 3x3s1x2) {
1609 ConvolutionOperatorTester()
1610 .input_size(14, 13)
1611 .padding(1)
1612 .kernel_size(3, 3)
1613 .subsampling(1, 2)
1614 .group_input_channels(27)
1615 .group_output_channels(19)
1616 .iterations(3)
1617 .TestNHWCxQS8();
1618}
1619
1620TEST(CONVOLUTION_NHWC_QS8, 3x3s1x2_with_tf_same_padding) {
1621 for (size_t input_height = 13; input_height <= 14; input_height++) {
1622 for (size_t input_width = 13; input_width <= 14; input_width++) {
1623 ConvolutionOperatorTester()
1624 .input_size(input_height, input_width)
1625 .padding_tf_same(true)
1626 .kernel_size(3, 3)
1627 .subsampling(1, 2)
1628 .group_input_channels(27)
1629 .group_output_channels(19)
1630 .iterations(3)
1631 .TestNHWCxQS8();
1632 }
1633 }
1634}
1635
1636TEST(CONVOLUTION_NHWC_QS8, 3x3s2x1) {
1637 ConvolutionOperatorTester()
1638 .input_size(14, 13)
1639 .padding(1)
1640 .kernel_size(3, 3)
1641 .subsampling(2, 1)
1642 .group_input_channels(27)
1643 .group_output_channels(19)
1644 .iterations(3)
1645 .TestNHWCxQS8();
1646}
1647
1648TEST(CONVOLUTION_NHWC_QS8, 3x3s2x1_with_tf_same_padding) {
1649 for (size_t input_height = 13; input_height <= 14; input_height++) {
1650 for (size_t input_width = 13; input_width <= 14; input_width++) {
1651 ConvolutionOperatorTester()
1652 .input_size(input_height, input_width)
1653 .padding_tf_same(true)
1654 .kernel_size(3, 3)
1655 .subsampling(2, 1)
1656 .group_input_channels(27)
1657 .group_output_channels(19)
1658 .iterations(3)
1659 .TestNHWCxQS8();
1660 }
1661 }
1662}
1663
1664TEST(CONVOLUTION_NHWC_QS8, 3x3d2) {
1665 ConvolutionOperatorTester()
1666 .input_size(14, 13)
1667 .padding(2)
1668 .kernel_size(3, 3)
1669 .dilation(2)
1670 .group_input_channels(27)
1671 .group_output_channels(19)
1672 .iterations(3)
1673 .TestNHWCxQS8();
1674}
1675
1676TEST(CONVOLUTION_NHWC_QS8, 3x3d1x2) {
1677 ConvolutionOperatorTester()
1678 .input_size(14, 13)
1679 .padding(1, 2)
1680 .kernel_size(3, 3)
1681 .dilation(1, 2)
1682 .group_input_channels(27)
1683 .group_output_channels(19)
1684 .iterations(3)
1685 .TestNHWCxQS8();
1686}
1687
1688TEST(CONVOLUTION_NHWC_QS8, 3x3d2x1) {
1689 ConvolutionOperatorTester()
1690 .input_size(14, 13)
1691 .padding(2, 1)
1692 .kernel_size(3, 3)
1693 .dilation(2, 1)
1694 .group_input_channels(27)
1695 .group_output_channels(19)
1696 .iterations(3)
1697 .TestNHWCxQS8();
1698}
1699
1700TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3) {
1701 ConvolutionOperatorTester()
1702 .input_size(15, 14)
1703 .padding(1, 1)
1704 .kernel_size(3, 3)
1705 .groups(27)
1706 .iterations(3)
1707 .TestNHWCxQS8();
1708}
1709
1710TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3_without_bias) {
1711 ConvolutionOperatorTester()
1712 .has_bias(false)
1713 .input_size(15, 14)
1714 .padding(1, 1)
1715 .kernel_size(3, 3)
1716 .groups(27)
1717 .iterations(3)
1718 .TestNHWCxQS8();
1719}
1720
1721TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s2) {
1722 ConvolutionOperatorTester()
1723 .input_size(15, 14)
1724 .padding(1, 1)
1725 .kernel_size(3, 3)
1726 .subsampling(2)
1727 .groups(27)
1728 .iterations(3)
1729 .TestNHWCxQS8();
1730}
1731
1732TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s2_with_tf_same_padding) {
1733 for (size_t input_height = 14; input_height <= 15; input_height++) {
1734 for (size_t input_width = 14; input_width <= 15; input_width++) {
1735 ConvolutionOperatorTester()
1736 .input_size(input_height, input_width)
1737 .padding_tf_same(true)
1738 .kernel_size(3, 3)
1739 .subsampling(2)
1740 .groups(27)
1741 .iterations(3)
1742 .TestNHWCxQS8();
1743 }
1744 }
1745}
1746
1747TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s1x2) {
1748 ConvolutionOperatorTester()
1749 .input_size(15, 14)
1750 .padding(1, 1)
1751 .kernel_size(3, 3)
1752 .subsampling(1, 2)
1753 .groups(27)
1754 .iterations(3)
1755 .TestNHWCxQS8();
1756}
1757
1758TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s1x2_with_tf_same_padding) {
1759 for (size_t input_height = 14; input_height <= 15; input_height++) {
1760 for (size_t input_width = 14; input_width <= 15; input_width++) {
1761 ConvolutionOperatorTester()
1762 .input_size(input_height, input_width)
1763 .padding_tf_same(true)
1764 .kernel_size(3, 3)
1765 .subsampling(1, 2)
1766 .groups(27)
1767 .iterations(3)
1768 .TestNHWCxQS8();
1769 }
1770 }
1771}
1772
1773TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s2x1) {
1774 ConvolutionOperatorTester()
1775 .input_size(15, 14)
1776 .padding(1, 1)
1777 .kernel_size(3, 3)
1778 .subsampling(2, 1)
1779 .groups(27)
1780 .iterations(3)
1781 .TestNHWCxQS8();
1782}
1783
1784TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s2x1_with_tf_same_padding) {
1785 for (size_t input_height = 14; input_height <= 15; input_height++) {
1786 for (size_t input_width = 14; input_width <= 15; input_width++) {
1787 ConvolutionOperatorTester()
1788 .input_size(input_height, input_width)
1789 .padding_tf_same(true)
1790 .kernel_size(3, 3)
1791 .subsampling(2, 1)
1792 .groups(27)
1793 .iterations(3)
1794 .TestNHWCxQS8();
1795 }
1796 }
1797}
1798
1799TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3d2) {
1800 ConvolutionOperatorTester()
1801 .input_size(15, 14)
1802 .padding(1, 1)
1803 .kernel_size(3, 3)
1804 .dilation(2)
1805 .groups(27)
1806 .iterations(3)
1807 .TestNHWCxQS8();
1808}
1809
1810TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3d1x2) {
1811 ConvolutionOperatorTester()
1812 .input_size(15, 14)
1813 .padding(1, 1)
1814 .kernel_size(3, 3)
1815 .dilation(1, 2)
1816 .groups(27)
1817 .iterations(3)
1818 .TestNHWCxQS8();
1819}
1820
1821TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3d2x1) {
1822 ConvolutionOperatorTester()
1823 .input_size(15, 14)
1824 .padding(1, 1)
1825 .kernel_size(3, 3)
1826 .dilation(2, 1)
1827 .groups(27)
1828 .iterations(3)
1829 .TestNHWCxQS8();
1830}
1831
1832TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 1x1) {
1833 ConvolutionOperatorTester()
1834 .depthwise_layout(true)
1835 .input_size(15, 14)
1836 .kernel_size(1, 1)
1837 .groups(24)
1838 .iterations(3)
1839 .TestNHWCxQS8();
1840}
1841
1842TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 1x1_with_depth_multiplier) {
1843 ConvolutionOperatorTester()
1844 .depthwise_layout(true)
1845 .input_size(15, 14)
1846 .kernel_size(1, 1)
1847 .groups(24)
1848 .group_output_channels(3)
1849 .iterations(3)
1850 .TestNHWCxQS8();
1851}
1852
1853TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 1x1_without_bias) {
1854 ConvolutionOperatorTester()
1855 .depthwise_layout(true)
1856 .has_bias(false)
1857 .input_size(15, 14)
1858 .kernel_size(1, 1)
1859 .groups(24)
1860 .iterations(3)
1861 .TestNHWCxQS8();
1862}
1863
1864TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 3x3) {
1865 ConvolutionOperatorTester()
1866 .depthwise_layout(true)
1867 .input_size(15, 14)
1868 .padding(1, 1)
1869 .kernel_size(3, 3)
1870 .groups(24)
1871 .iterations(3)
1872 .TestNHWCxQS8();
1873}
1874
1875TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 3x3_with_depth_multiplier) {
1876 ConvolutionOperatorTester()
1877 .depthwise_layout(true)
1878 .input_size(15, 14)
1879 .padding(1, 1)
1880 .kernel_size(3, 3)
1881 .groups(24)
1882 .group_output_channels(3)
1883 .iterations(3)
1884 .TestNHWCxQS8();
1885}
1886
1887TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 3x3_without_bias) {
1888 ConvolutionOperatorTester()
1889 .depthwise_layout(true)
1890 .has_bias(false)
1891 .input_size(15, 14)
1892 .padding(1, 1)
1893 .kernel_size(3, 3)
1894 .groups(24)
1895 .iterations(3)
1896 .TestNHWCxQS8();
1897}
1898
1899TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 3x3s2_with_tf_same_padding) {
1900 for (size_t input_height = 14; input_height <= 15; input_height++) {
1901 for (size_t input_width = 14; input_width <= 15; input_width++) {
1902 ConvolutionOperatorTester()
1903 .depthwise_layout(true)
1904 .input_size(input_height, input_width)
1905 .padding_tf_same(true)
1906 .kernel_size(3, 3)
1907 .groups(24)
1908 .iterations(3)
1909 .TestNHWCxQS8();
1910 }
1911 }
1912}
1913
1914TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 5x5) {
1915 ConvolutionOperatorTester()
1916 .depthwise_layout(true)
1917 .input_size(15, 14)
1918 .padding(2, 2)
1919 .kernel_size(5, 5)
1920 .groups(24)
1921 .iterations(3)
1922 .TestNHWCxQS8();
1923}
1924
1925TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 5x5_without_bias) {
1926 ConvolutionOperatorTester()
1927 .depthwise_layout(true)
1928 .has_bias(false)
1929 .input_size(15, 14)
1930 .padding(2, 2)
1931 .kernel_size(5, 5)
1932 .groups(24)
1933 .iterations(3)
1934 .TestNHWCxQS8();
1935}
1936
1937TEST(CONVOLUTION_NHWC_QS8, setup_changing_input_buffer) {
1938 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1939 ConvolutionOperatorTester()
1940 .batch_size(3)
1941 .input_height(8)
1942 .input_width(8)
1943 .kernel_height(5)
1944 .kernel_width(3)
1945 .group_input_channels(15)
1946 .group_output_channels(17)
1947 .TestSetupNHWCxQS8();
1948}
1949
1950TEST(CONVOLUTION_NHWC_QS8, setup_changing_input_buffer_grouped) {
1951 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1952 ConvolutionOperatorTester()
1953 .batch_size(3)
1954 .input_height(8)
1955 .input_width(8)
1956 .kernel_height(5)
1957 .kernel_width(3)
1958 .groups(2)
1959 .group_input_channels(15)
1960 .group_output_channels(17)
1961 .TestSetupNHWCxQS8();
1962}
1963
1964TEST(CONVOLUTION_NHWC_QS8, setup_changing_input_buffer_depthwise) {
1965 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1966 ConvolutionOperatorTester()
1967 .batch_size(3)
1968 .input_height(8)
1969 .input_width(8)
1970 .kernel_height(3)
1971 .kernel_width(3)
1972 .groups(19)
1973 .group_input_channels(1)
1974 .group_output_channels(1)
1975 .TestSetupNHWCxQS8();
1976}
1977
1978TEST(CONVOLUTION_NHWC_QS8, setup_increasing_batch) {
1979 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1980 ConvolutionOperatorTester()
1981 .batch_size(3)
1982 .next_batch_size(5)
1983 .input_height(8)
1984 .input_width(8)
1985 .kernel_height(5)
1986 .kernel_width(3)
1987 .group_input_channels(15)
1988 .group_output_channels(17)
1989 .TestSetupNHWCxQS8();
1990}
1991
1992TEST(CONVOLUTION_NHWC_QS8, setup_increasing_batch_grouped) {
1993 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1994 ConvolutionOperatorTester()
1995 .batch_size(3)
1996 .next_batch_size(5)
1997 .input_height(8)
1998 .input_width(8)
1999 .kernel_height(5)
2000 .kernel_width(3)
2001 .groups(2)
2002 .group_input_channels(15)
2003 .group_output_channels(17)
2004 .TestSetupNHWCxQS8();
2005}
2006
2007TEST(CONVOLUTION_NHWC_QS8, setup_increasing_batch_depthwise) {
2008 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2009 ConvolutionOperatorTester()
2010 .batch_size(3)
2011 .next_batch_size(5)
2012 .input_height(8)
2013 .input_width(8)
2014 .kernel_height(3)
2015 .kernel_width(3)
2016 .groups(19)
2017 .group_input_channels(1)
2018 .group_output_channels(1)
2019 .TestSetupNHWCxQS8();
2020}
2021
2022TEST(CONVOLUTION_NHWC_QS8, setup_decreasing_batch) {
2023 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2024 ConvolutionOperatorTester()
2025 .batch_size(5)
2026 .next_batch_size(3)
2027 .input_height(8)
2028 .input_width(8)
2029 .kernel_height(5)
2030 .kernel_width(3)
2031 .group_input_channels(15)
2032 .group_output_channels(17)
2033 .TestSetupNHWCxQS8();
2034}
2035
2036TEST(CONVOLUTION_NHWC_QS8, setup_decreasing_batch_grouped) {
2037 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2038 ConvolutionOperatorTester()
2039 .batch_size(5)
2040 .next_batch_size(3)
2041 .input_height(8)
2042 .input_width(8)
2043 .kernel_height(5)
2044 .kernel_width(3)
2045 .groups(2)
2046 .group_input_channels(15)
2047 .group_output_channels(17)
2048 .TestSetupNHWCxQS8();
2049}
2050
2051TEST(CONVOLUTION_NHWC_QS8, setup_decreasing_batch_depthwise) {
2052 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2053 ConvolutionOperatorTester()
2054 .batch_size(5)
2055 .next_batch_size(3)
2056 .input_height(8)
2057 .input_width(8)
2058 .kernel_height(3)
2059 .kernel_width(3)
2060 .groups(19)
2061 .group_input_channels(1)
2062 .group_output_channels(1)
2063 .TestSetupNHWCxQS8();
2064}
2065
2066TEST(CONVOLUTION_NHWC_QS8, setup_changing_height) {
2067 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2068 ConvolutionOperatorTester()
2069 .batch_size(3)
2070 .input_height(8)
2071 .input_width(8)
2072 .next_input_height(9)
2073 .kernel_height(5)
2074 .kernel_width(3)
2075 .group_input_channels(15)
2076 .group_output_channels(17)
2077 .TestSetupNHWCxQS8();
2078 ConvolutionOperatorTester()
2079 .batch_size(3)
2080 .input_height(8)
2081 .input_width(8)
2082 .next_input_height(7)
2083 .kernel_height(5)
2084 .kernel_width(3)
2085 .group_input_channels(15)
2086 .group_output_channels(17)
2087 .TestSetupNHWCxQS8();
2088}
2089
2090TEST(CONVOLUTION_NHWC_QS8, setup_changing_height_grouped) {
2091 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2092 ConvolutionOperatorTester()
2093 .batch_size(3)
2094 .input_height(8)
2095 .input_width(8)
2096 .next_input_height(9)
2097 .kernel_height(5)
2098 .kernel_width(3)
2099 .groups(2)
2100 .group_input_channels(15)
2101 .group_output_channels(17)
2102 .TestSetupNHWCxQS8();
2103 ConvolutionOperatorTester()
2104 .batch_size(3)
2105 .input_height(8)
2106 .input_width(8)
2107 .next_input_height(7)
2108 .kernel_height(5)
2109 .kernel_width(3)
2110 .groups(2)
2111 .group_input_channels(15)
2112 .group_output_channels(17)
2113 .TestSetupNHWCxQS8();
2114}
2115
2116TEST(CONVOLUTION_NHWC_QS8, setup_changing_height_depthwise) {
2117 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2118 ConvolutionOperatorTester()
2119 .batch_size(3)
2120 .input_height(8)
2121 .input_width(8)
2122 .next_input_height(9)
2123 .kernel_height(3)
2124 .kernel_width(3)
2125 .groups(19)
2126 .group_input_channels(1)
2127 .group_output_channels(1)
2128 .TestSetupNHWCxQS8();
2129 ConvolutionOperatorTester()
2130 .batch_size(3)
2131 .input_height(8)
2132 .input_width(8)
2133 .next_input_height(7)
2134 .kernel_height(3)
2135 .kernel_width(3)
2136 .groups(19)
2137 .group_input_channels(1)
2138 .group_output_channels(1)
2139 .TestSetupNHWCxQS8();
2140}
2141
2142TEST(CONVOLUTION_NHWC_QS8, setup_changing_width) {
2143 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2144 ConvolutionOperatorTester()
2145 .batch_size(3)
2146 .input_height(8)
2147 .input_width(8)
2148 .next_input_width(9)
2149 .kernel_height(5)
2150 .kernel_width(3)
2151 .group_input_channels(15)
2152 .group_output_channels(17)
2153 .TestSetupNHWCxQS8();
2154 ConvolutionOperatorTester()
2155 .batch_size(3)
2156 .input_height(8)
2157 .input_width(8)
2158 .next_input_width(7)
2159 .kernel_height(5)
2160 .kernel_width(3)
2161 .group_input_channels(15)
2162 .group_output_channels(17)
2163 .TestSetupNHWCxQS8();
2164}
2165
2166TEST(CONVOLUTION_NHWC_QS8, setup_changing_width_grouped) {
2167 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2168 ConvolutionOperatorTester()
2169 .batch_size(3)
2170 .input_height(8)
2171 .input_width(8)
2172 .next_input_width(9)
2173 .kernel_height(5)
2174 .kernel_width(3)
2175 .groups(2)
2176 .group_input_channels(15)
2177 .group_output_channels(17)
2178 .TestSetupNHWCxQS8();
2179 ConvolutionOperatorTester()
2180 .batch_size(3)
2181 .input_height(8)
2182 .input_width(8)
2183 .next_input_width(7)
2184 .kernel_height(5)
2185 .kernel_width(3)
2186 .groups(2)
2187 .group_input_channels(15)
2188 .group_output_channels(17)
2189 .TestSetupNHWCxQS8();
2190}
2191
2192TEST(CONVOLUTION_NHWC_QS8, setup_changing_width_depthwise) {
2193 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2194 ConvolutionOperatorTester()
2195 .batch_size(3)
2196 .input_height(8)
2197 .input_width(8)
2198 .next_input_width(9)
2199 .kernel_height(3)
2200 .kernel_width(3)
2201 .groups(19)
2202 .group_input_channels(1)
2203 .group_output_channels(1)
2204 .TestSetupNHWCxQS8();
2205 ConvolutionOperatorTester()
2206 .batch_size(3)
2207 .input_height(8)
2208 .input_width(8)
2209 .next_input_width(7)
2210 .kernel_height(3)
2211 .kernel_width(3)
2212 .groups(19)
2213 .group_input_channels(1)
2214 .group_output_channels(1)
2215 .TestSetupNHWCxQS8();
2216}
2217
2218TEST(CONVOLUTION_NHWC_QS8, setup_swap_height_and_width) {
2219 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2220 ConvolutionOperatorTester()
2221 .batch_size(3)
2222 .input_height(9)
2223 .input_width(8)
2224 .next_input_height(8)
2225 .next_input_width(9)
2226 .kernel_height(5)
2227 .kernel_width(3)
2228 .group_input_channels(15)
2229 .group_output_channels(17)
2230 .TestSetupNHWCxQS8();
2231}
2232
2233TEST(CONVOLUTION_NHWC_QS8, setup_swap_height_and_width_grouped) {
2234 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2235 ConvolutionOperatorTester()
2236 .batch_size(3)
2237 .input_height(9)
2238 .input_width(8)
2239 .next_input_height(8)
2240 .next_input_width(9)
2241 .kernel_height(5)
2242 .kernel_width(3)
2243 .groups(2)
2244 .group_input_channels(15)
2245 .group_output_channels(17)
2246 .TestSetupNHWCxQS8();
2247}
2248
2249TEST(CONVOLUTION_NHWC_QS8, setup_swap_height_and_width_depthwise) {
2250 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2251 ConvolutionOperatorTester()
2252 .batch_size(3)
2253 .input_height(9)
2254 .input_width(8)
2255 .next_input_height(8)
2256 .next_input_width(9)
2257 .kernel_height(3)
2258 .kernel_width(3)
2259 .groups(19)
2260 .group_input_channels(1)
2261 .group_output_channels(1)
2262 .TestSetupNHWCxQS8();
2263}
2264
Marat Dukhan08b7a972020-07-14 18:17:29 -07002265TEST(CONVOLUTION_NHWC_QU8, 1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002266 ConvolutionOperatorTester()
2267 .input_size(27, 29)
2268 .kernel_size(1, 1)
2269 .group_input_channels(23)
2270 .group_output_channels(19)
2271 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002272 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002273}
2274
Marat Dukhan08b7a972020-07-14 18:17:29 -07002275TEST(CONVOLUTION_NHWC_QU8, 1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002276 ConvolutionOperatorTester()
2277 .input_size(27, 29)
2278 .kernel_size(1, 1)
2279 .group_input_channels(23)
2280 .group_output_channels(19)
2281 .qmin(128)
2282 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002283 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002284}
2285
Marat Dukhan08b7a972020-07-14 18:17:29 -07002286TEST(CONVOLUTION_NHWC_QU8, 1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002287 ConvolutionOperatorTester()
2288 .input_size(27, 29)
2289 .kernel_size(1, 1)
2290 .group_input_channels(23)
2291 .group_output_channels(19)
2292 .qmax(128)
2293 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002294 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002295}
2296
Marat Dukhan08b7a972020-07-14 18:17:29 -07002297TEST(CONVOLUTION_NHWC_QU8, 1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002298 ConvolutionOperatorTester()
2299 .input_size(27, 29)
2300 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002301 .input_channel_stride(28)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002302 .group_input_channels(23)
2303 .group_output_channels(19)
2304 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002305 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002306}
2307
Marat Dukhan08b7a972020-07-14 18:17:29 -07002308TEST(CONVOLUTION_NHWC_QU8, 1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002309 ConvolutionOperatorTester()
2310 .input_size(27, 29)
2311 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002312 .output_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002313 .group_input_channels(23)
2314 .group_output_channels(19)
2315 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002316 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002317}
2318
Marat Dukhan08b7a972020-07-14 18:17:29 -07002319TEST(CONVOLUTION_NHWC_QU8, 1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002320 ConvolutionOperatorTester()
2321 .has_bias(false)
2322 .input_size(13, 14)
2323 .kernel_size(1, 1)
2324 .group_input_channels(23)
2325 .group_output_channels(19)
2326 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002327 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002328}
2329
Marat Dukhan08b7a972020-07-14 18:17:29 -07002330TEST(CONVOLUTION_NHWC_QU8, 1x1_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002331 ConvolutionOperatorTester()
2332 .batch_size(3)
2333 .input_size(13, 14)
2334 .kernel_size(1, 1)
2335 .group_input_channels(23)
2336 .group_output_channels(19)
2337 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002338 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002339}
2340
Marat Dukhan08b7a972020-07-14 18:17:29 -07002341TEST(CONVOLUTION_NHWC_QU8, grouped_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002342 ConvolutionOperatorTester()
2343 .input_size(24, 25)
2344 .kernel_size(1, 1)
2345 .groups(2)
2346 .group_input_channels(17)
2347 .group_output_channels(19)
2348 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002349 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002350}
2351
Marat Dukhan08b7a972020-07-14 18:17:29 -07002352TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002353 ConvolutionOperatorTester()
2354 .input_size(24, 25)
2355 .kernel_size(1, 1)
2356 .groups(2)
2357 .group_input_channels(17)
2358 .group_output_channels(19)
2359 .qmin(128)
2360 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002361 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002362}
2363
Marat Dukhan08b7a972020-07-14 18:17:29 -07002364TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002365 ConvolutionOperatorTester()
2366 .input_size(24, 25)
2367 .kernel_size(1, 1)
2368 .groups(2)
2369 .group_input_channels(17)
2370 .group_output_channels(19)
2371 .qmax(128)
2372 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002373 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002374}
2375
Marat Dukhan08b7a972020-07-14 18:17:29 -07002376TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002377 ConvolutionOperatorTester()
2378 .input_size(24, 25)
2379 .kernel_size(1, 1)
2380 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002381 .input_channel_stride(37)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002382 .group_input_channels(17)
2383 .group_output_channels(19)
2384 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002385 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002386}
2387
Marat Dukhan08b7a972020-07-14 18:17:29 -07002388TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002389 ConvolutionOperatorTester()
2390 .input_size(24, 25)
2391 .kernel_size(1, 1)
2392 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002393 .output_channel_stride(41)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002394 .group_input_channels(17)
2395 .group_output_channels(19)
2396 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002397 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002398}
2399
Marat Dukhan08b7a972020-07-14 18:17:29 -07002400TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002401 ConvolutionOperatorTester()
2402 .has_bias(false)
2403 .input_size(24, 25)
2404 .kernel_size(1, 1)
2405 .groups(2)
2406 .group_input_channels(17)
2407 .group_output_channels(19)
2408 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002409 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002410}
2411
Marat Dukhan08b7a972020-07-14 18:17:29 -07002412TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002413 ConvolutionOperatorTester()
2414 .batch_size(3)
2415 .input_size(24, 25)
2416 .kernel_size(1, 1)
2417 .groups(2)
2418 .group_input_channels(17)
2419 .group_output_channels(19)
2420 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002421 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002422}
2423
Marat Dukhan08b7a972020-07-14 18:17:29 -07002424TEST(CONVOLUTION_NHWC_QU8, 1x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002425 ConvolutionOperatorTester()
2426 .input_size(20, 19)
2427 .padding_width(1)
2428 .kernel_size(1, 3)
2429 .group_input_channels(17)
2430 .group_output_channels(15)
2431 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002432 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002433}
2434
Marat Dukhan08b7a972020-07-14 18:17:29 -07002435TEST(CONVOLUTION_NHWC_QU8, grouped_1x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002436 ConvolutionOperatorTester()
2437 .input_size(20, 19)
2438 .padding_width(1)
2439 .kernel_size(1, 3)
2440 .groups(2)
2441 .group_input_channels(17)
2442 .group_output_channels(15)
2443 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002444 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002445}
2446
Marat Dukhan08b7a972020-07-14 18:17:29 -07002447TEST(CONVOLUTION_NHWC_QU8, 3x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002448 ConvolutionOperatorTester()
2449 .input_size(19, 20)
2450 .padding_height(1)
2451 .kernel_size(3, 1)
2452 .group_input_channels(17)
2453 .group_output_channels(15)
2454 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002455 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002456}
2457
Marat Dukhan08b7a972020-07-14 18:17:29 -07002458TEST(CONVOLUTION_NHWC_QU8, grouped_3x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002459 ConvolutionOperatorTester()
2460 .input_size(19, 20)
2461 .padding_height(1)
2462 .kernel_size(3, 1)
2463 .groups(2)
2464 .group_input_channels(17)
2465 .group_output_channels(15)
2466 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002467 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002468}
2469
Marat Dukhan08b7a972020-07-14 18:17:29 -07002470TEST(CONVOLUTION_NHWC_QU8, 3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002471 ConvolutionOperatorTester()
2472 .input_size(13, 12)
2473 .padding(1)
2474 .kernel_size(3, 3)
2475 .group_input_channels(15)
2476 .group_output_channels(17)
2477 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002478 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002479}
2480
Marat Dukhan08b7a972020-07-14 18:17:29 -07002481TEST(CONVOLUTION_NHWC_QU8, 3x3_without_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002482 ConvolutionOperatorTester()
2483 .input_size(13, 12)
2484 .kernel_size(3, 3)
2485 .group_input_channels(15)
2486 .group_output_channels(17)
2487 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002488 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002489}
2490
Marat Dukhan08b7a972020-07-14 18:17:29 -07002491TEST(CONVOLUTION_NHWC_QU8, 3x3_with_left_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002492 ConvolutionOperatorTester()
2493 .input_size(13, 12)
2494 .padding_left(1)
2495 .kernel_size(3, 3)
2496 .group_input_channels(15)
2497 .group_output_channels(17)
2498 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002499 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002500}
2501
Marat Dukhan08b7a972020-07-14 18:17:29 -07002502TEST(CONVOLUTION_NHWC_QU8, 3x3_with_right_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002503 ConvolutionOperatorTester()
2504 .input_size(13, 12)
2505 .padding_right(1)
2506 .kernel_size(3, 3)
2507 .group_input_channels(15)
2508 .group_output_channels(17)
2509 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002510 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002511}
2512
Marat Dukhan08b7a972020-07-14 18:17:29 -07002513TEST(CONVOLUTION_NHWC_QU8, 3x3_with_top_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002514 ConvolutionOperatorTester()
2515 .input_size(13, 12)
2516 .padding_top(1)
2517 .kernel_size(3, 3)
2518 .group_input_channels(15)
2519 .group_output_channels(17)
2520 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002521 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002522}
2523
Marat Dukhan08b7a972020-07-14 18:17:29 -07002524TEST(CONVOLUTION_NHWC_QU8, 3x3_with_bottom_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002525 ConvolutionOperatorTester()
2526 .input_size(13, 12)
2527 .padding_bottom(1)
2528 .kernel_size(3, 3)
2529 .group_input_channels(15)
2530 .group_output_channels(17)
2531 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002532 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002533}
2534
Marat Dukhan08b7a972020-07-14 18:17:29 -07002535TEST(CONVOLUTION_NHWC_QU8, 3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002536 ConvolutionOperatorTester()
2537 .input_size(13, 12)
2538 .padding(1)
2539 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002540 .input_channel_stride(22)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002541 .group_input_channels(15)
2542 .group_output_channels(17)
2543 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002544 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002545}
2546
Marat Dukhan08b7a972020-07-14 18:17:29 -07002547TEST(CONVOLUTION_NHWC_QU8, 3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002548 ConvolutionOperatorTester()
2549 .input_size(13, 12)
2550 .padding(1)
2551 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002552 .output_channel_stride(23)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002553 .group_input_channels(15)
2554 .group_output_channels(17)
2555 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002556 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002557}
2558
Marat Dukhan08b7a972020-07-14 18:17:29 -07002559TEST(CONVOLUTION_NHWC_QU8, 3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002560 ConvolutionOperatorTester()
2561 .has_bias(false)
2562 .input_size(10, 9)
2563 .padding(1)
2564 .kernel_size(3, 3)
2565 .group_input_channels(15)
2566 .group_output_channels(17)
2567 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002568 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002569}
2570
Marat Dukhan08b7a972020-07-14 18:17:29 -07002571TEST(CONVOLUTION_NHWC_QU8, 3x3_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002572 ConvolutionOperatorTester()
2573 .batch_size(3)
2574 .input_size(10, 9)
2575 .padding(1)
2576 .kernel_size(3, 3)
2577 .group_input_channels(15)
2578 .group_output_channels(17)
2579 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002580 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002581}
2582
Marat Dukhan08b7a972020-07-14 18:17:29 -07002583TEST(CONVOLUTION_NHWC_QU8, grouped_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002584 ConvolutionOperatorTester()
2585 .input_size(10, 11)
2586 .padding(1)
2587 .kernel_size(3, 3)
2588 .groups(2)
2589 .group_input_channels(14)
2590 .group_output_channels(13)
2591 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002592 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002593}
2594
Marat Dukhan08b7a972020-07-14 18:17:29 -07002595TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_without_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002596 ConvolutionOperatorTester()
2597 .input_size(13, 12)
2598 .kernel_size(3, 3)
2599 .group_input_channels(15)
2600 .group_output_channels(17)
2601 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002602 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002603}
2604
Marat Dukhan08b7a972020-07-14 18:17:29 -07002605TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_left_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002606 ConvolutionOperatorTester()
2607 .input_size(10, 11)
2608 .padding_left(1)
2609 .kernel_size(3, 3)
2610 .groups(2)
2611 .group_input_channels(14)
2612 .group_output_channels(13)
2613 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002614 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002615}
2616
Marat Dukhan08b7a972020-07-14 18:17:29 -07002617TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_right_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002618 ConvolutionOperatorTester()
2619 .input_size(10, 11)
2620 .padding_right(1)
2621 .kernel_size(3, 3)
2622 .groups(2)
2623 .group_input_channels(14)
2624 .group_output_channels(13)
2625 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002626 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002627}
2628
Marat Dukhan08b7a972020-07-14 18:17:29 -07002629TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_top_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002630 ConvolutionOperatorTester()
2631 .input_size(10, 11)
2632 .padding_top(1)
2633 .kernel_size(3, 3)
2634 .groups(2)
2635 .group_input_channels(14)
2636 .group_output_channels(13)
2637 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002638 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002639}
2640
Marat Dukhan08b7a972020-07-14 18:17:29 -07002641TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_bottom_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002642 ConvolutionOperatorTester()
2643 .input_size(10, 11)
2644 .padding_bottom(1)
2645 .kernel_size(3, 3)
2646 .groups(2)
2647 .group_input_channels(14)
2648 .group_output_channels(13)
2649 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002650 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002651}
2652
Marat Dukhan08b7a972020-07-14 18:17:29 -07002653TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002654 ConvolutionOperatorTester()
2655 .input_size(10, 11)
2656 .padding(1)
2657 .kernel_size(3, 3)
2658 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002659 .input_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002660 .group_input_channels(14)
2661 .group_output_channels(13)
2662 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002663 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002664}
2665
Marat Dukhan08b7a972020-07-14 18:17:29 -07002666TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002667 ConvolutionOperatorTester()
2668 .input_size(10, 11)
2669 .padding(1)
2670 .kernel_size(3, 3)
2671 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002672 .output_channel_stride(31)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002673 .group_input_channels(14)
2674 .group_output_channels(13)
2675 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002676 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002677}
2678
Marat Dukhan08b7a972020-07-14 18:17:29 -07002679TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002680 ConvolutionOperatorTester()
2681 .has_bias(false)
2682 .input_size(10, 11)
2683 .padding(1)
2684 .kernel_size(3, 3)
2685 .groups(2)
2686 .group_input_channels(14)
2687 .group_output_channels(13)
2688 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002689 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002690}
2691
Marat Dukhan08b7a972020-07-14 18:17:29 -07002692TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002693 ConvolutionOperatorTester()
2694 .batch_size(3)
2695 .input_size(10, 11)
2696 .padding(1)
2697 .kernel_size(3, 3)
2698 .groups(2)
2699 .group_input_channels(14)
2700 .group_output_channels(13)
2701 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002702 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002703}
2704
Marat Dukhan08b7a972020-07-14 18:17:29 -07002705TEST(CONVOLUTION_NHWC_QU8, 3x3s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002706 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002707 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002708 .padding(1)
2709 .kernel_size(3, 3)
2710 .subsampling(2)
2711 .group_input_channels(27)
2712 .group_output_channels(19)
2713 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002714 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002715}
2716
Marat Dukhan08b7a972020-07-14 18:17:29 -07002717TEST(CONVOLUTION_NHWC_QU8, 3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002718 for (size_t input_height = 13; input_height <= 14; input_height++) {
2719 for (size_t input_width = 13; input_width <= 14; input_width++) {
2720 ConvolutionOperatorTester()
2721 .input_size(input_height, input_width)
2722 .padding_tf_same(true)
2723 .kernel_size(3, 3)
2724 .subsampling(2)
2725 .group_input_channels(27)
2726 .group_output_channels(19)
2727 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002728 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07002729 }
2730 }
2731}
2732
Marat Dukhan08b7a972020-07-14 18:17:29 -07002733TEST(CONVOLUTION_NHWC_QU8, 3x3s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002734 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002735 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002736 .padding(1)
2737 .kernel_size(3, 3)
2738 .subsampling(1, 2)
2739 .group_input_channels(27)
2740 .group_output_channels(19)
2741 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002742 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002743}
2744
Marat Dukhan08b7a972020-07-14 18:17:29 -07002745TEST(CONVOLUTION_NHWC_QU8, 3x3s1x2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002746 for (size_t input_height = 13; input_height <= 14; input_height++) {
2747 for (size_t input_width = 13; input_width <= 14; input_width++) {
2748 ConvolutionOperatorTester()
2749 .input_size(input_height, input_width)
2750 .padding_tf_same(true)
2751 .kernel_size(3, 3)
2752 .subsampling(1, 2)
2753 .group_input_channels(27)
2754 .group_output_channels(19)
2755 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002756 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07002757 }
2758 }
2759}
2760
Marat Dukhan08b7a972020-07-14 18:17:29 -07002761TEST(CONVOLUTION_NHWC_QU8, 3x3s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002762 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002763 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002764 .padding(1)
2765 .kernel_size(3, 3)
2766 .subsampling(2, 1)
2767 .group_input_channels(27)
2768 .group_output_channels(19)
2769 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002770 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002771}
2772
Marat Dukhan08b7a972020-07-14 18:17:29 -07002773TEST(CONVOLUTION_NHWC_QU8, 3x3s2x1_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002774 for (size_t input_height = 13; input_height <= 14; input_height++) {
2775 for (size_t input_width = 13; input_width <= 14; input_width++) {
2776 ConvolutionOperatorTester()
2777 .input_size(input_height, input_width)
2778 .padding_tf_same(true)
2779 .kernel_size(3, 3)
2780 .subsampling(2, 1)
2781 .group_input_channels(27)
2782 .group_output_channels(19)
2783 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002784 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07002785 }
2786 }
2787}
2788
Marat Dukhan08b7a972020-07-14 18:17:29 -07002789TEST(CONVOLUTION_NHWC_QU8, 3x3d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002790 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002791 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002792 .padding(2)
2793 .kernel_size(3, 3)
2794 .dilation(2)
2795 .group_input_channels(27)
2796 .group_output_channels(19)
2797 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002798 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002799}
2800
Marat Dukhan08b7a972020-07-14 18:17:29 -07002801TEST(CONVOLUTION_NHWC_QU8, 3x3d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002802 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002803 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002804 .padding(1, 2)
2805 .kernel_size(3, 3)
2806 .dilation(1, 2)
2807 .group_input_channels(27)
2808 .group_output_channels(19)
2809 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002810 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002811}
2812
Marat Dukhan08b7a972020-07-14 18:17:29 -07002813TEST(CONVOLUTION_NHWC_QU8, 3x3d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002814 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002815 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002816 .padding(2, 1)
2817 .kernel_size(3, 3)
2818 .dilation(2, 1)
2819 .group_input_channels(27)
2820 .group_output_channels(19)
2821 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002822 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002823}
2824
Marat Dukhan08b7a972020-07-14 18:17:29 -07002825TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002826 ConvolutionOperatorTester()
2827 .input_size(15, 14)
2828 .padding(1, 1)
2829 .kernel_size(3, 3)
2830 .groups(27)
2831 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002832 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002833}
2834
Marat Dukhan08b7a972020-07-14 18:17:29 -07002835TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002836 ConvolutionOperatorTester()
2837 .has_bias(false)
2838 .input_size(15, 14)
2839 .padding(1, 1)
2840 .kernel_size(3, 3)
2841 .groups(27)
2842 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002843 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002844}
2845
Marat Dukhan08b7a972020-07-14 18:17:29 -07002846TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002847 ConvolutionOperatorTester()
2848 .input_size(15, 14)
2849 .padding(1, 1)
2850 .kernel_size(3, 3)
2851 .subsampling(2)
2852 .groups(27)
2853 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002854 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002855}
2856
Marat Dukhan08b7a972020-07-14 18:17:29 -07002857TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002858 for (size_t input_height = 14; input_height <= 15; input_height++) {
2859 for (size_t input_width = 14; input_width <= 15; input_width++) {
2860 ConvolutionOperatorTester()
2861 .input_size(input_height, input_width)
2862 .padding_tf_same(true)
2863 .kernel_size(3, 3)
2864 .subsampling(2)
2865 .groups(27)
2866 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002867 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07002868 }
2869 }
2870}
2871
Marat Dukhan08b7a972020-07-14 18:17:29 -07002872TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002873 ConvolutionOperatorTester()
2874 .input_size(15, 14)
2875 .padding(1, 1)
2876 .kernel_size(3, 3)
2877 .subsampling(1, 2)
2878 .groups(27)
2879 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002880 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002881}
2882
Marat Dukhan08b7a972020-07-14 18:17:29 -07002883TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s1x2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002884 for (size_t input_height = 14; input_height <= 15; input_height++) {
2885 for (size_t input_width = 14; input_width <= 15; input_width++) {
2886 ConvolutionOperatorTester()
2887 .input_size(input_height, input_width)
2888 .padding_tf_same(true)
2889 .kernel_size(3, 3)
2890 .subsampling(1, 2)
2891 .groups(27)
2892 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002893 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07002894 }
2895 }
2896}
2897
Marat Dukhan08b7a972020-07-14 18:17:29 -07002898TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002899 ConvolutionOperatorTester()
2900 .input_size(15, 14)
2901 .padding(1, 1)
2902 .kernel_size(3, 3)
2903 .subsampling(2, 1)
2904 .groups(27)
2905 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002906 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002907}
2908
Marat Dukhan08b7a972020-07-14 18:17:29 -07002909TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s2x1_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002910 for (size_t input_height = 14; input_height <= 15; input_height++) {
2911 for (size_t input_width = 14; input_width <= 15; input_width++) {
2912 ConvolutionOperatorTester()
2913 .input_size(input_height, input_width)
2914 .padding_tf_same(true)
2915 .kernel_size(3, 3)
2916 .subsampling(2, 1)
2917 .groups(27)
2918 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002919 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07002920 }
2921 }
2922}
2923
Marat Dukhan08b7a972020-07-14 18:17:29 -07002924TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002925 ConvolutionOperatorTester()
2926 .input_size(15, 14)
2927 .padding(1, 1)
2928 .kernel_size(3, 3)
2929 .dilation(2)
2930 .groups(27)
2931 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002932 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002933}
2934
Marat Dukhan08b7a972020-07-14 18:17:29 -07002935TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002936 ConvolutionOperatorTester()
2937 .input_size(15, 14)
2938 .padding(1, 1)
2939 .kernel_size(3, 3)
2940 .dilation(1, 2)
2941 .groups(27)
2942 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002943 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002944}
2945
Marat Dukhan08b7a972020-07-14 18:17:29 -07002946TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002947 ConvolutionOperatorTester()
2948 .input_size(15, 14)
2949 .padding(1, 1)
2950 .kernel_size(3, 3)
2951 .dilation(2, 1)
2952 .groups(27)
2953 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002954 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002955}
2956
Marat Dukhan08b7a972020-07-14 18:17:29 -07002957TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002958 ConvolutionOperatorTester()
2959 .depthwise_layout(true)
2960 .input_size(15, 14)
2961 .kernel_size(1, 1)
2962 .groups(24)
2963 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002964 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002965}
2966
Marat Dukhan08b7a972020-07-14 18:17:29 -07002967TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 1x1_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002968 ConvolutionOperatorTester()
2969 .depthwise_layout(true)
2970 .input_size(15, 14)
2971 .kernel_size(1, 1)
2972 .groups(24)
2973 .group_output_channels(3)
2974 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002975 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002976}
2977
Marat Dukhan08b7a972020-07-14 18:17:29 -07002978TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002979 ConvolutionOperatorTester()
2980 .depthwise_layout(true)
2981 .has_bias(false)
2982 .input_size(15, 14)
2983 .kernel_size(1, 1)
2984 .groups(24)
2985 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002986 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002987}
2988
Marat Dukhan08b7a972020-07-14 18:17:29 -07002989TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002990 ConvolutionOperatorTester()
2991 .depthwise_layout(true)
2992 .input_size(15, 14)
2993 .padding(1, 1)
2994 .kernel_size(3, 3)
2995 .groups(24)
2996 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002997 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002998}
2999
Marat Dukhan08b7a972020-07-14 18:17:29 -07003000TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 3x3_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003001 ConvolutionOperatorTester()
3002 .depthwise_layout(true)
3003 .input_size(15, 14)
3004 .padding(1, 1)
3005 .kernel_size(3, 3)
3006 .groups(24)
3007 .group_output_channels(3)
3008 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003009 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003010}
3011
Marat Dukhan08b7a972020-07-14 18:17:29 -07003012TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003013 ConvolutionOperatorTester()
3014 .depthwise_layout(true)
3015 .has_bias(false)
3016 .input_size(15, 14)
3017 .padding(1, 1)
3018 .kernel_size(3, 3)
3019 .groups(24)
3020 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003021 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07003022}
3023
Marat Dukhan08b7a972020-07-14 18:17:29 -07003024TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07003025 for (size_t input_height = 14; input_height <= 15; input_height++) {
3026 for (size_t input_width = 14; input_width <= 15; input_width++) {
3027 ConvolutionOperatorTester()
3028 .depthwise_layout(true)
3029 .input_size(input_height, input_width)
3030 .padding_tf_same(true)
3031 .kernel_size(3, 3)
3032 .groups(24)
3033 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003034 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07003035 }
3036 }
3037}
3038
Marat Dukhan08b7a972020-07-14 18:17:29 -07003039TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 5x5) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003040 ConvolutionOperatorTester()
3041 .depthwise_layout(true)
3042 .input_size(15, 14)
3043 .padding(2, 2)
3044 .kernel_size(5, 5)
3045 .groups(24)
3046 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003047 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003048}
3049
Marat Dukhan08b7a972020-07-14 18:17:29 -07003050TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 5x5_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003051 ConvolutionOperatorTester()
3052 .depthwise_layout(true)
3053 .has_bias(false)
3054 .input_size(15, 14)
3055 .padding(2, 2)
3056 .kernel_size(5, 5)
3057 .groups(24)
3058 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003059 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07003060}
3061
Marat Dukhan08b7a972020-07-14 18:17:29 -07003062TEST(CONVOLUTION_NHWC_QU8, setup_changing_input_buffer) {
Marat Dukhan202eed02019-11-20 16:21:10 -08003063 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
3064 ConvolutionOperatorTester()
3065 .batch_size(3)
3066 .input_height(8)
3067 .input_width(8)
3068 .kernel_height(5)
3069 .kernel_width(3)
3070 .group_input_channels(15)
3071 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003072 .TestSetupNHWCxQU8();
Marat Dukhan202eed02019-11-20 16:21:10 -08003073}
3074
Marat Dukhan08b7a972020-07-14 18:17:29 -07003075TEST(CONVOLUTION_NHWC_QU8, setup_changing_input_buffer_grouped) {
Marat Dukhan202eed02019-11-20 16:21:10 -08003076 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
3077 ConvolutionOperatorTester()
3078 .batch_size(3)
3079 .input_height(8)
3080 .input_width(8)
3081 .kernel_height(5)
3082 .kernel_width(3)
3083 .groups(2)
3084 .group_input_channels(15)
3085 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003086 .TestSetupNHWCxQU8();
Marat Dukhan202eed02019-11-20 16:21:10 -08003087}
3088
Marat Dukhan08b7a972020-07-14 18:17:29 -07003089TEST(CONVOLUTION_NHWC_QU8, setup_changing_input_buffer_depthwise) {
Marat Dukhan202eed02019-11-20 16:21:10 -08003090 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
3091 ConvolutionOperatorTester()
3092 .batch_size(3)
3093 .input_height(8)
3094 .input_width(8)
3095 .kernel_height(3)
3096 .kernel_width(3)
3097 .groups(19)
3098 .group_input_channels(1)
3099 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003100 .TestSetupNHWCxQU8();
Marat Dukhan202eed02019-11-20 16:21:10 -08003101}
3102
Marat Dukhan08b7a972020-07-14 18:17:29 -07003103TEST(CONVOLUTION_NHWC_QU8, setup_increasing_batch) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003104 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003105 ConvolutionOperatorTester()
3106 .batch_size(3)
3107 .next_batch_size(5)
3108 .input_height(8)
3109 .input_width(8)
3110 .kernel_height(5)
3111 .kernel_width(3)
3112 .group_input_channels(15)
3113 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003114 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003115}
3116
Marat Dukhan08b7a972020-07-14 18:17:29 -07003117TEST(CONVOLUTION_NHWC_QU8, setup_increasing_batch_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003118 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003119 ConvolutionOperatorTester()
3120 .batch_size(3)
3121 .next_batch_size(5)
3122 .input_height(8)
3123 .input_width(8)
3124 .kernel_height(5)
3125 .kernel_width(3)
3126 .groups(2)
3127 .group_input_channels(15)
3128 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003129 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003130}
3131
Marat Dukhan08b7a972020-07-14 18:17:29 -07003132TEST(CONVOLUTION_NHWC_QU8, setup_increasing_batch_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003133 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003134 ConvolutionOperatorTester()
3135 .batch_size(3)
3136 .next_batch_size(5)
3137 .input_height(8)
3138 .input_width(8)
3139 .kernel_height(3)
3140 .kernel_width(3)
3141 .groups(19)
3142 .group_input_channels(1)
3143 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003144 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003145}
3146
Marat Dukhan08b7a972020-07-14 18:17:29 -07003147TEST(CONVOLUTION_NHWC_QU8, setup_decreasing_batch) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003148 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003149 ConvolutionOperatorTester()
3150 .batch_size(5)
3151 .next_batch_size(3)
3152 .input_height(8)
3153 .input_width(8)
3154 .kernel_height(5)
3155 .kernel_width(3)
3156 .group_input_channels(15)
3157 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003158 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003159}
3160
Marat Dukhan08b7a972020-07-14 18:17:29 -07003161TEST(CONVOLUTION_NHWC_QU8, setup_decreasing_batch_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003162 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003163 ConvolutionOperatorTester()
3164 .batch_size(5)
3165 .next_batch_size(3)
3166 .input_height(8)
3167 .input_width(8)
3168 .kernel_height(5)
3169 .kernel_width(3)
3170 .groups(2)
3171 .group_input_channels(15)
3172 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003173 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003174}
3175
Marat Dukhan08b7a972020-07-14 18:17:29 -07003176TEST(CONVOLUTION_NHWC_QU8, setup_decreasing_batch_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003177 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003178 ConvolutionOperatorTester()
3179 .batch_size(5)
3180 .next_batch_size(3)
3181 .input_height(8)
3182 .input_width(8)
3183 .kernel_height(3)
3184 .kernel_width(3)
3185 .groups(19)
3186 .group_input_channels(1)
3187 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003188 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003189}
3190
Marat Dukhan08b7a972020-07-14 18:17:29 -07003191TEST(CONVOLUTION_NHWC_QU8, setup_changing_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003192 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003193 ConvolutionOperatorTester()
3194 .batch_size(3)
3195 .input_height(8)
3196 .input_width(8)
3197 .next_input_height(9)
3198 .kernel_height(5)
3199 .kernel_width(3)
3200 .group_input_channels(15)
3201 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003202 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003203 ConvolutionOperatorTester()
3204 .batch_size(3)
3205 .input_height(8)
3206 .input_width(8)
3207 .next_input_height(7)
3208 .kernel_height(5)
3209 .kernel_width(3)
3210 .group_input_channels(15)
3211 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003212 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003213}
3214
Marat Dukhan08b7a972020-07-14 18:17:29 -07003215TEST(CONVOLUTION_NHWC_QU8, setup_changing_height_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003216 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003217 ConvolutionOperatorTester()
3218 .batch_size(3)
3219 .input_height(8)
3220 .input_width(8)
3221 .next_input_height(9)
3222 .kernel_height(5)
3223 .kernel_width(3)
3224 .groups(2)
3225 .group_input_channels(15)
3226 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003227 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003228 ConvolutionOperatorTester()
3229 .batch_size(3)
3230 .input_height(8)
3231 .input_width(8)
3232 .next_input_height(7)
3233 .kernel_height(5)
3234 .kernel_width(3)
3235 .groups(2)
3236 .group_input_channels(15)
3237 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003238 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003239}
3240
Marat Dukhan08b7a972020-07-14 18:17:29 -07003241TEST(CONVOLUTION_NHWC_QU8, setup_changing_height_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003242 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003243 ConvolutionOperatorTester()
3244 .batch_size(3)
3245 .input_height(8)
3246 .input_width(8)
3247 .next_input_height(9)
3248 .kernel_height(3)
3249 .kernel_width(3)
3250 .groups(19)
3251 .group_input_channels(1)
3252 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003253 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003254 ConvolutionOperatorTester()
3255 .batch_size(3)
3256 .input_height(8)
3257 .input_width(8)
3258 .next_input_height(7)
3259 .kernel_height(3)
3260 .kernel_width(3)
3261 .groups(19)
3262 .group_input_channels(1)
3263 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003264 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003265}
3266
Marat Dukhan08b7a972020-07-14 18:17:29 -07003267TEST(CONVOLUTION_NHWC_QU8, setup_changing_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003268 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003269 ConvolutionOperatorTester()
3270 .batch_size(3)
3271 .input_height(8)
3272 .input_width(8)
3273 .next_input_width(9)
3274 .kernel_height(5)
3275 .kernel_width(3)
3276 .group_input_channels(15)
3277 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003278 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003279 ConvolutionOperatorTester()
3280 .batch_size(3)
3281 .input_height(8)
3282 .input_width(8)
3283 .next_input_width(7)
3284 .kernel_height(5)
3285 .kernel_width(3)
3286 .group_input_channels(15)
3287 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003288 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003289}
3290
Marat Dukhan08b7a972020-07-14 18:17:29 -07003291TEST(CONVOLUTION_NHWC_QU8, setup_changing_width_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003292 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003293 ConvolutionOperatorTester()
3294 .batch_size(3)
3295 .input_height(8)
3296 .input_width(8)
3297 .next_input_width(9)
3298 .kernel_height(5)
3299 .kernel_width(3)
3300 .groups(2)
3301 .group_input_channels(15)
3302 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003303 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003304 ConvolutionOperatorTester()
3305 .batch_size(3)
3306 .input_height(8)
3307 .input_width(8)
3308 .next_input_width(7)
3309 .kernel_height(5)
3310 .kernel_width(3)
3311 .groups(2)
3312 .group_input_channels(15)
3313 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003314 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003315}
3316
Marat Dukhan08b7a972020-07-14 18:17:29 -07003317TEST(CONVOLUTION_NHWC_QU8, setup_changing_width_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003318 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003319 ConvolutionOperatorTester()
3320 .batch_size(3)
3321 .input_height(8)
3322 .input_width(8)
3323 .next_input_width(9)
3324 .kernel_height(3)
3325 .kernel_width(3)
3326 .groups(19)
3327 .group_input_channels(1)
3328 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003329 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003330 ConvolutionOperatorTester()
3331 .batch_size(3)
3332 .input_height(8)
3333 .input_width(8)
3334 .next_input_width(7)
3335 .kernel_height(3)
3336 .kernel_width(3)
3337 .groups(19)
3338 .group_input_channels(1)
3339 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003340 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003341}
3342
Marat Dukhan08b7a972020-07-14 18:17:29 -07003343TEST(CONVOLUTION_NHWC_QU8, setup_swap_height_and_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003344 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003345 ConvolutionOperatorTester()
3346 .batch_size(3)
3347 .input_height(9)
3348 .input_width(8)
3349 .next_input_height(8)
3350 .next_input_width(9)
3351 .kernel_height(5)
3352 .kernel_width(3)
3353 .group_input_channels(15)
3354 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003355 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003356}
3357
Marat Dukhan08b7a972020-07-14 18:17:29 -07003358TEST(CONVOLUTION_NHWC_QU8, setup_swap_height_and_width_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003359 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003360 ConvolutionOperatorTester()
3361 .batch_size(3)
3362 .input_height(9)
3363 .input_width(8)
3364 .next_input_height(8)
3365 .next_input_width(9)
3366 .kernel_height(5)
3367 .kernel_width(3)
3368 .groups(2)
3369 .group_input_channels(15)
3370 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003371 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003372}
3373
Marat Dukhan08b7a972020-07-14 18:17:29 -07003374TEST(CONVOLUTION_NHWC_QU8, setup_swap_height_and_width_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003375 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003376 ConvolutionOperatorTester()
3377 .batch_size(3)
3378 .input_height(9)
3379 .input_width(8)
3380 .next_input_height(8)
3381 .next_input_width(9)
3382 .kernel_height(3)
3383 .kernel_width(3)
3384 .groups(19)
3385 .group_input_channels(1)
3386 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003387 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003388}
3389
Marat Dukhanefc47b82019-11-18 09:25:38 -08003390TEST(CONVOLUTION_NHWC_F32, 1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003391 ConvolutionOperatorTester()
3392 .input_size(27, 29)
3393 .kernel_size(1, 1)
3394 .group_input_channels(23)
3395 .group_output_channels(19)
3396 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003397 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003398}
3399
Marat Dukhanefc47b82019-11-18 09:25:38 -08003400TEST(CONVOLUTION_NHWC_F32, 1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003401 ConvolutionOperatorTester()
3402 .input_size(27, 29)
3403 .kernel_size(1, 1)
3404 .group_input_channels(23)
3405 .group_output_channels(19)
3406 .qmin(128)
3407 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003408 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003409}
3410
Marat Dukhanefc47b82019-11-18 09:25:38 -08003411TEST(CONVOLUTION_NHWC_F32, 1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003412 ConvolutionOperatorTester()
3413 .input_size(27, 29)
3414 .kernel_size(1, 1)
3415 .group_input_channels(23)
3416 .group_output_channels(19)
3417 .qmax(128)
3418 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003419 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003420}
3421
Marat Dukhanefc47b82019-11-18 09:25:38 -08003422TEST(CONVOLUTION_NHWC_F32, 1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003423 ConvolutionOperatorTester()
3424 .input_size(27, 29)
3425 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003426 .input_channel_stride(28)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003427 .group_input_channels(23)
3428 .group_output_channels(19)
3429 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003430 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003431}
3432
Marat Dukhanefc47b82019-11-18 09:25:38 -08003433TEST(CONVOLUTION_NHWC_F32, 1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003434 ConvolutionOperatorTester()
3435 .input_size(27, 29)
3436 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003437 .output_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003438 .group_input_channels(23)
3439 .group_output_channels(19)
3440 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003441 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003442}
3443
Marat Dukhanefc47b82019-11-18 09:25:38 -08003444TEST(CONVOLUTION_NHWC_F32, 1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003445 ConvolutionOperatorTester()
3446 .has_bias(false)
3447 .input_size(13, 14)
3448 .kernel_size(1, 1)
3449 .group_input_channels(23)
3450 .group_output_channels(19)
3451 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003452 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07003453}
3454
Marat Dukhanefc47b82019-11-18 09:25:38 -08003455TEST(CONVOLUTION_NHWC_F32, 1x1_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003456 ConvolutionOperatorTester()
3457 .batch_size(3)
3458 .input_size(13, 14)
3459 .kernel_size(1, 1)
3460 .group_input_channels(23)
3461 .group_output_channels(19)
3462 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003463 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003464}
3465
Marat Dukhanefc47b82019-11-18 09:25:38 -08003466TEST(CONVOLUTION_NHWC_F32, grouped_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003467 ConvolutionOperatorTester()
3468 .input_size(24, 25)
3469 .kernel_size(1, 1)
3470 .groups(2)
3471 .group_input_channels(17)
3472 .group_output_channels(19)
3473 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003474 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003475}
3476
Marat Dukhanefc47b82019-11-18 09:25:38 -08003477TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003478 ConvolutionOperatorTester()
3479 .input_size(24, 25)
3480 .kernel_size(1, 1)
3481 .groups(2)
3482 .group_input_channels(17)
3483 .group_output_channels(19)
3484 .qmin(128)
3485 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003486 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003487}
3488
Marat Dukhanefc47b82019-11-18 09:25:38 -08003489TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003490 ConvolutionOperatorTester()
3491 .input_size(24, 25)
3492 .kernel_size(1, 1)
3493 .groups(2)
3494 .group_input_channels(17)
3495 .group_output_channels(19)
3496 .qmax(128)
3497 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003498 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003499}
3500
Marat Dukhanefc47b82019-11-18 09:25:38 -08003501TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003502 ConvolutionOperatorTester()
3503 .input_size(24, 25)
3504 .kernel_size(1, 1)
3505 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003506 .input_channel_stride(37)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003507 .group_input_channels(17)
3508 .group_output_channels(19)
3509 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003510 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003511}
3512
Marat Dukhanefc47b82019-11-18 09:25:38 -08003513TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003514 ConvolutionOperatorTester()
3515 .input_size(24, 25)
3516 .kernel_size(1, 1)
3517 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003518 .output_channel_stride(41)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003519 .group_input_channels(17)
3520 .group_output_channels(19)
3521 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003522 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003523}
3524
Marat Dukhanefc47b82019-11-18 09:25:38 -08003525TEST(CONVOLUTION_NHWC_F32, grouped_1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003526 ConvolutionOperatorTester()
3527 .has_bias(false)
3528 .input_size(24, 25)
3529 .kernel_size(1, 1)
3530 .groups(2)
3531 .group_input_channels(17)
3532 .group_output_channels(19)
3533 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003534 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07003535}
3536
Marat Dukhanefc47b82019-11-18 09:25:38 -08003537TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003538 ConvolutionOperatorTester()
3539 .batch_size(3)
3540 .input_size(24, 25)
3541 .kernel_size(1, 1)
3542 .groups(2)
3543 .group_input_channels(17)
3544 .group_output_channels(19)
3545 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003546 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003547}
3548
Marat Dukhanefc47b82019-11-18 09:25:38 -08003549TEST(CONVOLUTION_NHWC_F32, unioutput_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003550 ConvolutionOperatorTester()
3551 .input_size(1, 1)
3552 .kernel_size(1, 1)
3553 .group_input_channels(23)
3554 .group_output_channels(19)
3555 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003556 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003557}
3558
Marat Dukhanefc47b82019-11-18 09:25:38 -08003559TEST(CONVOLUTION_NHWC_F32, unioutput_1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003560 ConvolutionOperatorTester()
3561 .input_size(1, 1)
3562 .kernel_size(1, 1)
3563 .group_input_channels(23)
3564 .group_output_channels(19)
3565 .qmin(128)
3566 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003567 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003568}
3569
Marat Dukhanefc47b82019-11-18 09:25:38 -08003570TEST(CONVOLUTION_NHWC_F32, unioutput_1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003571 ConvolutionOperatorTester()
3572 .input_size(1, 1)
3573 .kernel_size(1, 1)
3574 .group_input_channels(23)
3575 .group_output_channels(19)
3576 .qmax(128)
3577 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003578 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003579}
3580
Marat Dukhanefc47b82019-11-18 09:25:38 -08003581TEST(CONVOLUTION_NHWC_F32, unioutput_1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003582 ConvolutionOperatorTester()
3583 .input_size(1, 1)
3584 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003585 .input_channel_stride(28)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003586 .group_input_channels(23)
3587 .group_output_channels(19)
3588 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003589 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003590}
3591
Marat Dukhanefc47b82019-11-18 09:25:38 -08003592TEST(CONVOLUTION_NHWC_F32, unioutput_1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003593 ConvolutionOperatorTester()
3594 .input_size(1, 1)
3595 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003596 .output_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003597 .group_input_channels(23)
3598 .group_output_channels(19)
3599 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003600 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003601}
3602
Marat Dukhanefc47b82019-11-18 09:25:38 -08003603TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003604 ConvolutionOperatorTester()
3605 .input_size(1, 1)
3606 .kernel_size(1, 1)
3607 .groups(2)
3608 .group_input_channels(17)
3609 .group_output_channels(13)
3610 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003611 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003612}
3613
Marat Dukhanefc47b82019-11-18 09:25:38 -08003614TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003615 ConvolutionOperatorTester()
3616 .input_size(1, 1)
3617 .kernel_size(1, 1)
3618 .groups(2)
3619 .group_input_channels(17)
3620 .group_output_channels(13)
3621 .qmin(128)
3622 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003623 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003624}
3625
Marat Dukhanefc47b82019-11-18 09:25:38 -08003626TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003627 ConvolutionOperatorTester()
3628 .input_size(1, 1)
3629 .kernel_size(1, 1)
3630 .groups(2)
3631 .group_input_channels(17)
3632 .group_output_channels(13)
3633 .qmax(128)
3634 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003635 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003636}
3637
Marat Dukhanefc47b82019-11-18 09:25:38 -08003638TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003639 ConvolutionOperatorTester()
3640 .input_size(1, 1)
3641 .kernel_size(1, 1)
3642 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003643 .input_channel_stride(37)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003644 .group_input_channels(17)
3645 .group_output_channels(13)
3646 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003647 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003648}
3649
Marat Dukhanefc47b82019-11-18 09:25:38 -08003650TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003651 ConvolutionOperatorTester()
3652 .input_size(1, 1)
3653 .kernel_size(1, 1)
3654 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003655 .output_channel_stride(41)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003656 .group_input_channels(17)
3657 .group_output_channels(13)
3658 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003659 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003660}
3661
Marat Dukhanefc47b82019-11-18 09:25:38 -08003662TEST(CONVOLUTION_NHWC_F32, 1x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003663 ConvolutionOperatorTester()
3664 .input_size(20, 19)
3665 .padding_width(1)
3666 .kernel_size(1, 3)
3667 .group_input_channels(17)
3668 .group_output_channels(15)
3669 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003670 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003671}
3672
Marat Dukhanefc47b82019-11-18 09:25:38 -08003673TEST(CONVOLUTION_NHWC_F32, grouped_1x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003674 ConvolutionOperatorTester()
3675 .input_size(20, 19)
3676 .padding_width(1)
3677 .kernel_size(1, 3)
3678 .groups(2)
3679 .group_input_channels(17)
3680 .group_output_channels(15)
3681 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003682 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003683}
3684
Marat Dukhanefc47b82019-11-18 09:25:38 -08003685TEST(CONVOLUTION_NHWC_F32, 3x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003686 ConvolutionOperatorTester()
3687 .input_size(19, 20)
3688 .padding_height(1)
3689 .kernel_size(3, 1)
3690 .group_input_channels(17)
3691 .group_output_channels(15)
3692 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003693 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003694}
3695
Marat Dukhanefc47b82019-11-18 09:25:38 -08003696TEST(CONVOLUTION_NHWC_F32, grouped_3x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003697 ConvolutionOperatorTester()
3698 .input_size(19, 20)
3699 .padding_height(1)
3700 .kernel_size(3, 1)
3701 .groups(2)
3702 .group_input_channels(17)
3703 .group_output_channels(15)
3704 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003705 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003706}
3707
Marat Dukhanefc47b82019-11-18 09:25:38 -08003708TEST(CONVOLUTION_NHWC_F32, 3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003709 ConvolutionOperatorTester()
3710 .input_size(13, 12)
3711 .padding(1)
3712 .kernel_size(3, 3)
3713 .group_input_channels(15)
3714 .group_output_channels(17)
3715 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003716 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003717}
3718
Marat Dukhanefc47b82019-11-18 09:25:38 -08003719TEST(CONVOLUTION_NHWC_F32, 3x3_without_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003720 ConvolutionOperatorTester()
3721 .input_size(13, 12)
3722 .kernel_size(3, 3)
3723 .group_input_channels(15)
3724 .group_output_channels(17)
3725 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003726 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003727}
3728
Marat Dukhanefc47b82019-11-18 09:25:38 -08003729TEST(CONVOLUTION_NHWC_F32, 3x3_with_left_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003730 ConvolutionOperatorTester()
3731 .input_size(13, 12)
3732 .padding_left(1)
3733 .kernel_size(3, 3)
3734 .group_input_channels(15)
3735 .group_output_channels(17)
3736 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003737 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003738}
3739
Marat Dukhanefc47b82019-11-18 09:25:38 -08003740TEST(CONVOLUTION_NHWC_F32, 3x3_with_right_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003741 ConvolutionOperatorTester()
3742 .input_size(13, 12)
3743 .padding_right(1)
3744 .kernel_size(3, 3)
3745 .group_input_channels(15)
3746 .group_output_channels(17)
3747 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003748 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003749}
3750
Marat Dukhanefc47b82019-11-18 09:25:38 -08003751TEST(CONVOLUTION_NHWC_F32, 3x3_with_top_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003752 ConvolutionOperatorTester()
3753 .input_size(13, 12)
3754 .padding_top(1)
3755 .kernel_size(3, 3)
3756 .group_input_channels(15)
3757 .group_output_channels(17)
3758 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003759 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003760}
3761
Marat Dukhanefc47b82019-11-18 09:25:38 -08003762TEST(CONVOLUTION_NHWC_F32, 3x3_with_bottom_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003763 ConvolutionOperatorTester()
3764 .input_size(13, 12)
3765 .padding_bottom(1)
3766 .kernel_size(3, 3)
3767 .group_input_channels(15)
3768 .group_output_channels(17)
3769 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003770 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003771}
3772
Marat Dukhanefc47b82019-11-18 09:25:38 -08003773TEST(CONVOLUTION_NHWC_F32, 3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003774 ConvolutionOperatorTester()
3775 .input_size(13, 12)
3776 .padding(1)
3777 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003778 .input_channel_stride(22)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003779 .group_input_channels(15)
3780 .group_output_channels(17)
3781 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003782 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003783}
3784
Marat Dukhanefc47b82019-11-18 09:25:38 -08003785TEST(CONVOLUTION_NHWC_F32, 3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003786 ConvolutionOperatorTester()
3787 .input_size(13, 12)
3788 .padding(1)
3789 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003790 .output_channel_stride(23)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003791 .group_input_channels(15)
3792 .group_output_channels(17)
3793 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003794 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003795}
3796
Marat Dukhanefc47b82019-11-18 09:25:38 -08003797TEST(CONVOLUTION_NHWC_F32, 3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003798 ConvolutionOperatorTester()
3799 .has_bias(false)
3800 .input_size(10, 9)
3801 .padding(1)
3802 .kernel_size(3, 3)
3803 .group_input_channels(15)
3804 .group_output_channels(17)
3805 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003806 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07003807}
3808
Marat Dukhanefc47b82019-11-18 09:25:38 -08003809TEST(CONVOLUTION_NHWC_F32, 3x3_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003810 ConvolutionOperatorTester()
3811 .batch_size(3)
3812 .input_size(10, 9)
3813 .padding(1)
3814 .kernel_size(3, 3)
3815 .group_input_channels(15)
3816 .group_output_channels(17)
3817 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003818 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003819}
3820
Marat Dukhanefc47b82019-11-18 09:25:38 -08003821TEST(CONVOLUTION_NHWC_F32, grouped_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003822 ConvolutionOperatorTester()
3823 .input_size(10, 11)
3824 .padding(1)
3825 .kernel_size(3, 3)
3826 .groups(2)
3827 .group_input_channels(14)
3828 .group_output_channels(13)
3829 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003830 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003831}
3832
Marat Dukhanefc47b82019-11-18 09:25:38 -08003833TEST(CONVOLUTION_NHWC_F32, grouped_3x3_without_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003834 ConvolutionOperatorTester()
3835 .input_size(13, 12)
3836 .kernel_size(3, 3)
3837 .group_input_channels(15)
3838 .group_output_channels(17)
3839 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003840 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003841}
3842
Marat Dukhanefc47b82019-11-18 09:25:38 -08003843TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_left_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003844 ConvolutionOperatorTester()
3845 .input_size(10, 11)
3846 .padding_left(1)
3847 .kernel_size(3, 3)
3848 .groups(2)
3849 .group_input_channels(14)
3850 .group_output_channels(13)
3851 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003852 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003853}
3854
Marat Dukhanefc47b82019-11-18 09:25:38 -08003855TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_right_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003856 ConvolutionOperatorTester()
3857 .input_size(10, 11)
3858 .padding_right(1)
3859 .kernel_size(3, 3)
3860 .groups(2)
3861 .group_input_channels(14)
3862 .group_output_channels(13)
3863 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003864 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003865}
3866
Marat Dukhanefc47b82019-11-18 09:25:38 -08003867TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_top_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003868 ConvolutionOperatorTester()
3869 .input_size(10, 11)
3870 .padding_top(1)
3871 .kernel_size(3, 3)
3872 .groups(2)
3873 .group_input_channels(14)
3874 .group_output_channels(13)
3875 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003876 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003877}
3878
Marat Dukhanefc47b82019-11-18 09:25:38 -08003879TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_bottom_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003880 ConvolutionOperatorTester()
3881 .input_size(10, 11)
3882 .padding_bottom(1)
3883 .kernel_size(3, 3)
3884 .groups(2)
3885 .group_input_channels(14)
3886 .group_output_channels(13)
3887 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003888 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003889}
3890
Marat Dukhanefc47b82019-11-18 09:25:38 -08003891TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003892 ConvolutionOperatorTester()
3893 .input_size(10, 11)
3894 .padding(1)
3895 .kernel_size(3, 3)
3896 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003897 .input_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003898 .group_input_channels(14)
3899 .group_output_channels(13)
3900 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003901 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003902}
3903
Marat Dukhanefc47b82019-11-18 09:25:38 -08003904TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003905 ConvolutionOperatorTester()
3906 .input_size(10, 11)
3907 .padding(1)
3908 .kernel_size(3, 3)
3909 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003910 .output_channel_stride(31)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003911 .group_input_channels(14)
3912 .group_output_channels(13)
3913 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003914 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003915}
3916
Marat Dukhanefc47b82019-11-18 09:25:38 -08003917TEST(CONVOLUTION_NHWC_F32, grouped_3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003918 ConvolutionOperatorTester()
3919 .has_bias(false)
3920 .input_size(10, 11)
3921 .padding(1)
3922 .kernel_size(3, 3)
3923 .groups(2)
3924 .group_input_channels(14)
3925 .group_output_channels(13)
3926 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003927 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07003928}
3929
Marat Dukhanefc47b82019-11-18 09:25:38 -08003930TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003931 ConvolutionOperatorTester()
3932 .batch_size(3)
3933 .input_size(10, 11)
3934 .padding(1)
3935 .kernel_size(3, 3)
3936 .groups(2)
3937 .group_input_channels(14)
3938 .group_output_channels(13)
3939 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003940 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003941}
3942
Marat Dukhanefc47b82019-11-18 09:25:38 -08003943TEST(CONVOLUTION_NHWC_F32, 3x3s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003944 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07003945 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003946 .padding(1)
3947 .kernel_size(3, 3)
3948 .subsampling(2)
3949 .group_input_channels(27)
3950 .group_output_channels(19)
3951 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003952 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003953}
3954
Marat Dukhanefc47b82019-11-18 09:25:38 -08003955TEST(CONVOLUTION_NHWC_F32, 3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07003956 for (size_t input_height = 13; input_height <= 14; input_height++) {
3957 for (size_t input_width = 13; input_width <= 14; input_width++) {
3958 ConvolutionOperatorTester()
3959 .input_size(input_height, input_width)
3960 .padding_tf_same(true)
3961 .kernel_size(3, 3)
3962 .subsampling(2)
3963 .group_input_channels(27)
3964 .group_output_channels(19)
3965 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003966 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07003967 }
3968 }
3969}
3970
Marat Dukhanefc47b82019-11-18 09:25:38 -08003971TEST(CONVOLUTION_NHWC_F32, 3x3s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003972 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07003973 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003974 .padding(1)
3975 .kernel_size(3, 3)
3976 .subsampling(1, 2)
3977 .group_input_channels(27)
3978 .group_output_channels(19)
3979 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003980 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003981}
3982
Marat Dukhanefc47b82019-11-18 09:25:38 -08003983TEST(CONVOLUTION_NHWC_F32, 3x3s1x2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07003984 for (size_t input_height = 13; input_height <= 14; input_height++) {
3985 for (size_t input_width = 13; input_width <= 14; input_width++) {
3986 ConvolutionOperatorTester()
3987 .input_size(input_height, input_width)
3988 .padding_tf_same(true)
3989 .kernel_size(3, 3)
3990 .subsampling(1, 2)
3991 .group_input_channels(27)
3992 .group_output_channels(19)
3993 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003994 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07003995 }
3996 }
3997}
3998
Marat Dukhanefc47b82019-11-18 09:25:38 -08003999TEST(CONVOLUTION_NHWC_F32, 3x3s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004000 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07004001 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004002 .padding(1)
4003 .kernel_size(3, 3)
4004 .subsampling(2, 1)
4005 .group_input_channels(27)
4006 .group_output_channels(19)
4007 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004008 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004009}
4010
Marat Dukhanefc47b82019-11-18 09:25:38 -08004011TEST(CONVOLUTION_NHWC_F32, 3x3s2x1_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004012 for (size_t input_height = 13; input_height <= 14; input_height++) {
4013 for (size_t input_width = 13; input_width <= 14; input_width++) {
4014 ConvolutionOperatorTester()
4015 .input_size(input_height, input_width)
4016 .padding_tf_same(true)
4017 .kernel_size(3, 3)
4018 .subsampling(2, 1)
4019 .group_input_channels(27)
4020 .group_output_channels(19)
4021 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004022 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004023 }
4024 }
4025}
4026
Marat Dukhanefc47b82019-11-18 09:25:38 -08004027TEST(CONVOLUTION_NHWC_F32, 3x3d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004028 ConvolutionOperatorTester()
4029 .input_size(13, 14)
4030 .padding(2)
4031 .kernel_size(3, 3)
4032 .dilation(2)
4033 .group_input_channels(27)
4034 .group_output_channels(19)
4035 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004036 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004037}
4038
Marat Dukhanefc47b82019-11-18 09:25:38 -08004039TEST(CONVOLUTION_NHWC_F32, 3x3d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004040 ConvolutionOperatorTester()
4041 .input_size(14, 15)
4042 .padding(1, 2)
4043 .kernel_size(3, 3)
4044 .dilation(1, 2)
4045 .group_input_channels(27)
4046 .group_output_channels(19)
4047 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004048 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004049}
4050
Marat Dukhanefc47b82019-11-18 09:25:38 -08004051TEST(CONVOLUTION_NHWC_F32, 3x3d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004052 ConvolutionOperatorTester()
4053 .input_size(15, 14)
4054 .padding(2, 1)
4055 .kernel_size(3, 3)
4056 .dilation(2, 1)
4057 .group_input_channels(27)
4058 .group_output_channels(19)
4059 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004060 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004061}
4062
Marat Dukhanefc47b82019-11-18 09:25:38 -08004063TEST(CONVOLUTION_NHWC_F32, unioutput_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004064 ConvolutionOperatorTester()
4065 .input_size(3, 3)
4066 .padding(1)
4067 .kernel_size(3, 3)
4068 .group_input_channels(23)
4069 .group_output_channels(19)
4070 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004071 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004072}
4073
Marat Dukhanefc47b82019-11-18 09:25:38 -08004074TEST(CONVOLUTION_NHWC_F32, unioutput_3x3_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004075 ConvolutionOperatorTester()
4076 .input_size(3, 3)
4077 .padding(1)
4078 .kernel_size(3, 3)
4079 .group_input_channels(23)
4080 .group_output_channels(19)
4081 .qmin(128)
4082 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004083 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004084}
4085
Marat Dukhanefc47b82019-11-18 09:25:38 -08004086TEST(CONVOLUTION_NHWC_F32, unioutput_3x3_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004087 ConvolutionOperatorTester()
4088 .input_size(3, 3)
4089 .padding(1)
4090 .kernel_size(3, 3)
4091 .group_input_channels(23)
4092 .group_output_channels(19)
4093 .qmax(128)
4094 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004095 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004096}
4097
Marat Dukhanefc47b82019-11-18 09:25:38 -08004098TEST(CONVOLUTION_NHWC_F32, unioutput_3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004099 ConvolutionOperatorTester()
4100 .input_size(3, 3)
4101 .padding(1)
4102 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004103 .input_channel_stride(28)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004104 .group_input_channels(23)
4105 .group_output_channels(19)
4106 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004107 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004108}
4109
Marat Dukhanefc47b82019-11-18 09:25:38 -08004110TEST(CONVOLUTION_NHWC_F32, unioutput_3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004111 ConvolutionOperatorTester()
4112 .input_size(3, 3)
4113 .padding(1)
4114 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004115 .output_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004116 .group_input_channels(23)
4117 .group_output_channels(19)
4118 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004119 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004120}
4121
Marat Dukhanefc47b82019-11-18 09:25:38 -08004122TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004123 ConvolutionOperatorTester()
4124 .input_size(3, 3)
4125 .padding(1)
4126 .kernel_size(3, 3)
4127 .groups(2)
4128 .group_input_channels(17)
4129 .group_output_channels(13)
4130 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004131 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004132}
4133
Marat Dukhanefc47b82019-11-18 09:25:38 -08004134TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004135 ConvolutionOperatorTester()
4136 .input_size(3, 3)
4137 .padding(1)
4138 .kernel_size(3, 3)
4139 .groups(2)
4140 .group_input_channels(17)
4141 .group_output_channels(13)
4142 .qmin(128)
4143 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004144 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004145}
4146
Marat Dukhanefc47b82019-11-18 09:25:38 -08004147TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004148 ConvolutionOperatorTester()
4149 .input_size(3, 3)
4150 .padding(1)
4151 .kernel_size(3, 3)
4152 .groups(2)
4153 .group_input_channels(17)
4154 .group_output_channels(13)
4155 .qmax(128)
4156 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004157 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004158}
4159
Marat Dukhanefc47b82019-11-18 09:25:38 -08004160TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004161 ConvolutionOperatorTester()
4162 .input_size(3, 3)
4163 .padding(1)
4164 .kernel_size(3, 3)
4165 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004166 .input_channel_stride(37)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004167 .group_input_channels(17)
4168 .group_output_channels(13)
4169 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004170 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004171}
4172
Marat Dukhanefc47b82019-11-18 09:25:38 -08004173TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004174 ConvolutionOperatorTester()
4175 .input_size(3, 3)
4176 .padding(1)
4177 .kernel_size(3, 3)
4178 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004179 .output_channel_stride(41)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004180 .group_input_channels(17)
4181 .group_output_channels(13)
4182 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004183 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004184}
4185
Marat Dukhanefc47b82019-11-18 09:25:38 -08004186TEST(CONVOLUTION_NHWC_F32, depthwise_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004187 ConvolutionOperatorTester()
4188 .input_size(15, 14)
4189 .kernel_size(1, 1)
4190 .groups(24)
4191 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004192 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004193}
4194
Marat Dukhanefc47b82019-11-18 09:25:38 -08004195TEST(CONVOLUTION_NHWC_F32, depthwise_1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004196 ConvolutionOperatorTester()
4197 .has_bias(false)
4198 .input_size(15, 14)
4199 .kernel_size(1, 1)
4200 .groups(24)
4201 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004202 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004203}
4204
Marat Dukhanefc47b82019-11-18 09:25:38 -08004205TEST(CONVOLUTION_NHWC_F32, depthwise_2x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004206 ConvolutionOperatorTester()
4207 .input_size(15, 14)
4208 .padding(1, 1)
4209 .kernel_size(2, 2)
4210 .groups(24)
4211 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004212 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004213}
4214
Marat Dukhanefc47b82019-11-18 09:25:38 -08004215TEST(CONVOLUTION_NHWC_F32, depthwise_2x2_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004216 ConvolutionOperatorTester()
4217 .has_bias(false)
4218 .input_size(15, 14)
4219 .padding(1, 1)
4220 .kernel_size(2, 2)
4221 .groups(24)
4222 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004223 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004224}
4225
Marat Dukhanefc47b82019-11-18 09:25:38 -08004226TEST(CONVOLUTION_NHWC_F32, depthwise_2x2s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004227 ConvolutionOperatorTester()
4228 .input_size(15, 14)
4229 .padding(1, 1)
4230 .kernel_size(2, 2)
4231 .subsampling(2)
4232 .groups(27)
4233 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004234 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004235}
4236
Marat Dukhanefc47b82019-11-18 09:25:38 -08004237TEST(CONVOLUTION_NHWC_F32, depthwise_2x2s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004238 ConvolutionOperatorTester()
4239 .input_size(15, 14)
4240 .padding(1, 1)
4241 .kernel_size(2, 2)
4242 .subsampling(1, 2)
4243 .groups(27)
4244 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004245 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004246}
4247
Marat Dukhanefc47b82019-11-18 09:25:38 -08004248TEST(CONVOLUTION_NHWC_F32, depthwise_2x2s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004249 ConvolutionOperatorTester()
4250 .input_size(15, 14)
4251 .padding(1, 1)
4252 .kernel_size(2, 2)
4253 .subsampling(2, 1)
4254 .groups(27)
4255 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004256 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004257}
4258
Marat Dukhanefc47b82019-11-18 09:25:38 -08004259TEST(CONVOLUTION_NHWC_F32, depthwise_2x2d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004260 ConvolutionOperatorTester()
4261 .input_size(15, 14)
4262 .padding(1, 1)
4263 .kernel_size(2, 2)
4264 .dilation(2)
4265 .groups(27)
4266 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004267 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004268}
4269
Marat Dukhanefc47b82019-11-18 09:25:38 -08004270TEST(CONVOLUTION_NHWC_F32, depthwise_2x2d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004271 ConvolutionOperatorTester()
4272 .input_size(15, 14)
4273 .padding(1, 1)
4274 .kernel_size(2, 2)
4275 .dilation(1, 2)
4276 .groups(27)
4277 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004278 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004279}
4280
Marat Dukhanefc47b82019-11-18 09:25:38 -08004281TEST(CONVOLUTION_NHWC_F32, depthwise_2x2d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004282 ConvolutionOperatorTester()
4283 .input_size(15, 14)
4284 .padding(1, 1)
4285 .kernel_size(2, 2)
4286 .dilation(2, 1)
4287 .groups(27)
4288 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004289 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004290}
4291
Marat Dukhanefc47b82019-11-18 09:25:38 -08004292TEST(CONVOLUTION_NHWC_F32, depthwise_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004293 ConvolutionOperatorTester()
4294 .input_size(15, 14)
4295 .padding(1, 1)
4296 .kernel_size(3, 3)
4297 .groups(24)
4298 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004299 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004300}
4301
Marat Dukhanefc47b82019-11-18 09:25:38 -08004302TEST(CONVOLUTION_NHWC_F32, depthwise_3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004303 ConvolutionOperatorTester()
4304 .has_bias(false)
4305 .input_size(15, 14)
4306 .padding(1, 1)
4307 .kernel_size(3, 3)
4308 .groups(24)
4309 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004310 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004311}
4312
Marat Dukhanefc47b82019-11-18 09:25:38 -08004313TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004314 ConvolutionOperatorTester()
4315 .input_size(15, 14)
4316 .padding(1, 1)
4317 .kernel_size(3, 3)
4318 .subsampling(2)
4319 .groups(27)
4320 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004321 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004322}
4323
Marat Dukhanefc47b82019-11-18 09:25:38 -08004324TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004325 for (size_t input_height = 14; input_height <= 15; input_height++) {
4326 for (size_t input_width = 14; input_width <= 15; input_width++) {
4327 ConvolutionOperatorTester()
4328 .input_size(input_height, input_width)
4329 .padding_tf_same(true)
4330 .kernel_size(3, 3)
4331 .subsampling(2)
4332 .groups(27)
4333 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004334 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004335 }
4336 }
4337}
4338
Marat Dukhanefc47b82019-11-18 09:25:38 -08004339TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004340 ConvolutionOperatorTester()
4341 .input_size(15, 14)
4342 .padding(1, 1)
4343 .kernel_size(3, 3)
4344 .subsampling(1, 2)
4345 .groups(27)
4346 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004347 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004348}
4349
Marat Dukhanefc47b82019-11-18 09:25:38 -08004350TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s1x2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004351 for (size_t input_height = 14; input_height <= 15; input_height++) {
4352 for (size_t input_width = 14; input_width <= 15; input_width++) {
4353 ConvolutionOperatorTester()
4354 .input_size(input_height, input_width)
4355 .padding_tf_same(true)
4356 .kernel_size(3, 3)
4357 .subsampling(1, 2)
4358 .groups(27)
4359 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004360 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004361 }
4362 }
4363}
4364
Marat Dukhanefc47b82019-11-18 09:25:38 -08004365TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004366 ConvolutionOperatorTester()
4367 .input_size(15, 14)
4368 .padding(1, 1)
4369 .kernel_size(3, 3)
4370 .subsampling(2, 1)
4371 .groups(27)
4372 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004373 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004374}
4375
Marat Dukhanefc47b82019-11-18 09:25:38 -08004376TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2x1_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004377 for (size_t input_height = 14; input_height <= 15; input_height++) {
4378 for (size_t input_width = 14; input_width <= 15; input_width++) {
4379 ConvolutionOperatorTester()
4380 .input_size(input_height, input_width)
4381 .padding_tf_same(true)
4382 .kernel_size(3, 3)
4383 .subsampling(2, 1)
4384 .groups(27)
4385 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004386 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004387 }
4388 }
4389}
4390
Marat Dukhanefc47b82019-11-18 09:25:38 -08004391TEST(CONVOLUTION_NHWC_F32, depthwise_3x3d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004392 ConvolutionOperatorTester()
4393 .input_size(15, 14)
4394 .padding(1, 1)
4395 .kernel_size(3, 3)
4396 .dilation(2)
4397 .groups(27)
4398 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004399 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004400}
4401
Marat Dukhanefc47b82019-11-18 09:25:38 -08004402TEST(CONVOLUTION_NHWC_F32, depthwise_3x3d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004403 ConvolutionOperatorTester()
4404 .input_size(15, 14)
4405 .padding(1, 1)
4406 .kernel_size(3, 3)
4407 .dilation(1, 2)
4408 .groups(27)
4409 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004410 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004411}
4412
Marat Dukhanefc47b82019-11-18 09:25:38 -08004413TEST(CONVOLUTION_NHWC_F32, depthwise_3x3d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004414 ConvolutionOperatorTester()
4415 .input_size(15, 14)
4416 .padding(1, 1)
4417 .kernel_size(3, 3)
4418 .dilation(2, 1)
4419 .groups(27)
4420 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004421 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004422}
4423
Marat Dukhanefc47b82019-11-18 09:25:38 -08004424TEST(CONVOLUTION_NHWC_F32, depthwise_5x5) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004425 ConvolutionOperatorTester()
4426 .input_size(15, 14)
4427 .padding(2, 2)
4428 .kernel_size(5, 5)
4429 .groups(27)
4430 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004431 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004432}
4433
Marat Dukhanefc47b82019-11-18 09:25:38 -08004434TEST(CONVOLUTION_NHWC_F32, depthwise_5x5_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004435 ConvolutionOperatorTester()
4436 .has_bias(false)
4437 .input_size(15, 14)
4438 .padding(2, 2)
4439 .kernel_size(5, 5)
4440 .groups(27)
4441 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004442 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004443}
4444
Marat Dukhanefc47b82019-11-18 09:25:38 -08004445TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004446 ConvolutionOperatorTester()
4447 .input_size(15, 14)
4448 .padding(2, 2)
4449 .kernel_size(5, 5)
4450 .subsampling(2)
4451 .groups(27)
4452 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004453 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004454}
4455
Marat Dukhanefc47b82019-11-18 09:25:38 -08004456TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004457 ConvolutionOperatorTester()
4458 .input_size(15, 14)
4459 .padding(2, 2)
4460 .kernel_size(5, 5)
4461 .subsampling(1, 2)
4462 .groups(27)
4463 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004464 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004465}
4466
Marat Dukhanefc47b82019-11-18 09:25:38 -08004467TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004468 ConvolutionOperatorTester()
4469 .input_size(15, 14)
4470 .padding(2, 2)
4471 .kernel_size(5, 5)
4472 .subsampling(2, 1)
4473 .groups(27)
4474 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004475 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004476}
4477
Marat Dukhanefc47b82019-11-18 09:25:38 -08004478TEST(CONVOLUTION_NHWC_F32, depthwise_5x5d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004479 ConvolutionOperatorTester()
4480 .input_size(15, 14)
4481 .padding(2, 2)
4482 .kernel_size(5, 5)
4483 .dilation(2)
4484 .groups(27)
4485 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004486 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004487}
4488
Marat Dukhanefc47b82019-11-18 09:25:38 -08004489TEST(CONVOLUTION_NHWC_F32, depthwise_5x5d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004490 ConvolutionOperatorTester()
4491 .input_size(15, 14)
4492 .padding(2, 2)
4493 .kernel_size(5, 5)
4494 .dilation(1, 2)
4495 .groups(27)
4496 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004497 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004498}
4499
Marat Dukhanefc47b82019-11-18 09:25:38 -08004500TEST(CONVOLUTION_NHWC_F32, depthwise_5x5d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004501 ConvolutionOperatorTester()
4502 .input_size(15, 14)
4503 .padding(2, 2)
4504 .kernel_size(5, 5)
4505 .dilation(2, 1)
4506 .groups(27)
4507 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004508 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004509}
4510
Marat Dukhanefc47b82019-11-18 09:25:38 -08004511TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004512 ConvolutionOperatorTester()
4513 .depthwise_layout(true)
4514 .input_size(15, 14)
4515 .kernel_size(1, 1)
4516 .groups(24)
4517 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004518 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004519}
4520
Marat Dukhanefc47b82019-11-18 09:25:38 -08004521TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 1x1_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004522 ConvolutionOperatorTester()
4523 .depthwise_layout(true)
4524 .input_size(15, 14)
4525 .kernel_size(1, 1)
4526 .groups(24)
4527 .group_output_channels(3)
4528 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004529 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004530}
4531
Marat Dukhanefc47b82019-11-18 09:25:38 -08004532TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004533 ConvolutionOperatorTester()
4534 .depthwise_layout(true)
4535 .has_bias(false)
4536 .input_size(15, 14)
4537 .kernel_size(1, 1)
4538 .groups(24)
4539 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004540 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004541}
4542
Marat Dukhanefc47b82019-11-18 09:25:38 -08004543TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 2x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004544 ConvolutionOperatorTester()
4545 .depthwise_layout(true)
4546 .input_size(15, 14)
4547 .padding(1, 1)
4548 .kernel_size(2, 2)
4549 .groups(24)
4550 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004551 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004552}
4553
Marat Dukhanefc47b82019-11-18 09:25:38 -08004554TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 2x2_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004555 ConvolutionOperatorTester()
4556 .depthwise_layout(true)
4557 .input_size(15, 14)
4558 .padding(1, 1)
4559 .kernel_size(2, 2)
4560 .groups(24)
4561 .group_output_channels(3)
4562 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004563 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004564}
4565
Marat Dukhanefc47b82019-11-18 09:25:38 -08004566TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 2x2_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004567 ConvolutionOperatorTester()
4568 .depthwise_layout(true)
4569 .has_bias(false)
4570 .input_size(15, 14)
4571 .padding(1, 1)
4572 .kernel_size(2, 2)
4573 .groups(24)
4574 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004575 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004576}
4577
Marat Dukhanefc47b82019-11-18 09:25:38 -08004578TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004579 ConvolutionOperatorTester()
4580 .depthwise_layout(true)
4581 .input_size(15, 14)
4582 .padding(1, 1)
4583 .kernel_size(3, 3)
4584 .groups(24)
4585 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004586 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004587}
4588
Marat Dukhanefc47b82019-11-18 09:25:38 -08004589TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 3x3_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004590 ConvolutionOperatorTester()
4591 .depthwise_layout(true)
4592 .input_size(15, 14)
4593 .padding(1, 1)
4594 .kernel_size(3, 3)
4595 .groups(24)
4596 .group_output_channels(3)
4597 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004598 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004599}
4600
Marat Dukhanefc47b82019-11-18 09:25:38 -08004601TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004602 ConvolutionOperatorTester()
4603 .depthwise_layout(true)
4604 .has_bias(false)
4605 .input_size(15, 14)
4606 .padding(1, 1)
4607 .kernel_size(3, 3)
4608 .groups(24)
4609 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004610 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004611}
4612
Marat Dukhanefc47b82019-11-18 09:25:38 -08004613TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004614 for (size_t input_height = 14; input_height <= 15; input_height++) {
4615 for (size_t input_width = 14; input_width <= 15; input_width++) {
4616 ConvolutionOperatorTester()
4617 .depthwise_layout(true)
4618 .input_size(input_height, input_width)
4619 .padding_tf_same(true)
4620 .kernel_size(3, 3)
4621 .groups(24)
4622 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004623 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004624 }
4625 }
4626}
4627
Marat Dukhanefc47b82019-11-18 09:25:38 -08004628TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 5x5) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004629 ConvolutionOperatorTester()
4630 .depthwise_layout(true)
4631 .input_size(15, 14)
4632 .padding(2, 2)
4633 .kernel_size(5, 5)
4634 .groups(24)
4635 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004636 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004637}
4638
Marat Dukhanefc47b82019-11-18 09:25:38 -08004639TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 5x5_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004640 ConvolutionOperatorTester()
4641 .depthwise_layout(true)
4642 .input_size(15, 14)
4643 .padding(2, 2)
4644 .kernel_size(5, 5)
4645 .groups(24)
4646 .group_output_channels(3)
4647 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004648 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004649}
4650
Marat Dukhanefc47b82019-11-18 09:25:38 -08004651TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 5x5_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004652 ConvolutionOperatorTester()
4653 .depthwise_layout(true)
4654 .has_bias(false)
4655 .input_size(15, 14)
4656 .padding(2, 2)
4657 .kernel_size(5, 5)
4658 .groups(24)
4659 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004660 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004661}
4662
Marat Dukhanefc47b82019-11-18 09:25:38 -08004663TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 7x7) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004664 ConvolutionOperatorTester()
4665 .depthwise_layout(true)
4666 .input_size(15, 14)
4667 .padding(3, 3)
4668 .kernel_size(7, 7)
4669 .groups(24)
4670 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004671 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004672}
4673
Marat Dukhanefc47b82019-11-18 09:25:38 -08004674TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 7x7_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004675 ConvolutionOperatorTester()
4676 .depthwise_layout(true)
4677 .has_bias(false)
4678 .input_size(15, 14)
4679 .padding(3, 3)
4680 .kernel_size(7, 7)
4681 .groups(24)
4682 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004683 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004684}
4685
Marat Dukhan202eed02019-11-20 16:21:10 -08004686TEST(CONVOLUTION_NHWC_F32, setup_changing_input_buffer) {
4687 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
4688 ConvolutionOperatorTester()
4689 .batch_size(3)
4690 .input_height(8)
4691 .input_width(8)
4692 .kernel_height(5)
4693 .kernel_width(3)
4694 .group_input_channels(15)
4695 .group_output_channels(17)
4696 .TestSetupNHWCxF32();
4697}
4698
4699TEST(CONVOLUTION_NHWC_F32, setup_changing_input_buffer_grouped) {
4700 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
4701 ConvolutionOperatorTester()
4702 .batch_size(3)
4703 .input_height(8)
4704 .input_width(8)
4705 .kernel_height(5)
4706 .kernel_width(3)
4707 .groups(2)
4708 .group_input_channels(15)
4709 .group_output_channels(17)
4710 .TestSetupNHWCxF32();
4711}
4712
4713TEST(CONVOLUTION_NHWC_F32, setup_changing_input_buffer_depthwise) {
4714 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
4715 ConvolutionOperatorTester()
4716 .batch_size(3)
4717 .input_height(8)
4718 .input_width(8)
4719 .kernel_height(3)
4720 .kernel_width(3)
4721 .groups(19)
4722 .group_input_channels(1)
4723 .group_output_channels(1)
4724 .TestSetupNHWCxF32();
4725}
4726
Marat Dukhanefc47b82019-11-18 09:25:38 -08004727TEST(CONVOLUTION_NHWC_F32, setup_increasing_batch) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004728 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004729 ConvolutionOperatorTester()
4730 .batch_size(3)
4731 .next_batch_size(5)
4732 .input_height(8)
4733 .input_width(8)
4734 .kernel_height(5)
4735 .kernel_width(3)
4736 .group_input_channels(15)
4737 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004738 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004739}
4740
Marat Dukhanefc47b82019-11-18 09:25:38 -08004741TEST(CONVOLUTION_NHWC_F32, setup_increasing_batch_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004742 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004743 ConvolutionOperatorTester()
4744 .batch_size(3)
4745 .next_batch_size(5)
4746 .input_height(8)
4747 .input_width(8)
4748 .kernel_height(5)
4749 .kernel_width(3)
4750 .groups(2)
4751 .group_input_channels(15)
4752 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004753 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004754}
4755
Marat Dukhanefc47b82019-11-18 09:25:38 -08004756TEST(CONVOLUTION_NHWC_F32, setup_increasing_batch_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004757 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004758 ConvolutionOperatorTester()
4759 .batch_size(3)
4760 .next_batch_size(5)
4761 .input_height(8)
4762 .input_width(8)
4763 .kernel_height(3)
4764 .kernel_width(3)
4765 .groups(19)
4766 .group_input_channels(1)
4767 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004768 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004769}
4770
Marat Dukhanefc47b82019-11-18 09:25:38 -08004771TEST(CONVOLUTION_NHWC_F32, setup_decreasing_batch) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004772 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004773 ConvolutionOperatorTester()
4774 .batch_size(5)
4775 .next_batch_size(3)
4776 .input_height(8)
4777 .input_width(8)
4778 .kernel_height(5)
4779 .kernel_width(3)
4780 .group_input_channels(15)
4781 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004782 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004783}
4784
Marat Dukhanefc47b82019-11-18 09:25:38 -08004785TEST(CONVOLUTION_NHWC_F32, setup_decreasing_batch_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004786 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004787 ConvolutionOperatorTester()
4788 .batch_size(5)
4789 .next_batch_size(3)
4790 .input_height(8)
4791 .input_width(8)
4792 .kernel_height(5)
4793 .kernel_width(3)
4794 .groups(2)
4795 .group_input_channels(15)
4796 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004797 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004798}
4799
Marat Dukhanefc47b82019-11-18 09:25:38 -08004800TEST(CONVOLUTION_NHWC_F32, setup_decreasing_batch_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004801 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004802 ConvolutionOperatorTester()
4803 .batch_size(5)
4804 .next_batch_size(3)
4805 .input_height(8)
4806 .input_width(8)
4807 .kernel_height(3)
4808 .kernel_width(3)
4809 .groups(19)
4810 .group_input_channels(1)
4811 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004812 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004813}
4814
Marat Dukhanefc47b82019-11-18 09:25:38 -08004815TEST(CONVOLUTION_NHWC_F32, setup_changing_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004816 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004817 ConvolutionOperatorTester()
4818 .batch_size(3)
4819 .input_height(8)
4820 .input_width(8)
4821 .next_input_height(9)
4822 .kernel_height(5)
4823 .kernel_width(3)
4824 .group_input_channels(15)
4825 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004826 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004827 ConvolutionOperatorTester()
4828 .batch_size(3)
4829 .input_height(8)
4830 .input_width(8)
4831 .next_input_height(7)
4832 .kernel_height(5)
4833 .kernel_width(3)
4834 .group_input_channels(15)
4835 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004836 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004837}
4838
Marat Dukhanefc47b82019-11-18 09:25:38 -08004839TEST(CONVOLUTION_NHWC_F32, setup_changing_height_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004840 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004841 ConvolutionOperatorTester()
4842 .batch_size(3)
4843 .input_height(8)
4844 .input_width(8)
4845 .next_input_height(9)
4846 .kernel_height(5)
4847 .kernel_width(3)
4848 .groups(2)
4849 .group_input_channels(15)
4850 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004851 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004852 ConvolutionOperatorTester()
4853 .batch_size(3)
4854 .input_height(8)
4855 .input_width(8)
4856 .next_input_height(7)
4857 .kernel_height(5)
4858 .kernel_width(3)
4859 .groups(2)
4860 .group_input_channels(15)
4861 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004862 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004863}
4864
Marat Dukhanefc47b82019-11-18 09:25:38 -08004865TEST(CONVOLUTION_NHWC_F32, setup_changing_height_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004866 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004867 ConvolutionOperatorTester()
4868 .batch_size(3)
4869 .input_height(8)
4870 .input_width(8)
4871 .next_input_height(9)
4872 .kernel_height(3)
4873 .kernel_width(3)
4874 .groups(19)
4875 .group_input_channels(1)
4876 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004877 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004878 ConvolutionOperatorTester()
4879 .batch_size(3)
4880 .input_height(8)
4881 .input_width(8)
4882 .next_input_height(7)
4883 .kernel_height(3)
4884 .kernel_width(3)
4885 .groups(19)
4886 .group_input_channels(1)
4887 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004888 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004889}
4890
Marat Dukhanefc47b82019-11-18 09:25:38 -08004891TEST(CONVOLUTION_NHWC_F32, setup_changing_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004892 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004893 ConvolutionOperatorTester()
4894 .batch_size(3)
4895 .input_height(8)
4896 .input_width(8)
4897 .next_input_width(9)
4898 .kernel_height(5)
4899 .kernel_width(3)
4900 .group_input_channels(15)
4901 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004902 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004903 ConvolutionOperatorTester()
4904 .batch_size(3)
4905 .input_height(8)
4906 .input_width(8)
4907 .next_input_width(7)
4908 .kernel_height(5)
4909 .kernel_width(3)
4910 .group_input_channels(15)
4911 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004912 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004913}
4914
Marat Dukhanefc47b82019-11-18 09:25:38 -08004915TEST(CONVOLUTION_NHWC_F32, setup_changing_width_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004916 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004917 ConvolutionOperatorTester()
4918 .batch_size(3)
4919 .input_height(8)
4920 .input_width(8)
4921 .next_input_width(9)
4922 .kernel_height(5)
4923 .kernel_width(3)
4924 .groups(2)
4925 .group_input_channels(15)
4926 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004927 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004928 ConvolutionOperatorTester()
4929 .batch_size(3)
4930 .input_height(8)
4931 .input_width(8)
4932 .next_input_width(7)
4933 .kernel_height(5)
4934 .kernel_width(3)
4935 .groups(2)
4936 .group_input_channels(15)
4937 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004938 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004939}
4940
Marat Dukhanefc47b82019-11-18 09:25:38 -08004941TEST(CONVOLUTION_NHWC_F32, setup_changing_width_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004942 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004943 ConvolutionOperatorTester()
4944 .batch_size(3)
4945 .input_height(8)
4946 .input_width(8)
4947 .next_input_width(9)
4948 .kernel_height(3)
4949 .kernel_width(3)
4950 .groups(19)
4951 .group_input_channels(1)
4952 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004953 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004954 ConvolutionOperatorTester()
4955 .batch_size(3)
4956 .input_height(8)
4957 .input_width(8)
4958 .next_input_width(7)
4959 .kernel_height(3)
4960 .kernel_width(3)
4961 .groups(19)
4962 .group_input_channels(1)
4963 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004964 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004965}
4966
Marat Dukhanefc47b82019-11-18 09:25:38 -08004967TEST(CONVOLUTION_NHWC_F32, setup_swap_height_and_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004968 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004969 ConvolutionOperatorTester()
4970 .batch_size(3)
4971 .input_height(9)
4972 .input_width(8)
4973 .next_input_height(8)
4974 .next_input_width(9)
4975 .kernel_height(5)
4976 .kernel_width(3)
4977 .group_input_channels(15)
4978 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004979 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004980}
4981
Marat Dukhanefc47b82019-11-18 09:25:38 -08004982TEST(CONVOLUTION_NHWC_F32, setup_swap_height_and_width_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004983 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004984 ConvolutionOperatorTester()
4985 .batch_size(3)
4986 .input_height(9)
4987 .input_width(8)
4988 .next_input_height(8)
4989 .next_input_width(9)
4990 .kernel_height(5)
4991 .kernel_width(3)
4992 .groups(2)
4993 .group_input_channels(15)
4994 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004995 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004996}
4997
Marat Dukhanefc47b82019-11-18 09:25:38 -08004998TEST(CONVOLUTION_NHWC_F32, setup_swap_height_and_width_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004999 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005000 ConvolutionOperatorTester()
5001 .batch_size(3)
5002 .input_height(9)
5003 .input_width(8)
5004 .next_input_height(8)
5005 .next_input_width(9)
5006 .kernel_height(3)
5007 .kernel_width(3)
5008 .groups(19)
5009 .group_input_channels(1)
5010 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005011 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005012}
Frank Barchard49b4dcc2020-06-26 14:07:19 -07005013
5014TEST(CONVOLUTION_NHWC_F16, 1x1) {
5015 ConvolutionOperatorTester()
5016 .input_size(27, 29)
5017 .kernel_size(1, 1)
5018 .group_input_channels(23)
5019 .group_output_channels(19)
5020 .iterations(3)
5021 .TestNHWCxF16();
5022}
5023
5024TEST(CONVOLUTION_NHWC_F16, 1x1_with_qmin) {
5025 ConvolutionOperatorTester()
5026 .input_size(27, 29)
5027 .kernel_size(1, 1)
5028 .group_input_channels(23)
5029 .group_output_channels(19)
5030 .qmin(128)
5031 .iterations(3)
5032 .TestNHWCxF16();
5033}
5034
5035TEST(CONVOLUTION_NHWC_F16, 1x1_with_qmax) {
5036 ConvolutionOperatorTester()
5037 .input_size(27, 29)
5038 .kernel_size(1, 1)
5039 .group_input_channels(23)
5040 .group_output_channels(19)
5041 .qmax(128)
5042 .iterations(3)
5043 .TestNHWCxF16();
5044}
5045
5046TEST(CONVOLUTION_NHWC_F16, 1x1_with_input_stride) {
5047 ConvolutionOperatorTester()
5048 .input_size(27, 29)
5049 .kernel_size(1, 1)
5050 .input_channel_stride(28)
5051 .group_input_channels(23)
5052 .group_output_channels(19)
5053 .iterations(3)
5054 .TestNHWCxF16();
5055}
5056
5057TEST(CONVOLUTION_NHWC_F16, 1x1_with_output_stride) {
5058 ConvolutionOperatorTester()
5059 .input_size(27, 29)
5060 .kernel_size(1, 1)
5061 .output_channel_stride(29)
5062 .group_input_channels(23)
5063 .group_output_channels(19)
5064 .iterations(3)
5065 .TestNHWCxF16();
5066}
5067
5068TEST(CONVOLUTION_NHWC_F16, 1x1_without_bias) {
5069 ConvolutionOperatorTester()
5070 .has_bias(false)
5071 .input_size(13, 14)
5072 .kernel_size(1, 1)
5073 .group_input_channels(23)
5074 .group_output_channels(19)
5075 .iterations(3)
5076 .TestNHWCxF16();
5077}
5078
5079TEST(CONVOLUTION_NHWC_F16, 1x1_with_batch) {
5080 ConvolutionOperatorTester()
5081 .batch_size(3)
5082 .input_size(13, 14)
5083 .kernel_size(1, 1)
5084 .group_input_channels(23)
5085 .group_output_channels(19)
5086 .iterations(3)
5087 .TestNHWCxF16();
5088}
5089
5090TEST(CONVOLUTION_NHWC_F16, grouped_1x1) {
5091 ConvolutionOperatorTester()
5092 .input_size(24, 25)
5093 .kernel_size(1, 1)
5094 .groups(2)
5095 .group_input_channels(17)
5096 .group_output_channels(19)
5097 .iterations(3)
5098 .TestNHWCxF16();
5099}
5100
5101TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_qmin) {
5102 ConvolutionOperatorTester()
5103 .input_size(24, 25)
5104 .kernel_size(1, 1)
5105 .groups(2)
5106 .group_input_channels(17)
5107 .group_output_channels(19)
5108 .qmin(128)
5109 .iterations(3)
5110 .TestNHWCxF16();
5111}
5112
5113TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_qmax) {
5114 ConvolutionOperatorTester()
5115 .input_size(24, 25)
5116 .kernel_size(1, 1)
5117 .groups(2)
5118 .group_input_channels(17)
5119 .group_output_channels(19)
5120 .qmax(128)
5121 .iterations(3)
5122 .TestNHWCxF16();
5123}
5124
5125TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_input_stride) {
5126 ConvolutionOperatorTester()
5127 .input_size(24, 25)
5128 .kernel_size(1, 1)
5129 .groups(2)
5130 .input_channel_stride(37)
5131 .group_input_channels(17)
5132 .group_output_channels(19)
5133 .iterations(3)
5134 .TestNHWCxF16();
5135}
5136
5137TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_output_stride) {
5138 ConvolutionOperatorTester()
5139 .input_size(24, 25)
5140 .kernel_size(1, 1)
5141 .groups(2)
5142 .output_channel_stride(41)
5143 .group_input_channels(17)
5144 .group_output_channels(19)
5145 .iterations(3)
5146 .TestNHWCxF16();
5147}
5148
5149TEST(CONVOLUTION_NHWC_F16, grouped_1x1_without_bias) {
5150 ConvolutionOperatorTester()
5151 .has_bias(false)
5152 .input_size(24, 25)
5153 .kernel_size(1, 1)
5154 .groups(2)
5155 .group_input_channels(17)
5156 .group_output_channels(19)
5157 .iterations(3)
5158 .TestNHWCxF16();
5159}
5160
5161TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_batch) {
5162 ConvolutionOperatorTester()
5163 .batch_size(3)
5164 .input_size(24, 25)
5165 .kernel_size(1, 1)
5166 .groups(2)
5167 .group_input_channels(17)
5168 .group_output_channels(19)
5169 .iterations(3)
5170 .TestNHWCxF16();
5171}
5172
5173TEST(CONVOLUTION_NHWC_F16, unioutput_1x1) {
5174 ConvolutionOperatorTester()
5175 .input_size(1, 1)
5176 .kernel_size(1, 1)
5177 .group_input_channels(23)
5178 .group_output_channels(19)
5179 .iterations(3)
5180 .TestNHWCxF16();
5181}
5182
5183TEST(CONVOLUTION_NHWC_F16, unioutput_1x1_with_qmin) {
5184 ConvolutionOperatorTester()
5185 .input_size(1, 1)
5186 .kernel_size(1, 1)
5187 .group_input_channels(23)
5188 .group_output_channels(19)
5189 .qmin(128)
5190 .iterations(3)
5191 .TestNHWCxF16();
5192}
5193
5194TEST(CONVOLUTION_NHWC_F16, unioutput_1x1_with_qmax) {
5195 ConvolutionOperatorTester()
5196 .input_size(1, 1)
5197 .kernel_size(1, 1)
5198 .group_input_channels(23)
5199 .group_output_channels(19)
5200 .qmax(128)
5201 .iterations(3)
5202 .TestNHWCxF16();
5203}
5204
5205TEST(CONVOLUTION_NHWC_F16, unioutput_1x1_with_input_stride) {
5206 ConvolutionOperatorTester()
5207 .input_size(1, 1)
5208 .kernel_size(1, 1)
5209 .input_channel_stride(28)
5210 .group_input_channels(23)
5211 .group_output_channels(19)
5212 .iterations(3)
5213 .TestNHWCxF16();
5214}
5215
5216TEST(CONVOLUTION_NHWC_F16, unioutput_1x1_with_output_stride) {
5217 ConvolutionOperatorTester()
5218 .input_size(1, 1)
5219 .kernel_size(1, 1)
5220 .output_channel_stride(29)
5221 .group_input_channels(23)
5222 .group_output_channels(19)
5223 .iterations(3)
5224 .TestNHWCxF16();
5225}
5226
5227TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1) {
5228 ConvolutionOperatorTester()
5229 .input_size(1, 1)
5230 .kernel_size(1, 1)
5231 .groups(2)
5232 .group_input_channels(17)
5233 .group_output_channels(13)
5234 .iterations(3)
5235 .TestNHWCxF16();
5236}
5237
5238TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1_with_qmin) {
5239 ConvolutionOperatorTester()
5240 .input_size(1, 1)
5241 .kernel_size(1, 1)
5242 .groups(2)
5243 .group_input_channels(17)
5244 .group_output_channels(13)
5245 .qmin(128)
5246 .iterations(3)
5247 .TestNHWCxF16();
5248}
5249
5250TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1_with_qmax) {
5251 ConvolutionOperatorTester()
5252 .input_size(1, 1)
5253 .kernel_size(1, 1)
5254 .groups(2)
5255 .group_input_channels(17)
5256 .group_output_channels(13)
5257 .qmax(128)
5258 .iterations(3)
5259 .TestNHWCxF16();
5260}
5261
5262TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1_with_input_stride) {
5263 ConvolutionOperatorTester()
5264 .input_size(1, 1)
5265 .kernel_size(1, 1)
5266 .groups(2)
5267 .input_channel_stride(37)
5268 .group_input_channels(17)
5269 .group_output_channels(13)
5270 .iterations(3)
5271 .TestNHWCxF16();
5272}
5273
5274TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1_with_output_stride) {
5275 ConvolutionOperatorTester()
5276 .input_size(1, 1)
5277 .kernel_size(1, 1)
5278 .groups(2)
5279 .output_channel_stride(41)
5280 .group_input_channels(17)
5281 .group_output_channels(13)
5282 .iterations(3)
5283 .TestNHWCxF16();
5284}
5285
5286TEST(CONVOLUTION_NHWC_F16, 1x3) {
5287 ConvolutionOperatorTester()
5288 .input_size(20, 19)
5289 .padding_width(1)
5290 .kernel_size(1, 3)
5291 .group_input_channels(17)
5292 .group_output_channels(15)
5293 .iterations(3)
5294 .TestNHWCxF16();
5295}
5296
5297TEST(CONVOLUTION_NHWC_F16, grouped_1x3) {
5298 ConvolutionOperatorTester()
5299 .input_size(20, 19)
5300 .padding_width(1)
5301 .kernel_size(1, 3)
5302 .groups(2)
5303 .group_input_channels(17)
5304 .group_output_channels(15)
5305 .iterations(3)
5306 .TestNHWCxF16();
5307}
5308
5309TEST(CONVOLUTION_NHWC_F16, 3x1) {
5310 ConvolutionOperatorTester()
5311 .input_size(19, 20)
5312 .padding_height(1)
5313 .kernel_size(3, 1)
5314 .group_input_channels(17)
5315 .group_output_channels(15)
5316 .iterations(3)
5317 .TestNHWCxF16();
5318}
5319
5320TEST(CONVOLUTION_NHWC_F16, grouped_3x1) {
5321 ConvolutionOperatorTester()
5322 .input_size(19, 20)
5323 .padding_height(1)
5324 .kernel_size(3, 1)
5325 .groups(2)
5326 .group_input_channels(17)
5327 .group_output_channels(15)
5328 .iterations(3)
5329 .TestNHWCxF16();
5330}
5331
5332TEST(CONVOLUTION_NHWC_F16, 3x3) {
5333 ConvolutionOperatorTester()
5334 .input_size(13, 12)
5335 .padding(1)
5336 .kernel_size(3, 3)
5337 .group_input_channels(15)
5338 .group_output_channels(17)
5339 .iterations(3)
5340 .TestNHWCxF16();
5341}
5342
5343TEST(CONVOLUTION_NHWC_F16, 3x3_without_padding) {
5344 ConvolutionOperatorTester()
5345 .input_size(13, 12)
5346 .kernel_size(3, 3)
5347 .group_input_channels(15)
5348 .group_output_channels(17)
5349 .iterations(3)
5350 .TestNHWCxF16();
5351}
5352
5353TEST(CONVOLUTION_NHWC_F16, 3x3_with_left_padding) {
5354 ConvolutionOperatorTester()
5355 .input_size(13, 12)
5356 .padding_left(1)
5357 .kernel_size(3, 3)
5358 .group_input_channels(15)
5359 .group_output_channels(17)
5360 .iterations(3)
5361 .TestNHWCxF16();
5362}
5363
5364TEST(CONVOLUTION_NHWC_F16, 3x3_with_right_padding) {
5365 ConvolutionOperatorTester()
5366 .input_size(13, 12)
5367 .padding_right(1)
5368 .kernel_size(3, 3)
5369 .group_input_channels(15)
5370 .group_output_channels(17)
5371 .iterations(3)
5372 .TestNHWCxF16();
5373}
5374
5375TEST(CONVOLUTION_NHWC_F16, 3x3_with_top_padding) {
5376 ConvolutionOperatorTester()
5377 .input_size(13, 12)
5378 .padding_top(1)
5379 .kernel_size(3, 3)
5380 .group_input_channels(15)
5381 .group_output_channels(17)
5382 .iterations(3)
5383 .TestNHWCxF16();
5384}
5385
5386TEST(CONVOLUTION_NHWC_F16, 3x3_with_bottom_padding) {
5387 ConvolutionOperatorTester()
5388 .input_size(13, 12)
5389 .padding_bottom(1)
5390 .kernel_size(3, 3)
5391 .group_input_channels(15)
5392 .group_output_channels(17)
5393 .iterations(3)
5394 .TestNHWCxF16();
5395}
5396
5397TEST(CONVOLUTION_NHWC_F16, 3x3_with_input_stride) {
5398 ConvolutionOperatorTester()
5399 .input_size(13, 12)
5400 .padding(1)
5401 .kernel_size(3, 3)
5402 .input_channel_stride(22)
5403 .group_input_channels(15)
5404 .group_output_channels(17)
5405 .iterations(3)
5406 .TestNHWCxF16();
5407}
5408
5409TEST(CONVOLUTION_NHWC_F16, 3x3_with_output_stride) {
5410 ConvolutionOperatorTester()
5411 .input_size(13, 12)
5412 .padding(1)
5413 .kernel_size(3, 3)
5414 .output_channel_stride(23)
5415 .group_input_channels(15)
5416 .group_output_channels(17)
5417 .iterations(3)
5418 .TestNHWCxF16();
5419}
5420
5421TEST(CONVOLUTION_NHWC_F16, 3x3_without_bias) {
5422 ConvolutionOperatorTester()
5423 .has_bias(false)
5424 .input_size(10, 9)
5425 .padding(1)
5426 .kernel_size(3, 3)
5427 .group_input_channels(15)
5428 .group_output_channels(17)
5429 .iterations(3)
5430 .TestNHWCxF16();
5431}
5432
5433TEST(CONVOLUTION_NHWC_F16, 3x3_with_batch) {
5434 ConvolutionOperatorTester()
5435 .batch_size(3)
5436 .input_size(10, 9)
5437 .padding(1)
5438 .kernel_size(3, 3)
5439 .group_input_channels(15)
5440 .group_output_channels(17)
5441 .iterations(3)
5442 .TestNHWCxF16();
5443}
5444
5445TEST(CONVOLUTION_NHWC_F16, grouped_3x3) {
5446 ConvolutionOperatorTester()
5447 .input_size(10, 11)
5448 .padding(1)
5449 .kernel_size(3, 3)
5450 .groups(2)
5451 .group_input_channels(14)
5452 .group_output_channels(13)
5453 .iterations(3)
5454 .TestNHWCxF16();
5455}
5456
5457TEST(CONVOLUTION_NHWC_F16, grouped_3x3_without_padding) {
5458 ConvolutionOperatorTester()
5459 .input_size(13, 12)
5460 .kernel_size(3, 3)
5461 .group_input_channels(15)
5462 .group_output_channels(17)
5463 .iterations(3)
5464 .TestNHWCxF16();
5465}
5466
5467TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_left_padding) {
5468 ConvolutionOperatorTester()
5469 .input_size(10, 11)
5470 .padding_left(1)
5471 .kernel_size(3, 3)
5472 .groups(2)
5473 .group_input_channels(14)
5474 .group_output_channels(13)
5475 .iterations(3)
5476 .TestNHWCxF16();
5477}
5478
5479TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_right_padding) {
5480 ConvolutionOperatorTester()
5481 .input_size(10, 11)
5482 .padding_right(1)
5483 .kernel_size(3, 3)
5484 .groups(2)
5485 .group_input_channels(14)
5486 .group_output_channels(13)
5487 .iterations(3)
5488 .TestNHWCxF16();
5489}
5490
5491TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_top_padding) {
5492 ConvolutionOperatorTester()
5493 .input_size(10, 11)
5494 .padding_top(1)
5495 .kernel_size(3, 3)
5496 .groups(2)
5497 .group_input_channels(14)
5498 .group_output_channels(13)
5499 .iterations(3)
5500 .TestNHWCxF16();
5501}
5502
5503TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_bottom_padding) {
5504 ConvolutionOperatorTester()
5505 .input_size(10, 11)
5506 .padding_bottom(1)
5507 .kernel_size(3, 3)
5508 .groups(2)
5509 .group_input_channels(14)
5510 .group_output_channels(13)
5511 .iterations(3)
5512 .TestNHWCxF16();
5513}
5514
5515TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_input_stride) {
5516 ConvolutionOperatorTester()
5517 .input_size(10, 11)
5518 .padding(1)
5519 .kernel_size(3, 3)
5520 .groups(2)
5521 .input_channel_stride(29)
5522 .group_input_channels(14)
5523 .group_output_channels(13)
5524 .iterations(3)
5525 .TestNHWCxF16();
5526}
5527
5528TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_output_stride) {
5529 ConvolutionOperatorTester()
5530 .input_size(10, 11)
5531 .padding(1)
5532 .kernel_size(3, 3)
5533 .groups(2)
5534 .output_channel_stride(31)
5535 .group_input_channels(14)
5536 .group_output_channels(13)
5537 .iterations(3)
5538 .TestNHWCxF16();
5539}
5540
5541TEST(CONVOLUTION_NHWC_F16, grouped_3x3_without_bias) {
5542 ConvolutionOperatorTester()
5543 .has_bias(false)
5544 .input_size(10, 11)
5545 .padding(1)
5546 .kernel_size(3, 3)
5547 .groups(2)
5548 .group_input_channels(14)
5549 .group_output_channels(13)
5550 .iterations(3)
5551 .TestNHWCxF16();
5552}
5553
5554TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_batch) {
5555 ConvolutionOperatorTester()
5556 .batch_size(3)
5557 .input_size(10, 11)
5558 .padding(1)
5559 .kernel_size(3, 3)
5560 .groups(2)
5561 .group_input_channels(14)
5562 .group_output_channels(13)
5563 .iterations(3)
5564 .TestNHWCxF16();
5565}
5566
5567TEST(CONVOLUTION_NHWC_F16, 3x3s2) {
5568 ConvolutionOperatorTester()
5569 .input_size(14, 13)
5570 .padding(1)
5571 .kernel_size(3, 3)
5572 .subsampling(2)
5573 .group_input_channels(27)
5574 .group_output_channels(19)
5575 .iterations(3)
5576 .TestNHWCxF16();
5577}
5578
5579TEST(CONVOLUTION_NHWC_F16, 3x3s2_with_tf_same_padding) {
5580 for (size_t input_height = 13; input_height <= 14; input_height++) {
5581 for (size_t input_width = 13; input_width <= 14; input_width++) {
5582 ConvolutionOperatorTester()
5583 .input_size(input_height, input_width)
5584 .padding_tf_same(true)
5585 .kernel_size(3, 3)
5586 .subsampling(2)
5587 .group_input_channels(27)
5588 .group_output_channels(19)
5589 .iterations(3)
5590 .TestNHWCxF16();
5591 }
5592 }
5593}
5594
5595TEST(CONVOLUTION_NHWC_F16, 3x3s1x2) {
5596 ConvolutionOperatorTester()
5597 .input_size(14, 13)
5598 .padding(1)
5599 .kernel_size(3, 3)
5600 .subsampling(1, 2)
5601 .group_input_channels(27)
5602 .group_output_channels(19)
5603 .iterations(3)
5604 .TestNHWCxF16();
5605}
5606
5607TEST(CONVOLUTION_NHWC_F16, 3x3s1x2_with_tf_same_padding) {
5608 for (size_t input_height = 13; input_height <= 14; input_height++) {
5609 for (size_t input_width = 13; input_width <= 14; input_width++) {
5610 ConvolutionOperatorTester()
5611 .input_size(input_height, input_width)
5612 .padding_tf_same(true)
5613 .kernel_size(3, 3)
5614 .subsampling(1, 2)
5615 .group_input_channels(27)
5616 .group_output_channels(19)
5617 .iterations(3)
5618 .TestNHWCxF16();
5619 }
5620 }
5621}
5622
5623TEST(CONVOLUTION_NHWC_F16, 3x3s2x1) {
5624 ConvolutionOperatorTester()
5625 .input_size(14, 13)
5626 .padding(1)
5627 .kernel_size(3, 3)
5628 .subsampling(2, 1)
5629 .group_input_channels(27)
5630 .group_output_channels(19)
5631 .iterations(3)
5632 .TestNHWCxF16();
5633}
5634
5635TEST(CONVOLUTION_NHWC_F16, 3x3s2x1_with_tf_same_padding) {
5636 for (size_t input_height = 13; input_height <= 14; input_height++) {
5637 for (size_t input_width = 13; input_width <= 14; input_width++) {
5638 ConvolutionOperatorTester()
5639 .input_size(input_height, input_width)
5640 .padding_tf_same(true)
5641 .kernel_size(3, 3)
5642 .subsampling(2, 1)
5643 .group_input_channels(27)
5644 .group_output_channels(19)
5645 .iterations(3)
5646 .TestNHWCxF16();
5647 }
5648 }
5649}
5650
5651TEST(CONVOLUTION_NHWC_F16, 3x3d2) {
5652 ConvolutionOperatorTester()
5653 .input_size(13, 14)
5654 .padding(2)
5655 .kernel_size(3, 3)
5656 .dilation(2)
5657 .group_input_channels(27)
5658 .group_output_channels(19)
5659 .iterations(3)
5660 .TestNHWCxF16();
5661}
5662
5663TEST(CONVOLUTION_NHWC_F16, 3x3d1x2) {
5664 ConvolutionOperatorTester()
5665 .input_size(14, 15)
5666 .padding(1, 2)
5667 .kernel_size(3, 3)
5668 .dilation(1, 2)
5669 .group_input_channels(27)
5670 .group_output_channels(19)
5671 .iterations(3)
5672 .TestNHWCxF16();
5673}
5674
5675TEST(CONVOLUTION_NHWC_F16, 3x3d2x1) {
5676 ConvolutionOperatorTester()
5677 .input_size(15, 14)
5678 .padding(2, 1)
5679 .kernel_size(3, 3)
5680 .dilation(2, 1)
5681 .group_input_channels(27)
5682 .group_output_channels(19)
5683 .iterations(3)
5684 .TestNHWCxF16();
5685}
5686
5687TEST(CONVOLUTION_NHWC_F16, unioutput_3x3) {
5688 ConvolutionOperatorTester()
5689 .input_size(3, 3)
5690 .padding(1)
5691 .kernel_size(3, 3)
5692 .group_input_channels(23)
5693 .group_output_channels(19)
5694 .iterations(3)
5695 .TestNHWCxF16();
5696}
5697
5698TEST(CONVOLUTION_NHWC_F16, unioutput_3x3_with_qmin) {
5699 ConvolutionOperatorTester()
5700 .input_size(3, 3)
5701 .padding(1)
5702 .kernel_size(3, 3)
5703 .group_input_channels(23)
5704 .group_output_channels(19)
5705 .qmin(128)
5706 .iterations(3)
5707 .TestNHWCxF16();
5708}
5709
5710TEST(CONVOLUTION_NHWC_F16, unioutput_3x3_with_qmax) {
5711 ConvolutionOperatorTester()
5712 .input_size(3, 3)
5713 .padding(1)
5714 .kernel_size(3, 3)
5715 .group_input_channels(23)
5716 .group_output_channels(19)
5717 .qmax(128)
5718 .iterations(3)
5719 .TestNHWCxF16();
5720}
5721
5722TEST(CONVOLUTION_NHWC_F16, unioutput_3x3_with_input_stride) {
5723 ConvolutionOperatorTester()
5724 .input_size(3, 3)
5725 .padding(1)
5726 .kernel_size(3, 3)
5727 .input_channel_stride(28)
5728 .group_input_channels(23)
5729 .group_output_channels(19)
5730 .iterations(3)
5731 .TestNHWCxF16();
5732}
5733
5734TEST(CONVOLUTION_NHWC_F16, unioutput_3x3_with_output_stride) {
5735 ConvolutionOperatorTester()
5736 .input_size(3, 3)
5737 .padding(1)
5738 .kernel_size(3, 3)
5739 .output_channel_stride(29)
5740 .group_input_channels(23)
5741 .group_output_channels(19)
5742 .iterations(3)
5743 .TestNHWCxF16();
5744}
5745
5746TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3) {
5747 ConvolutionOperatorTester()
5748 .input_size(3, 3)
5749 .padding(1)
5750 .kernel_size(3, 3)
5751 .groups(2)
5752 .group_input_channels(17)
5753 .group_output_channels(13)
5754 .iterations(3)
5755 .TestNHWCxF16();
5756}
5757
5758TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3_with_qmin) {
5759 ConvolutionOperatorTester()
5760 .input_size(3, 3)
5761 .padding(1)
5762 .kernel_size(3, 3)
5763 .groups(2)
5764 .group_input_channels(17)
5765 .group_output_channels(13)
5766 .qmin(128)
5767 .iterations(3)
5768 .TestNHWCxF16();
5769}
5770
5771TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3_with_qmax) {
5772 ConvolutionOperatorTester()
5773 .input_size(3, 3)
5774 .padding(1)
5775 .kernel_size(3, 3)
5776 .groups(2)
5777 .group_input_channels(17)
5778 .group_output_channels(13)
5779 .qmax(128)
5780 .iterations(3)
5781 .TestNHWCxF16();
5782}
5783
5784TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3_with_input_stride) {
5785 ConvolutionOperatorTester()
5786 .input_size(3, 3)
5787 .padding(1)
5788 .kernel_size(3, 3)
5789 .groups(2)
5790 .input_channel_stride(37)
5791 .group_input_channels(17)
5792 .group_output_channels(13)
5793 .iterations(3)
5794 .TestNHWCxF16();
5795}
5796
5797TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3_with_output_stride) {
5798 ConvolutionOperatorTester()
5799 .input_size(3, 3)
5800 .padding(1)
5801 .kernel_size(3, 3)
5802 .groups(2)
5803 .output_channel_stride(41)
5804 .group_input_channels(17)
5805 .group_output_channels(13)
5806 .iterations(3)
5807 .TestNHWCxF16();
5808}
5809
5810TEST(CONVOLUTION_NHWC_F16, depthwise_1x1) {
5811 ConvolutionOperatorTester()
5812 .input_size(15, 14)
5813 .kernel_size(1, 1)
5814 .groups(24)
5815 .iterations(3)
5816 .TestNHWCxF16();
5817}
5818
5819TEST(CONVOLUTION_NHWC_F16, depthwise_1x1_without_bias) {
5820 ConvolutionOperatorTester()
5821 .has_bias(false)
5822 .input_size(15, 14)
5823 .kernel_size(1, 1)
5824 .groups(24)
5825 .iterations(3)
5826 .TestNHWCxF16();
5827}
5828
5829TEST(CONVOLUTION_NHWC_F16, depthwise_2x2) {
5830 ConvolutionOperatorTester()
5831 .input_size(15, 14)
5832 .padding(1, 1)
5833 .kernel_size(2, 2)
5834 .groups(24)
5835 .iterations(3)
5836 .TestNHWCxF16();
5837}
5838
5839TEST(CONVOLUTION_NHWC_F16, depthwise_2x2_without_bias) {
5840 ConvolutionOperatorTester()
5841 .has_bias(false)
5842 .input_size(15, 14)
5843 .padding(1, 1)
5844 .kernel_size(2, 2)
5845 .groups(24)
5846 .iterations(3)
5847 .TestNHWCxF16();
5848}
5849
5850TEST(CONVOLUTION_NHWC_F16, depthwise_2x2s2) {
5851 ConvolutionOperatorTester()
5852 .input_size(15, 14)
5853 .padding(1, 1)
5854 .kernel_size(2, 2)
5855 .subsampling(2)
5856 .groups(27)
5857 .iterations(3)
5858 .TestNHWCxF16();
5859}
5860
5861TEST(CONVOLUTION_NHWC_F16, depthwise_2x2s1x2) {
5862 ConvolutionOperatorTester()
5863 .input_size(15, 14)
5864 .padding(1, 1)
5865 .kernel_size(2, 2)
5866 .subsampling(1, 2)
5867 .groups(27)
5868 .iterations(3)
5869 .TestNHWCxF16();
5870}
5871
5872TEST(CONVOLUTION_NHWC_F16, depthwise_2x2s2x1) {
5873 ConvolutionOperatorTester()
5874 .input_size(15, 14)
5875 .padding(1, 1)
5876 .kernel_size(2, 2)
5877 .subsampling(2, 1)
5878 .groups(27)
5879 .iterations(3)
5880 .TestNHWCxF16();
5881}
5882
5883TEST(CONVOLUTION_NHWC_F16, depthwise_2x2d2) {
5884 ConvolutionOperatorTester()
5885 .input_size(15, 14)
5886 .padding(1, 1)
5887 .kernel_size(2, 2)
5888 .dilation(2)
5889 .groups(27)
5890 .iterations(3)
5891 .TestNHWCxF16();
5892}
5893
5894TEST(CONVOLUTION_NHWC_F16, depthwise_2x2d1x2) {
5895 ConvolutionOperatorTester()
5896 .input_size(15, 14)
5897 .padding(1, 1)
5898 .kernel_size(2, 2)
5899 .dilation(1, 2)
5900 .groups(27)
5901 .iterations(3)
5902 .TestNHWCxF16();
5903}
5904
5905TEST(CONVOLUTION_NHWC_F16, depthwise_2x2d2x1) {
5906 ConvolutionOperatorTester()
5907 .input_size(15, 14)
5908 .padding(1, 1)
5909 .kernel_size(2, 2)
5910 .dilation(2, 1)
5911 .groups(27)
5912 .iterations(3)
5913 .TestNHWCxF16();
5914}
5915
5916TEST(CONVOLUTION_NHWC_F16, depthwise_3x3) {
5917 ConvolutionOperatorTester()
5918 .input_size(15, 14)
5919 .padding(1, 1)
5920 .kernel_size(3, 3)
5921 .groups(24)
5922 .iterations(3)
5923 .TestNHWCxF16();
5924}
5925
5926TEST(CONVOLUTION_NHWC_F16, depthwise_3x3_without_bias) {
5927 ConvolutionOperatorTester()
5928 .has_bias(false)
5929 .input_size(15, 14)
5930 .padding(1, 1)
5931 .kernel_size(3, 3)
5932 .groups(24)
5933 .iterations(3)
5934 .TestNHWCxF16();
5935}
5936
5937TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s2) {
5938 ConvolutionOperatorTester()
5939 .input_size(15, 14)
5940 .padding(1, 1)
5941 .kernel_size(3, 3)
5942 .subsampling(2)
5943 .groups(27)
5944 .iterations(3)
5945 .TestNHWCxF16();
5946}
5947
5948TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s2_with_tf_same_padding) {
5949 for (size_t input_height = 14; input_height <= 15; input_height++) {
5950 for (size_t input_width = 14; input_width <= 15; input_width++) {
5951 ConvolutionOperatorTester()
5952 .input_size(input_height, input_width)
5953 .padding_tf_same(true)
5954 .kernel_size(3, 3)
5955 .subsampling(2)
5956 .groups(27)
5957 .iterations(3)
5958 .TestNHWCxF16();
5959 }
5960 }
5961}
5962
5963TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s1x2) {
5964 ConvolutionOperatorTester()
5965 .input_size(15, 14)
5966 .padding(1, 1)
5967 .kernel_size(3, 3)
5968 .subsampling(1, 2)
5969 .groups(27)
5970 .iterations(3)
5971 .TestNHWCxF16();
5972}
5973
5974TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s1x2_with_tf_same_padding) {
5975 for (size_t input_height = 14; input_height <= 15; input_height++) {
5976 for (size_t input_width = 14; input_width <= 15; input_width++) {
5977 ConvolutionOperatorTester()
5978 .input_size(input_height, input_width)
5979 .padding_tf_same(true)
5980 .kernel_size(3, 3)
5981 .subsampling(1, 2)
5982 .groups(27)
5983 .iterations(3)
5984 .TestNHWCxF16();
5985 }
5986 }
5987}
5988
5989TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s2x1) {
5990 ConvolutionOperatorTester()
5991 .input_size(15, 14)
5992 .padding(1, 1)
5993 .kernel_size(3, 3)
5994 .subsampling(2, 1)
5995 .groups(27)
5996 .iterations(3)
5997 .TestNHWCxF16();
5998}
5999
6000TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s2x1_with_tf_same_padding) {
6001 for (size_t input_height = 14; input_height <= 15; input_height++) {
6002 for (size_t input_width = 14; input_width <= 15; input_width++) {
6003 ConvolutionOperatorTester()
6004 .input_size(input_height, input_width)
6005 .padding_tf_same(true)
6006 .kernel_size(3, 3)
6007 .subsampling(2, 1)
6008 .groups(27)
6009 .iterations(3)
6010 .TestNHWCxF16();
6011 }
6012 }
6013}
6014
6015TEST(CONVOLUTION_NHWC_F16, depthwise_3x3d2) {
6016 ConvolutionOperatorTester()
6017 .input_size(15, 14)
6018 .padding(1, 1)
6019 .kernel_size(3, 3)
6020 .dilation(2)
6021 .groups(27)
6022 .iterations(3)
6023 .TestNHWCxF16();
6024}
6025
6026TEST(CONVOLUTION_NHWC_F16, depthwise_3x3d1x2) {
6027 ConvolutionOperatorTester()
6028 .input_size(15, 14)
6029 .padding(1, 1)
6030 .kernel_size(3, 3)
6031 .dilation(1, 2)
6032 .groups(27)
6033 .iterations(3)
6034 .TestNHWCxF16();
6035}
6036
6037TEST(CONVOLUTION_NHWC_F16, depthwise_3x3d2x1) {
6038 ConvolutionOperatorTester()
6039 .input_size(15, 14)
6040 .padding(1, 1)
6041 .kernel_size(3, 3)
6042 .dilation(2, 1)
6043 .groups(27)
6044 .iterations(3)
6045 .TestNHWCxF16();
6046}
6047
6048TEST(CONVOLUTION_NHWC_F16, depthwise_5x5) {
6049 ConvolutionOperatorTester()
6050 .input_size(15, 14)
6051 .padding(2, 2)
6052 .kernel_size(5, 5)
6053 .groups(27)
6054 .iterations(3)
6055 .TestNHWCxF16();
6056}
6057
6058TEST(CONVOLUTION_NHWC_F16, depthwise_5x5_without_bias) {
6059 ConvolutionOperatorTester()
6060 .has_bias(false)
6061 .input_size(15, 14)
6062 .padding(2, 2)
6063 .kernel_size(5, 5)
6064 .groups(27)
6065 .iterations(3)
6066 .TestNHWCxF16();
6067}
6068
6069TEST(CONVOLUTION_NHWC_F16, depthwise_5x5s2) {
6070 ConvolutionOperatorTester()
6071 .input_size(15, 14)
6072 .padding(2, 2)
6073 .kernel_size(5, 5)
6074 .subsampling(2)
6075 .groups(27)
6076 .iterations(3)
6077 .TestNHWCxF16();
6078}
6079
6080TEST(CONVOLUTION_NHWC_F16, depthwise_5x5s1x2) {
6081 ConvolutionOperatorTester()
6082 .input_size(15, 14)
6083 .padding(2, 2)
6084 .kernel_size(5, 5)
6085 .subsampling(1, 2)
6086 .groups(27)
6087 .iterations(3)
6088 .TestNHWCxF16();
6089}
6090
6091TEST(CONVOLUTION_NHWC_F16, depthwise_5x5s2x1) {
6092 ConvolutionOperatorTester()
6093 .input_size(15, 14)
6094 .padding(2, 2)
6095 .kernel_size(5, 5)
6096 .subsampling(2, 1)
6097 .groups(27)
6098 .iterations(3)
6099 .TestNHWCxF16();
6100}
6101
6102TEST(CONVOLUTION_NHWC_F16, depthwise_5x5d2) {
6103 ConvolutionOperatorTester()
6104 .input_size(15, 14)
6105 .padding(2, 2)
6106 .kernel_size(5, 5)
6107 .dilation(2)
6108 .groups(27)
6109 .iterations(3)
6110 .TestNHWCxF16();
6111}
6112
6113TEST(CONVOLUTION_NHWC_F16, depthwise_5x5d1x2) {
6114 ConvolutionOperatorTester()
6115 .input_size(15, 14)
6116 .padding(2, 2)
6117 .kernel_size(5, 5)
6118 .dilation(1, 2)
6119 .groups(27)
6120 .iterations(3)
6121 .TestNHWCxF16();
6122}
6123
6124TEST(CONVOLUTION_NHWC_F16, depthwise_5x5d2x1) {
6125 ConvolutionOperatorTester()
6126 .input_size(15, 14)
6127 .padding(2, 2)
6128 .kernel_size(5, 5)
6129 .dilation(2, 1)
6130 .groups(27)
6131 .iterations(3)
6132 .TestNHWCxF16();
6133}
6134
6135TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 1x1) {
6136 ConvolutionOperatorTester()
6137 .depthwise_layout(true)
6138 .input_size(15, 14)
6139 .kernel_size(1, 1)
6140 .groups(24)
6141 .iterations(3)
6142 .TestNHWCxF16();
6143}
6144
6145TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 1x1_with_depth_multiplier) {
6146 ConvolutionOperatorTester()
6147 .depthwise_layout(true)
6148 .input_size(15, 14)
6149 .kernel_size(1, 1)
6150 .groups(24)
6151 .group_output_channels(3)
6152 .iterations(3)
6153 .TestNHWCxF16();
6154}
6155
6156TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 1x1_without_bias) {
6157 ConvolutionOperatorTester()
6158 .depthwise_layout(true)
6159 .has_bias(false)
6160 .input_size(15, 14)
6161 .kernel_size(1, 1)
6162 .groups(24)
6163 .iterations(3)
6164 .TestNHWCxF16();
6165}
6166
6167TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 2x2) {
6168 ConvolutionOperatorTester()
6169 .depthwise_layout(true)
6170 .input_size(15, 14)
6171 .padding(1, 1)
6172 .kernel_size(2, 2)
6173 .groups(24)
6174 .iterations(3)
6175 .TestNHWCxF16();
6176}
6177
6178TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 2x2_with_depth_multiplier) {
6179 ConvolutionOperatorTester()
6180 .depthwise_layout(true)
6181 .input_size(15, 14)
6182 .padding(1, 1)
6183 .kernel_size(2, 2)
6184 .groups(24)
6185 .group_output_channels(3)
6186 .iterations(3)
6187 .TestNHWCxF16();
6188}
6189
6190TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 2x2_without_bias) {
6191 ConvolutionOperatorTester()
6192 .depthwise_layout(true)
6193 .has_bias(false)
6194 .input_size(15, 14)
6195 .padding(1, 1)
6196 .kernel_size(2, 2)
6197 .groups(24)
6198 .iterations(3)
6199 .TestNHWCxF16();
6200}
6201
6202TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3) {
6203 ConvolutionOperatorTester()
6204 .depthwise_layout(true)
6205 .input_size(15, 14)
6206 .padding(1, 1)
6207 .kernel_size(3, 3)
6208 .groups(24)
6209 .iterations(3)
6210 .TestNHWCxF16();
6211}
6212
6213TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3_with_depth_multiplier) {
6214 ConvolutionOperatorTester()
6215 .depthwise_layout(true)
6216 .input_size(15, 14)
6217 .padding(1, 1)
6218 .kernel_size(3, 3)
6219 .groups(24)
6220 .group_output_channels(3)
6221 .iterations(3)
6222 .TestNHWCxF16();
6223}
6224
6225TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3_without_bias) {
6226 ConvolutionOperatorTester()
6227 .depthwise_layout(true)
6228 .has_bias(false)
6229 .input_size(15, 14)
6230 .padding(1, 1)
6231 .kernel_size(3, 3)
6232 .groups(24)
6233 .iterations(3)
6234 .TestNHWCxF16();
6235}
6236
6237TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3s2_with_tf_same_padding) {
6238 for (size_t input_height = 14; input_height <= 15; input_height++) {
6239 for (size_t input_width = 14; input_width <= 15; input_width++) {
6240 ConvolutionOperatorTester()
6241 .depthwise_layout(true)
6242 .input_size(input_height, input_width)
6243 .padding_tf_same(true)
6244 .kernel_size(3, 3)
6245 .groups(24)
6246 .iterations(3)
6247 .TestNHWCxF16();
6248 }
6249 }
6250}
6251
6252TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 5x5) {
6253 ConvolutionOperatorTester()
6254 .depthwise_layout(true)
6255 .input_size(15, 14)
6256 .padding(2, 2)
6257 .kernel_size(5, 5)
6258 .groups(24)
6259 .iterations(3)
6260 .TestNHWCxF16();
6261}
6262
6263TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 5x5_with_depth_multiplier) {
6264 ConvolutionOperatorTester()
6265 .depthwise_layout(true)
6266 .input_size(15, 14)
6267 .padding(2, 2)
6268 .kernel_size(5, 5)
6269 .groups(24)
6270 .group_output_channels(3)
6271 .iterations(3)
6272 .TestNHWCxF16();
6273}
6274
6275TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 5x5_without_bias) {
6276 ConvolutionOperatorTester()
6277 .depthwise_layout(true)
6278 .has_bias(false)
6279 .input_size(15, 14)
6280 .padding(2, 2)
6281 .kernel_size(5, 5)
6282 .groups(24)
6283 .iterations(3)
6284 .TestNHWCxF16();
6285}
6286
6287TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 7x7) {
6288 ConvolutionOperatorTester()
6289 .depthwise_layout(true)
6290 .input_size(15, 14)
6291 .padding(3, 3)
6292 .kernel_size(7, 7)
6293 .groups(24)
6294 .iterations(3)
6295 .TestNHWCxF16();
6296}
6297
6298TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 7x7_without_bias) {
6299 ConvolutionOperatorTester()
6300 .depthwise_layout(true)
6301 .has_bias(false)
6302 .input_size(15, 14)
6303 .padding(3, 3)
6304 .kernel_size(7, 7)
6305 .groups(24)
6306 .iterations(3)
6307 .TestNHWCxF16();
6308}
6309
6310TEST(CONVOLUTION_NHWC_F16, setup_changing_input_buffer) {
6311 ConvolutionOperatorTester()
6312 .batch_size(3)
6313 .input_height(8)
6314 .input_width(8)
6315 .kernel_height(5)
6316 .kernel_width(3)
6317 .group_input_channels(15)
6318 .group_output_channels(17)
6319 .TestSetupNHWCxF16();
6320}
6321
6322TEST(CONVOLUTION_NHWC_F16, setup_changing_input_buffer_grouped) {
6323 ConvolutionOperatorTester()
6324 .batch_size(3)
6325 .input_height(8)
6326 .input_width(8)
6327 .kernel_height(5)
6328 .kernel_width(3)
6329 .groups(2)
6330 .group_input_channels(15)
6331 .group_output_channels(17)
6332 .TestSetupNHWCxF16();
6333}
6334
6335TEST(CONVOLUTION_NHWC_F16, setup_changing_input_buffer_depthwise) {
6336 ConvolutionOperatorTester()
6337 .batch_size(3)
6338 .input_height(8)
6339 .input_width(8)
6340 .kernel_height(3)
6341 .kernel_width(3)
6342 .groups(19)
6343 .group_input_channels(1)
6344 .group_output_channels(1)
6345 .TestSetupNHWCxF16();
6346}
6347
6348TEST(CONVOLUTION_NHWC_F16, setup_increasing_batch) {
6349 ConvolutionOperatorTester()
6350 .batch_size(3)
6351 .next_batch_size(5)
6352 .input_height(8)
6353 .input_width(8)
6354 .kernel_height(5)
6355 .kernel_width(3)
6356 .group_input_channels(15)
6357 .group_output_channels(17)
6358 .TestSetupNHWCxF16();
6359}
6360
6361TEST(CONVOLUTION_NHWC_F16, setup_increasing_batch_grouped) {
6362 ConvolutionOperatorTester()
6363 .batch_size(3)
6364 .next_batch_size(5)
6365 .input_height(8)
6366 .input_width(8)
6367 .kernel_height(5)
6368 .kernel_width(3)
6369 .groups(2)
6370 .group_input_channels(15)
6371 .group_output_channels(17)
6372 .TestSetupNHWCxF16();
6373}
6374
6375TEST(CONVOLUTION_NHWC_F16, setup_increasing_batch_depthwise) {
6376 ConvolutionOperatorTester()
6377 .batch_size(3)
6378 .next_batch_size(5)
6379 .input_height(8)
6380 .input_width(8)
6381 .kernel_height(3)
6382 .kernel_width(3)
6383 .groups(19)
6384 .group_input_channels(1)
6385 .group_output_channels(1)
6386 .TestSetupNHWCxF16();
6387}
6388
6389TEST(CONVOLUTION_NHWC_F16, setup_decreasing_batch) {
6390 ConvolutionOperatorTester()
6391 .batch_size(5)
6392 .next_batch_size(3)
6393 .input_height(8)
6394 .input_width(8)
6395 .kernel_height(5)
6396 .kernel_width(3)
6397 .group_input_channels(15)
6398 .group_output_channels(17)
6399 .TestSetupNHWCxF16();
6400}
6401
6402TEST(CONVOLUTION_NHWC_F16, setup_decreasing_batch_grouped) {
6403 ConvolutionOperatorTester()
6404 .batch_size(5)
6405 .next_batch_size(3)
6406 .input_height(8)
6407 .input_width(8)
6408 .kernel_height(5)
6409 .kernel_width(3)
6410 .groups(2)
6411 .group_input_channels(15)
6412 .group_output_channels(17)
6413 .TestSetupNHWCxF16();
6414}
6415
6416TEST(CONVOLUTION_NHWC_F16, setup_decreasing_batch_depthwise) {
6417 ConvolutionOperatorTester()
6418 .batch_size(5)
6419 .next_batch_size(3)
6420 .input_height(8)
6421 .input_width(8)
6422 .kernel_height(3)
6423 .kernel_width(3)
6424 .groups(19)
6425 .group_input_channels(1)
6426 .group_output_channels(1)
6427 .TestSetupNHWCxF16();
6428}
6429
6430TEST(CONVOLUTION_NHWC_F16, setup_changing_height) {
6431 ConvolutionOperatorTester()
6432 .batch_size(3)
6433 .input_height(8)
6434 .input_width(8)
6435 .next_input_height(9)
6436 .kernel_height(5)
6437 .kernel_width(3)
6438 .group_input_channels(15)
6439 .group_output_channels(17)
6440 .TestSetupNHWCxF16();
6441 ConvolutionOperatorTester()
6442 .batch_size(3)
6443 .input_height(8)
6444 .input_width(8)
6445 .next_input_height(7)
6446 .kernel_height(5)
6447 .kernel_width(3)
6448 .group_input_channels(15)
6449 .group_output_channels(17)
6450 .TestSetupNHWCxF16();
6451}
6452
6453TEST(CONVOLUTION_NHWC_F16, setup_changing_height_grouped) {
6454 ConvolutionOperatorTester()
6455 .batch_size(3)
6456 .input_height(8)
6457 .input_width(8)
6458 .next_input_height(9)
6459 .kernel_height(5)
6460 .kernel_width(3)
6461 .groups(2)
6462 .group_input_channels(15)
6463 .group_output_channels(17)
6464 .TestSetupNHWCxF16();
6465 ConvolutionOperatorTester()
6466 .batch_size(3)
6467 .input_height(8)
6468 .input_width(8)
6469 .next_input_height(7)
6470 .kernel_height(5)
6471 .kernel_width(3)
6472 .groups(2)
6473 .group_input_channels(15)
6474 .group_output_channels(17)
6475 .TestSetupNHWCxF16();
6476}
6477
6478TEST(CONVOLUTION_NHWC_F16, setup_changing_height_depthwise) {
6479 ConvolutionOperatorTester()
6480 .batch_size(3)
6481 .input_height(8)
6482 .input_width(8)
6483 .next_input_height(9)
6484 .kernel_height(3)
6485 .kernel_width(3)
6486 .groups(19)
6487 .group_input_channels(1)
6488 .group_output_channels(1)
6489 .TestSetupNHWCxF16();
6490 ConvolutionOperatorTester()
6491 .batch_size(3)
6492 .input_height(8)
6493 .input_width(8)
6494 .next_input_height(7)
6495 .kernel_height(3)
6496 .kernel_width(3)
6497 .groups(19)
6498 .group_input_channels(1)
6499 .group_output_channels(1)
6500 .TestSetupNHWCxF16();
6501}
6502
6503TEST(CONVOLUTION_NHWC_F16, setup_changing_width) {
6504 ConvolutionOperatorTester()
6505 .batch_size(3)
6506 .input_height(8)
6507 .input_width(8)
6508 .next_input_width(9)
6509 .kernel_height(5)
6510 .kernel_width(3)
6511 .group_input_channels(15)
6512 .group_output_channels(17)
6513 .TestSetupNHWCxF16();
6514 ConvolutionOperatorTester()
6515 .batch_size(3)
6516 .input_height(8)
6517 .input_width(8)
6518 .next_input_width(7)
6519 .kernel_height(5)
6520 .kernel_width(3)
6521 .group_input_channels(15)
6522 .group_output_channels(17)
6523 .TestSetupNHWCxF16();
6524}
6525
6526TEST(CONVOLUTION_NHWC_F16, setup_changing_width_grouped) {
6527 ConvolutionOperatorTester()
6528 .batch_size(3)
6529 .input_height(8)
6530 .input_width(8)
6531 .next_input_width(9)
6532 .kernel_height(5)
6533 .kernel_width(3)
6534 .groups(2)
6535 .group_input_channels(15)
6536 .group_output_channels(17)
6537 .TestSetupNHWCxF16();
6538 ConvolutionOperatorTester()
6539 .batch_size(3)
6540 .input_height(8)
6541 .input_width(8)
6542 .next_input_width(7)
6543 .kernel_height(5)
6544 .kernel_width(3)
6545 .groups(2)
6546 .group_input_channels(15)
6547 .group_output_channels(17)
6548 .TestSetupNHWCxF16();
6549}
6550
6551TEST(CONVOLUTION_NHWC_F16, setup_changing_width_depthwise) {
6552 ConvolutionOperatorTester()
6553 .batch_size(3)
6554 .input_height(8)
6555 .input_width(8)
6556 .next_input_width(9)
6557 .kernel_height(3)
6558 .kernel_width(3)
6559 .groups(19)
6560 .group_input_channels(1)
6561 .group_output_channels(1)
6562 .TestSetupNHWCxF16();
6563 ConvolutionOperatorTester()
6564 .batch_size(3)
6565 .input_height(8)
6566 .input_width(8)
6567 .next_input_width(7)
6568 .kernel_height(3)
6569 .kernel_width(3)
6570 .groups(19)
6571 .group_input_channels(1)
6572 .group_output_channels(1)
6573 .TestSetupNHWCxF16();
6574}
6575
6576TEST(CONVOLUTION_NHWC_F16, setup_swap_height_and_width) {
6577 ConvolutionOperatorTester()
6578 .batch_size(3)
6579 .input_height(9)
6580 .input_width(8)
6581 .next_input_height(8)
6582 .next_input_width(9)
6583 .kernel_height(5)
6584 .kernel_width(3)
6585 .group_input_channels(15)
6586 .group_output_channels(17)
6587 .TestSetupNHWCxF16();
6588}
6589
6590TEST(CONVOLUTION_NHWC_F16, setup_swap_height_and_width_grouped) {
6591 ConvolutionOperatorTester()
6592 .batch_size(3)
6593 .input_height(9)
6594 .input_width(8)
6595 .next_input_height(8)
6596 .next_input_width(9)
6597 .kernel_height(5)
6598 .kernel_width(3)
6599 .groups(2)
6600 .group_input_channels(15)
6601 .group_output_channels(17)
6602 .TestSetupNHWCxF16();
6603}
6604
6605TEST(CONVOLUTION_NHWC_F16, setup_swap_height_and_width_depthwise) {
6606 ConvolutionOperatorTester()
6607 .batch_size(3)
6608 .input_height(9)
6609 .input_width(8)
6610 .next_input_height(8)
6611 .next_input_width(9)
6612 .kernel_height(3)
6613 .kernel_width(3)
6614 .groups(19)
6615 .group_input_channels(1)
6616 .group_output_channels(1)
6617 .TestSetupNHWCxF16();
6618}