blob: b17df8962a3ffcbe2f5a97066caea8e5ca6f6520 [file] [log] [blame]
XNNPACK Teamb455b122019-09-27 18:10:33 -07001// Copyright 2019 Google LLC
2//
3// This source code is licensed under the BSD-style license found in the
4// LICENSE file in the root directory of this source tree.
5
6#include <gtest/gtest.h>
7
Marat Dukhanefc47b82019-11-18 09:25:38 -08008#include "convolution-operator-tester.h"
XNNPACK Teamb455b122019-09-27 18:10:33 -07009
10
11/**************************** SPMM path ****************************/
12
Marat Dukhanefc47b82019-11-18 09:25:38 -080013TEST(CONVOLUTION_NHWC_F32, 1x1) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080014 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -080015 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070016 .input_size(27, 29)
17 .kernel_size(1, 1)
18 .group_input_channels(23)
19 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -080020 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -070021 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -080022 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -070023}
24
Marat Dukhanefc47b82019-11-18 09:25:38 -080025TEST(CONVOLUTION_NHWC_F32, 1x1_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080026 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -080027 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070028 .input_size(27, 29)
29 .kernel_size(1, 1)
30 .group_input_channels(23)
31 .group_output_channels(19)
32 .sparsity(1.0f)
33 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -080034 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -070035}
36
Marat Dukhanefc47b82019-11-18 09:25:38 -080037TEST(CONVOLUTION_NHWC_F32, 1x1_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080038 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -070039 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -080040 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070041 .input_size(input_width, 29)
42 .kernel_size(1, 1)
43 .group_input_channels(23)
44 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -080045 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -070046 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -080047 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -070048 }
49}
50
Marat Dukhanefc47b82019-11-18 09:25:38 -080051TEST(CONVOLUTION_NHWC_F32, 1x1_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080052 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -070053 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -080054 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070055 .input_size(27, input_height)
56 .kernel_size(1, 1)
57 .group_input_channels(23)
58 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -080059 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -070060 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -080061 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -070062 }
63}
64
Marat Dukhanefc47b82019-11-18 09:25:38 -080065TEST(CONVOLUTION_NHWC_F32, 1x1_varying_input_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080066 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -070067 for (size_t input_channels = 1; input_channels <= 16; input_channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -080068 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070069 .input_size(27, 29)
70 .kernel_size(1, 1)
71 .group_input_channels(input_channels)
72 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -080073 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -070074 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -080075 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -070076 }
77}
78
Marat Dukhanefc47b82019-11-18 09:25:38 -080079TEST(CONVOLUTION_NHWC_F32, 1x1_varying_output_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080080 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -070081 for (size_t output_channels = 1; output_channels < 19; output_channels *= 2) {
Marat Dukhanefc47b82019-11-18 09:25:38 -080082 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070083 .input_size(27, 29)
84 .kernel_size(1, 1)
85 .group_input_channels(23)
86 .group_output_channels(output_channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -080087 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -070088 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -080089 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -070090 }
91}
92
Marat Dukhanefc47b82019-11-18 09:25:38 -080093TEST(CONVOLUTION_NHWC_F32, 1x1_with_qmin) {
94 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070095 .input_size(27, 29)
96 .kernel_size(1, 1)
97 .group_input_channels(23)
98 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -080099 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700100 .qmin(128)
101 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800102 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700103}
104
Marat Dukhanefc47b82019-11-18 09:25:38 -0800105TEST(CONVOLUTION_NHWC_F32, 1x1_with_qmax) {
106 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700107 .input_size(27, 29)
108 .kernel_size(1, 1)
109 .group_input_channels(23)
110 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800111 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700112 .qmax(128)
113 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800114 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700115}
116
Marat Dukhanefc47b82019-11-18 09:25:38 -0800117TEST(CONVOLUTION_NHWC_F32, 1x1_without_bias) {
118 ConvolutionOperatorTester()
Marat Dukhanf568f082019-10-30 09:47:07 -0700119 .has_bias(false)
120 .input_size(27, 29)
121 .kernel_size(1, 1)
122 .group_input_channels(23)
123 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800124 .sparsity(0.5f)
Marat Dukhanf568f082019-10-30 09:47:07 -0700125 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800126 .TestNCHWxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -0700127}
128
XNNPACK Teamb455b122019-09-27 18:10:33 -0700129/**************************** SPMM path, batched ****************************/
130
Marat Dukhanefc47b82019-11-18 09:25:38 -0800131TEST(CONVOLUTION_NHWC_F32, batched_1x1) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800132 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800133 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700134 .batch_size(2)
135 .input_size(27, 29)
136 .kernel_size(1, 1)
137 .group_input_channels(23)
138 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800139 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700140 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800141 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700142}
143
Marat Dukhanefc47b82019-11-18 09:25:38 -0800144TEST(CONVOLUTION_NHWC_F32, batched_1x1_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800145 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800146 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700147 .batch_size(2)
148 .input_size(27, 29)
149 .kernel_size(1, 1)
150 .group_input_channels(23)
151 .group_output_channels(19)
152 .sparsity(1.0f)
153 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800154 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700155}
156
Marat Dukhanefc47b82019-11-18 09:25:38 -0800157TEST(CONVOLUTION_NHWC_F32, batched_1x1_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800158 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700159 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800160 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700161 .batch_size(2)
162 .input_size(input_width, 29)
163 .kernel_size(1, 1)
164 .group_input_channels(23)
165 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800166 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700167 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800168 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700169 }
170}
171
Marat Dukhanefc47b82019-11-18 09:25:38 -0800172TEST(CONVOLUTION_NHWC_F32, batched_1x1_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800173 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700174 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800175 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700176 .batch_size(2)
177 .input_size(27, input_height)
178 .kernel_size(1, 1)
179 .group_input_channels(23)
180 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800181 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700182 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800183 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700184 }
185}
186
Marat Dukhanefc47b82019-11-18 09:25:38 -0800187TEST(CONVOLUTION_NHWC_F32, batched_1x1_varying_input_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800188 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700189 for (size_t input_channels = 1; input_channels <= 16; input_channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800190 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700191 .batch_size(2)
192 .input_size(27, 29)
193 .kernel_size(1, 1)
194 .group_input_channels(input_channels)
195 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800196 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700197 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800198 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700199 }
200}
201
Marat Dukhanefc47b82019-11-18 09:25:38 -0800202TEST(CONVOLUTION_NHWC_F32, batched_1x1_varying_output_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800203 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700204 for (size_t output_channels = 1; output_channels < 19; output_channels *= 2) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800205 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700206 .batch_size(2)
207 .input_size(27, 29)
208 .kernel_size(1, 1)
209 .group_input_channels(23)
210 .group_output_channels(output_channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800211 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700212 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800213 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700214 }
215}
216
Marat Dukhanefc47b82019-11-18 09:25:38 -0800217TEST(CONVOLUTION_NHWC_F32, batched_1x1_with_input_stride) {
218 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700219 .batch_size(2)
220 .input_size(27, 29)
221 .kernel_size(1, 1)
222 .input_batch_stride(18013)
223 .group_input_channels(23)
224 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800225 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700226 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800227 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700228}
229
Marat Dukhanefc47b82019-11-18 09:25:38 -0800230TEST(CONVOLUTION_NHWC_F32, batched_1x1_with_output_stride) {
231 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700232 .batch_size(2)
233 .input_size(27, 29)
234 .kernel_size(1, 1)
235 .output_batch_stride(14879)
236 .group_input_channels(23)
237 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800238 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700239 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800240 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700241}
242
Marat Dukhanefc47b82019-11-18 09:25:38 -0800243TEST(CONVOLUTION_NHWC_F32, batched_1x1_with_qmin) {
244 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700245 .batch_size(2)
246 .input_size(27, 29)
247 .kernel_size(1, 1)
248 .group_input_channels(23)
249 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800250 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700251 .qmin(128)
252 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800253 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700254}
255
Marat Dukhanefc47b82019-11-18 09:25:38 -0800256TEST(CONVOLUTION_NHWC_F32, batched_1x1_with_qmax) {
257 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700258 .batch_size(2)
259 .input_size(27, 29)
260 .kernel_size(1, 1)
261 .group_input_channels(23)
262 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800263 .sparsity(0.5f)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700264 .qmax(128)
265 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800266 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700267}
268
Marat Dukhanefc47b82019-11-18 09:25:38 -0800269TEST(CONVOLUTION_NHWC_F32, batched_1x1_without_bias) {
270 ConvolutionOperatorTester()
Marat Dukhanf568f082019-10-30 09:47:07 -0700271 .has_bias(false)
272 .batch_size(2)
273 .input_size(27, 29)
274 .kernel_size(1, 1)
275 .group_input_channels(23)
276 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800277 .sparsity(0.5f)
Marat Dukhanf568f082019-10-30 09:47:07 -0700278 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800279 .TestNCHWxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -0700280}
281
XNNPACK Teamb455b122019-09-27 18:10:33 -0700282/**************************** DConv 3x3c3s2 HWC->SpCHW path ****************************/
283
284TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, 3x3c3s2) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800285 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800286 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700287 .input_size(27, 29)
288 .padding(1)
289 .kernel_size(3, 3)
290 .subsampling(2)
291 .group_input_channels(3)
292 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800293 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700294 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800295 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700296}
297
298TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, 3x3c3s2_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800299 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700300 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800301 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700302 .input_size(input_width, 29)
303 .padding(1)
304 .kernel_size(3, 3)
305 .subsampling(2)
306 .group_input_channels(3)
307 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800308 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700309 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800310 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700311 }
312}
313
314TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, 3x3c3s2_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800315 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700316 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800317 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700318 .input_size(27, input_height)
319 .padding(1)
320 .kernel_size(3, 3)
321 .subsampling(2)
322 .group_input_channels(3)
323 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800324 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700325 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800326 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700327 }
328}
329
330TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, 3x3c3s2_varying_output_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800331 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700332 for (size_t output_channels = 1; output_channels < 19; output_channels *= 2) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800333 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700334 .input_size(27, 29)
335 .padding(1)
336 .kernel_size(3, 3)
337 .subsampling(2)
338 .group_input_channels(3)
339 .group_output_channels(output_channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800340 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700341 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800342 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700343 }
344}
345
346TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, 3x3c3s2_with_qmin) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800347 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700348 .input_size(27, 29)
349 .padding(1)
350 .kernel_size(3, 3)
351 .subsampling(2)
352 .group_input_channels(3)
353 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800354 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700355 .qmin(128)
356 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800357 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700358}
359
360TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, 3x3c3s2_with_qmax) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800361 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700362 .input_size(27, 29)
363 .padding(1)
364 .kernel_size(3, 3)
365 .subsampling(2)
366 .group_input_channels(3)
367 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800368 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700369 .qmax(128)
370 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800371 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700372}
373
Marat Dukhanf568f082019-10-30 09:47:07 -0700374TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, 3x3c3s2_without_bias) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800375 ConvolutionOperatorTester()
Marat Dukhanf568f082019-10-30 09:47:07 -0700376 .has_bias(false)
377 .input_size(27, 29)
378 .padding(1)
379 .kernel_size(3, 3)
380 .subsampling(2)
381 .group_input_channels(3)
382 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800383 .force_nhwc_input(true)
Marat Dukhanf568f082019-10-30 09:47:07 -0700384 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800385 .TestNCHWxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -0700386}
387
XNNPACK Teamb455b122019-09-27 18:10:33 -0700388/**************************** DConv 3x3c3s2 HWC->SpCHW path, batched ****************************/
389
390TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, batched_3x3c3s2) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800391 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800392 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700393 .batch_size(2)
394 .input_size(27, 29)
395 .padding(1)
396 .kernel_size(3, 3)
397 .subsampling(2)
398 .group_input_channels(3)
399 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800400 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700401 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800402 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700403}
404
405TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, batched_3x3c3s2_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800406 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700407 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800408 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700409 .batch_size(2)
410 .input_size(input_width, 29)
411 .padding(1)
412 .kernel_size(3, 3)
413 .subsampling(2)
414 .group_input_channels(3)
415 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800416 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700417 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800418 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700419 }
420}
421
422TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, batched_3x3c3s2_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800423 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700424 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800425 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700426 .batch_size(2)
427 .input_size(27, input_height)
428 .padding(1)
429 .kernel_size(3, 3)
430 .subsampling(2)
431 .group_input_channels(3)
432 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800433 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700434 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800435 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700436 }
437}
438
439TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, batched_3x3c3s2_varying_output_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800440 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700441 for (size_t output_channels = 1; output_channels < 19; output_channels *= 2) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800442 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700443 .batch_size(2)
444 .input_size(27, 29)
445 .padding(1)
446 .kernel_size(3, 3)
447 .subsampling(2)
448 .group_input_channels(3)
449 .group_output_channels(output_channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800450 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700451 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800452 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700453 }
454}
455
456TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, batched_3x3c3s2_with_output_stride) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800457 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700458 .batch_size(2)
459 .input_size(27, 29)
460 .padding(1)
461 .kernel_size(3, 3)
462 .subsampling(2)
463 .output_batch_stride(4001)
464 .group_input_channels(3)
465 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800466 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700467 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800468 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700469}
470
471TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, batched_3x3c3s2_with_qmin) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800472 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700473 .batch_size(2)
474 .input_size(27, 29)
475 .padding(1)
476 .kernel_size(3, 3)
477 .subsampling(2)
478 .group_input_channels(3)
479 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800480 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700481 .qmin(128)
482 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800483 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700484}
485
486TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, batched_3x3c3s2_with_qmax) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800487 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700488 .batch_size(2)
489 .input_size(27, 29)
490 .padding(1)
491 .kernel_size(3, 3)
492 .subsampling(2)
493 .group_input_channels(3)
494 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800495 .force_nhwc_input(true)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700496 .qmax(128)
497 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800498 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700499}
500
Marat Dukhanf568f082019-10-30 09:47:07 -0700501TEST(CONVOLUTION_HWC2SpNHWC_OP_F32, batched_3x3c3s2_without_bias) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800502 ConvolutionOperatorTester()
Marat Dukhanf568f082019-10-30 09:47:07 -0700503 .has_bias(false)
504 .batch_size(2)
505 .input_size(27, 29)
506 .padding(1)
507 .kernel_size(3, 3)
508 .subsampling(2)
509 .group_input_channels(3)
510 .group_output_channels(19)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800511 .force_nhwc_input(true)
Marat Dukhanf568f082019-10-30 09:47:07 -0700512 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800513 .TestNCHWxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -0700514}
515
XNNPACK Teamb455b122019-09-27 18:10:33 -0700516/**************************** DWCONV 3x3 path ****************************/
517
Marat Dukhanefc47b82019-11-18 09:25:38 -0800518TEST(CONVOLUTION_NHWC_F32, depthwise_3x3) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800519 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800520 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700521 .input_size(27, 29)
522 .kernel_size(3, 3)
523 .padding_width(1)
524 .groups(19)
525 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800526 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700527}
528
Marat Dukhanefc47b82019-11-18 09:25:38 -0800529TEST(CONVOLUTION_NHWC_F32, depthwise_3x3_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800530 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800531 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700532 .input_size(27, 29)
533 .kernel_size(3, 3)
534 .padding_width(1)
535 .groups(19)
536 .sparsity(1.0f)
537 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800538 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700539}
540
Marat Dukhanefc47b82019-11-18 09:25:38 -0800541TEST(CONVOLUTION_NHWC_F32, depthwise_3x3_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800542 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700543 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800544 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700545 .input_size(input_width, 29)
546 .kernel_size(3, 3)
547 .padding_width(1)
548 .groups(19)
549 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800550 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700551 }
552}
553
Marat Dukhanefc47b82019-11-18 09:25:38 -0800554TEST(CONVOLUTION_NHWC_F32, depthwise_3x3_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800555 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700556 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800557 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700558 .input_size(27, input_height)
559 .kernel_size(3, 3)
560 .padding_width(1)
561 .groups(19)
562 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800563 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700564 }
565}
566
Marat Dukhanefc47b82019-11-18 09:25:38 -0800567TEST(CONVOLUTION_NHWC_F32, depthwise_3x3_varying_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800568 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700569 for (size_t channels = 1; channels <= 16; channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800570 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700571 .input_size(27, 29)
572 .kernel_size(3, 3)
573 .padding_width(1)
574 .groups(channels)
575 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800576 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700577 }
578}
579
Marat Dukhanefc47b82019-11-18 09:25:38 -0800580TEST(CONVOLUTION_NHWC_F32, depthwise_3x3_with_qmin) {
581 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700582 .input_size(27, 29)
583 .kernel_size(3, 3)
584 .padding_width(1)
585 .groups(19)
586 .qmin(128)
587 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800588 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700589}
590
Marat Dukhanefc47b82019-11-18 09:25:38 -0800591TEST(CONVOLUTION_NHWC_F32, depthwise_3x3_with_qmax) {
592 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700593 .input_size(27, 29)
594 .kernel_size(3, 3)
595 .padding_width(1)
596 .groups(19)
597 .qmax(128)
598 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800599 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700600}
601
Marat Dukhanefc47b82019-11-18 09:25:38 -0800602TEST(CONVOLUTION_NHWC_F32, depthwise_3x3_without_bias) {
603 ConvolutionOperatorTester()
Marat Dukhanf568f082019-10-30 09:47:07 -0700604 .has_bias(false)
605 .input_size(27, 29)
606 .kernel_size(3, 3)
607 .padding_width(1)
608 .groups(19)
609 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800610 .TestNCHWxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -0700611}
612
XNNPACK Teamb455b122019-09-27 18:10:33 -0700613/**************************** DWCONV 3x3 path, batched ****************************/
614
Marat Dukhanefc47b82019-11-18 09:25:38 -0800615TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800616 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800617 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700618 .batch_size(2)
619 .input_size(27, 29)
620 .kernel_size(3, 3)
621 .padding_width(1)
622 .groups(19)
623 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800624 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700625}
626
Marat Dukhanefc47b82019-11-18 09:25:38 -0800627TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800628 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800629 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700630 .batch_size(2)
631 .input_size(27, 29)
632 .kernel_size(3, 3)
633 .padding_width(1)
634 .groups(19)
635 .sparsity(1.0f)
636 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800637 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700638}
639
Marat Dukhanefc47b82019-11-18 09:25:38 -0800640TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800641 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700642 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800643 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700644 .batch_size(2)
645 .input_size(input_width, 29)
646 .kernel_size(3, 3)
647 .padding_width(1)
648 .groups(19)
649 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800650 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700651 }
652}
653
Marat Dukhanefc47b82019-11-18 09:25:38 -0800654TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800655 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700656 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800657 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700658 .batch_size(2)
659 .input_size(27, input_height)
660 .kernel_size(3, 3)
661 .padding_width(1)
662 .groups(19)
663 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800664 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700665 }
666}
667
Marat Dukhanefc47b82019-11-18 09:25:38 -0800668TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3_varying_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800669 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700670 for (size_t channels = 1; channels <= 16; channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800671 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700672 .batch_size(2)
673 .input_size(27, 29)
674 .kernel_size(3, 3)
675 .padding_width(1)
676 .groups(channels)
677 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800678 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700679 }
680}
681
Marat Dukhanefc47b82019-11-18 09:25:38 -0800682TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3_with_input_stride) {
683 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700684 .batch_size(2)
685 .input_size(27, 29)
686 .kernel_size(3, 3)
687 .padding_width(1)
688 .input_batch_stride(14879)
689 .groups(19)
690 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800691 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700692}
693
Marat Dukhanefc47b82019-11-18 09:25:38 -0800694TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3_with_output_stride) {
695 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700696 .batch_size(2)
697 .input_size(27, 29)
698 .kernel_size(3, 3)
699 .padding_width(1)
700 .output_batch_stride(13781)
701 .groups(19)
702 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800703 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700704}
705
Marat Dukhanefc47b82019-11-18 09:25:38 -0800706TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3_with_qmin) {
707 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700708 .batch_size(2)
709 .input_size(27, 29)
710 .kernel_size(3, 3)
711 .padding_width(1)
712 .groups(19)
713 .qmin(128)
714 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800715 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700716}
717
Marat Dukhanefc47b82019-11-18 09:25:38 -0800718TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3_with_qmax) {
719 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700720 .batch_size(2)
721 .input_size(27, 29)
722 .kernel_size(3, 3)
723 .padding_width(1)
724 .groups(19)
725 .qmax(128)
726 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800727 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700728}
729
Marat Dukhanefc47b82019-11-18 09:25:38 -0800730TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3_without_bias) {
731 ConvolutionOperatorTester()
Marat Dukhanf568f082019-10-30 09:47:07 -0700732 .has_bias(false)
733 .batch_size(2)
734 .input_size(27, 29)
735 .kernel_size(3, 3)
736 .padding_width(1)
737 .groups(19)
738 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800739 .TestNCHWxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -0700740}
741
XNNPACK Teamb455b122019-09-27 18:10:33 -0700742/**************************** DWCONV 3x3 stride-2 path ****************************/
743
Marat Dukhanefc47b82019-11-18 09:25:38 -0800744TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800745 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800746 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700747 .input_size(27, 29)
748 .kernel_size(3, 3)
749 .padding_width(1)
750 .subsampling(2)
751 .groups(19)
752 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800753 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700754}
755
Marat Dukhanefc47b82019-11-18 09:25:38 -0800756TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800757 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800758 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700759 .input_size(27, 29)
760 .kernel_size(3, 3)
761 .padding_width(1)
762 .subsampling(2)
763 .groups(19)
764 .sparsity(1.0f)
765 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800766 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700767}
768
Marat Dukhanefc47b82019-11-18 09:25:38 -0800769TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800770 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700771 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800772 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700773 .input_size(input_width, 29)
774 .kernel_size(3, 3)
775 .padding_width(1)
776 .subsampling(2)
777 .groups(19)
778 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800779 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700780 }
781}
782
Marat Dukhanefc47b82019-11-18 09:25:38 -0800783TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800784 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700785 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800786 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700787 .input_size(27, input_height)
788 .kernel_size(3, 3)
789 .padding_width(1)
790 .subsampling(2)
791 .groups(19)
792 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800793 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700794 }
795}
796
Marat Dukhanefc47b82019-11-18 09:25:38 -0800797TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2_varying_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800798 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700799 for (size_t channels = 1; channels <= 16; channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800800 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700801 .input_size(27, 29)
802 .kernel_size(3, 3)
803 .padding_width(1)
804 .subsampling(2)
805 .groups(channels)
806 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800807 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700808 }
809}
810
Marat Dukhanefc47b82019-11-18 09:25:38 -0800811TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2_with_qmin) {
812 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700813 .input_size(27, 29)
814 .kernel_size(3, 3)
815 .padding_width(1)
816 .subsampling(2)
817 .groups(19)
818 .qmin(128)
819 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800820 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700821}
822
Marat Dukhanefc47b82019-11-18 09:25:38 -0800823TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2_with_qmax) {
824 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700825 .input_size(27, 29)
826 .kernel_size(3, 3)
827 .padding_width(1)
828 .subsampling(2)
829 .groups(19)
830 .qmax(128)
831 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800832 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700833}
834
Marat Dukhanefc47b82019-11-18 09:25:38 -0800835TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2_without_bias) {
836 ConvolutionOperatorTester()
Marat Dukhanf568f082019-10-30 09:47:07 -0700837 .has_bias(false)
838 .input_size(27, 29)
839 .kernel_size(3, 3)
840 .padding_width(1)
841 .subsampling(2)
842 .groups(19)
843 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800844 .TestNCHWxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -0700845}
846
XNNPACK Teamb455b122019-09-27 18:10:33 -0700847/**************************** DWCONV 3x3 stride-2 path, batched ****************************/
848
Marat Dukhanefc47b82019-11-18 09:25:38 -0800849TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800850 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800851 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700852 .batch_size(2)
853 .input_size(27, 29)
854 .kernel_size(3, 3)
855 .padding_width(1)
856 .subsampling(2)
857 .groups(19)
858 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800859 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700860}
861
Marat Dukhanefc47b82019-11-18 09:25:38 -0800862TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800863 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800864 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700865 .batch_size(2)
866 .input_size(27, 29)
867 .kernel_size(3, 3)
868 .padding_width(1)
869 .subsampling(2)
870 .groups(19)
871 .sparsity(1.0f)
872 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800873 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700874}
875
Marat Dukhanefc47b82019-11-18 09:25:38 -0800876TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800877 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700878 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800879 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700880 .batch_size(2)
881 .input_size(input_width, 29)
882 .kernel_size(3, 3)
883 .padding_width(1)
884 .subsampling(2)
885 .groups(19)
886 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800887 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700888 }
889}
890
Marat Dukhanefc47b82019-11-18 09:25:38 -0800891TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800892 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700893 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800894 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700895 .batch_size(2)
896 .input_size(27, input_height)
897 .kernel_size(3, 3)
898 .padding_width(1)
899 .subsampling(2)
900 .groups(19)
901 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800902 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700903 }
904}
905
Marat Dukhanefc47b82019-11-18 09:25:38 -0800906TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2_varying_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800907 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -0700908 for (size_t channels = 1; channels <= 16; channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -0800909 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700910 .batch_size(2)
911 .input_size(27, 29)
912 .kernel_size(3, 3)
913 .padding_width(1)
914 .subsampling(2)
915 .groups(channels)
916 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800917 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700918 }
919}
920
Marat Dukhanefc47b82019-11-18 09:25:38 -0800921TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2_with_input_stride) {
922 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700923 .batch_size(2)
924 .input_size(27, 29)
925 .kernel_size(3, 3)
926 .padding_width(1)
927 .subsampling(2)
928 .input_batch_stride(14879)
929 .groups(19)
930 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800931 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700932}
933
Marat Dukhanefc47b82019-11-18 09:25:38 -0800934TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2_with_output_stride) {
935 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700936 .batch_size(2)
937 .input_size(27, 29)
938 .kernel_size(3, 3)
939 .padding_width(1)
940 .subsampling(2)
941 .output_batch_stride(13781)
942 .groups(19)
943 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800944 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700945}
946
Marat Dukhanefc47b82019-11-18 09:25:38 -0800947TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2_with_qmin) {
948 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700949 .batch_size(2)
950 .input_size(27, 29)
951 .kernel_size(3, 3)
952 .padding_width(1)
953 .subsampling(2)
954 .groups(19)
955 .qmin(128)
956 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800957 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700958}
959
Marat Dukhanefc47b82019-11-18 09:25:38 -0800960TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2_with_qmax) {
961 ConvolutionOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700962 .batch_size(2)
963 .input_size(27, 29)
964 .kernel_size(3, 3)
965 .padding_width(1)
966 .subsampling(2)
967 .groups(19)
968 .qmax(128)
969 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800970 .TestNCHWxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700971}
Marat Dukhanf568f082019-10-30 09:47:07 -0700972
Marat Dukhanefc47b82019-11-18 09:25:38 -0800973TEST(CONVOLUTION_NHWC_F32, batched_depthwise_3x3s2_without_bias) {
974 ConvolutionOperatorTester()
Marat Dukhanf568f082019-10-30 09:47:07 -0700975 .has_bias(false)
976 .batch_size(2)
977 .input_size(27, 29)
978 .kernel_size(3, 3)
979 .padding_width(1)
980 .subsampling(2)
981 .groups(19)
982 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800983 .TestNCHWxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -0700984}
Marat Dukhana99918a2019-11-15 14:40:12 -0800985
986/**************************** DWCONV 5x5 path ****************************/
987
Marat Dukhanefc47b82019-11-18 09:25:38 -0800988TEST(CONVOLUTION_NHWC_F32, depthwise_5x5) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800989 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -0800990 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -0800991 .input_size(27, 29)
992 .kernel_size(5, 5)
993 .padding_width(2)
994 .groups(19)
995 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800996 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -0800997}
998
Marat Dukhanefc47b82019-11-18 09:25:38 -0800999TEST(CONVOLUTION_NHWC_F32, depthwise_5x5_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001000 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -08001001 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001002 .input_size(27, 29)
1003 .kernel_size(5, 5)
1004 .padding_width(2)
1005 .groups(19)
1006 .sparsity(1.0f)
1007 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001008 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001009}
1010
Marat Dukhanefc47b82019-11-18 09:25:38 -08001011TEST(CONVOLUTION_NHWC_F32, depthwise_5x5_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001012 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001013 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001014 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001015 .input_size(input_width, 29)
1016 .kernel_size(5, 5)
1017 .padding_width(2)
1018 .groups(19)
1019 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001020 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001021 }
1022}
1023
Marat Dukhanefc47b82019-11-18 09:25:38 -08001024TEST(CONVOLUTION_NHWC_F32, depthwise_5x5_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001025 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001026 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001027 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001028 .input_size(27, input_height)
1029 .kernel_size(5, 5)
1030 .padding_width(2)
1031 .groups(19)
1032 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001033 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001034 }
1035}
1036
Marat Dukhanefc47b82019-11-18 09:25:38 -08001037TEST(CONVOLUTION_NHWC_F32, depthwise_5x5_varying_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001038 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001039 for (size_t channels = 1; channels <= 16; channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001040 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001041 .input_size(27, 29)
1042 .kernel_size(5, 5)
1043 .padding_width(2)
1044 .groups(channels)
1045 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001046 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001047 }
1048}
1049
Marat Dukhanefc47b82019-11-18 09:25:38 -08001050TEST(CONVOLUTION_NHWC_F32, depthwise_5x5_with_qmin) {
1051 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001052 .input_size(27, 29)
1053 .kernel_size(5, 5)
1054 .padding_width(2)
1055 .groups(19)
1056 .qmin(128)
1057 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001058 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001059}
1060
Marat Dukhanefc47b82019-11-18 09:25:38 -08001061TEST(CONVOLUTION_NHWC_F32, depthwise_5x5_with_qmax) {
1062 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001063 .input_size(27, 29)
1064 .kernel_size(5, 5)
1065 .padding_width(2)
1066 .groups(19)
1067 .qmax(128)
1068 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001069 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001070}
1071
Marat Dukhanefc47b82019-11-18 09:25:38 -08001072TEST(CONVOLUTION_NHWC_F32, depthwise_5x5_without_bias) {
1073 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001074 .has_bias(false)
1075 .input_size(27, 29)
1076 .kernel_size(5, 5)
1077 .padding_width(2)
1078 .groups(19)
1079 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001080 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001081}
1082
1083/**************************** DWCONV 5x5 path, batched ****************************/
1084
Marat Dukhanefc47b82019-11-18 09:25:38 -08001085TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001086 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -08001087 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001088 .batch_size(2)
1089 .input_size(27, 29)
1090 .kernel_size(5, 5)
1091 .padding_width(2)
1092 .groups(19)
1093 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001094 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001095}
1096
Marat Dukhanefc47b82019-11-18 09:25:38 -08001097TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001098 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -08001099 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001100 .batch_size(2)
1101 .input_size(27, 29)
1102 .kernel_size(5, 5)
1103 .padding_width(2)
1104 .groups(19)
1105 .sparsity(1.0f)
1106 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001107 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001108}
1109
Marat Dukhanefc47b82019-11-18 09:25:38 -08001110TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001111 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001112 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001113 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001114 .batch_size(2)
1115 .input_size(input_width, 29)
1116 .kernel_size(5, 5)
1117 .padding_width(2)
1118 .groups(19)
1119 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001120 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001121 }
1122}
1123
Marat Dukhanefc47b82019-11-18 09:25:38 -08001124TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001125 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001126 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001127 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001128 .batch_size(2)
1129 .input_size(27, input_height)
1130 .kernel_size(5, 5)
1131 .padding_width(2)
1132 .groups(19)
1133 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001134 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001135 }
1136}
1137
Marat Dukhanefc47b82019-11-18 09:25:38 -08001138TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5_varying_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001139 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001140 for (size_t channels = 1; channels <= 16; channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001141 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001142 .batch_size(2)
1143 .input_size(27, 29)
1144 .kernel_size(5, 5)
1145 .padding_width(2)
1146 .groups(channels)
1147 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001148 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001149 }
1150}
1151
Marat Dukhanefc47b82019-11-18 09:25:38 -08001152TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5_with_input_stride) {
1153 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001154 .batch_size(2)
1155 .input_size(27, 29)
1156 .kernel_size(5, 5)
1157 .padding_width(2)
1158 .input_batch_stride(14879)
1159 .groups(19)
1160 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001161 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001162}
1163
Marat Dukhanefc47b82019-11-18 09:25:38 -08001164TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5_with_output_stride) {
1165 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001166 .batch_size(2)
1167 .input_size(27, 29)
1168 .kernel_size(5, 5)
1169 .padding_width(2)
1170 .output_batch_stride(13781)
1171 .groups(19)
1172 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001173 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001174}
1175
Marat Dukhanefc47b82019-11-18 09:25:38 -08001176TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5_with_qmin) {
1177 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001178 .batch_size(2)
1179 .input_size(27, 29)
1180 .kernel_size(5, 5)
1181 .padding_width(2)
1182 .groups(19)
1183 .qmin(128)
1184 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001185 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001186}
1187
Marat Dukhanefc47b82019-11-18 09:25:38 -08001188TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5_with_qmax) {
1189 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001190 .batch_size(2)
1191 .input_size(27, 29)
1192 .kernel_size(5, 5)
1193 .padding_width(2)
1194 .groups(19)
1195 .qmax(128)
1196 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001197 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001198}
1199
Marat Dukhanefc47b82019-11-18 09:25:38 -08001200TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5_without_bias) {
1201 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001202 .has_bias(false)
1203 .batch_size(2)
1204 .input_size(27, 29)
1205 .kernel_size(5, 5)
1206 .padding_width(2)
1207 .groups(19)
1208 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001209 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001210}
1211
1212/**************************** DWCONV 5x5 stride-2 path ****************************/
1213
Marat Dukhanefc47b82019-11-18 09:25:38 -08001214TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001215 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -08001216 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001217 .input_size(27, 29)
1218 .kernel_size(5, 5)
1219 .padding_width(2)
1220 .subsampling(2)
1221 .groups(19)
1222 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001223 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001224}
1225
Marat Dukhanefc47b82019-11-18 09:25:38 -08001226TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001227 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -08001228 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001229 .input_size(27, 29)
1230 .kernel_size(5, 5)
1231 .padding_width(2)
1232 .subsampling(2)
1233 .groups(19)
1234 .sparsity(1.0f)
1235 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001236 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001237}
1238
Marat Dukhanefc47b82019-11-18 09:25:38 -08001239TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001240 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001241 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001242 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001243 .input_size(input_width, 29)
1244 .kernel_size(5, 5)
1245 .padding_width(2)
1246 .subsampling(2)
1247 .groups(19)
1248 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001249 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001250 }
1251}
1252
Marat Dukhanefc47b82019-11-18 09:25:38 -08001253TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001254 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001255 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001256 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001257 .input_size(27, input_height)
1258 .kernel_size(5, 5)
1259 .padding_width(2)
1260 .subsampling(2)
1261 .groups(19)
1262 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001263 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001264 }
1265}
1266
Marat Dukhanefc47b82019-11-18 09:25:38 -08001267TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2_varying_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001268 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001269 for (size_t channels = 1; channels <= 16; channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001270 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001271 .input_size(27, 29)
1272 .kernel_size(5, 5)
1273 .padding_width(2)
1274 .subsampling(2)
1275 .groups(channels)
1276 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001277 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001278 }
1279}
1280
Marat Dukhanefc47b82019-11-18 09:25:38 -08001281TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2_with_qmin) {
1282 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001283 .input_size(27, 29)
1284 .kernel_size(5, 5)
1285 .padding_width(2)
1286 .subsampling(2)
1287 .groups(19)
1288 .qmin(128)
1289 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001290 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001291}
1292
Marat Dukhanefc47b82019-11-18 09:25:38 -08001293TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2_with_qmax) {
1294 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001295 .input_size(27, 29)
1296 .kernel_size(5, 5)
1297 .padding_width(2)
1298 .subsampling(2)
1299 .groups(19)
1300 .qmax(128)
1301 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001302 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001303}
1304
Marat Dukhanefc47b82019-11-18 09:25:38 -08001305TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2_without_bias) {
1306 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001307 .has_bias(false)
1308 .input_size(27, 29)
1309 .kernel_size(5, 5)
1310 .padding_width(2)
1311 .subsampling(2)
1312 .groups(19)
1313 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001314 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001315}
1316
1317/**************************** DWCONV 5x5 stride-2 path, batched ****************************/
1318
Marat Dukhanefc47b82019-11-18 09:25:38 -08001319TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001320 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -08001321 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001322 .batch_size(2)
1323 .input_size(27, 29)
1324 .kernel_size(5, 5)
1325 .padding_width(2)
1326 .subsampling(2)
1327 .groups(19)
1328 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001329 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001330}
1331
Marat Dukhanefc47b82019-11-18 09:25:38 -08001332TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2_zero_weights) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001333 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanefc47b82019-11-18 09:25:38 -08001334 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001335 .batch_size(2)
1336 .input_size(27, 29)
1337 .kernel_size(5, 5)
1338 .padding_width(2)
1339 .subsampling(2)
1340 .groups(19)
1341 .sparsity(1.0f)
1342 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001343 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001344}
1345
Marat Dukhanefc47b82019-11-18 09:25:38 -08001346TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2_varying_input_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001347 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001348 for (size_t input_width = 25; input_width <= 31; input_width++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001349 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001350 .batch_size(2)
1351 .input_size(input_width, 29)
1352 .kernel_size(5, 5)
1353 .padding_width(2)
1354 .subsampling(2)
1355 .groups(19)
1356 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001357 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001358 }
1359}
1360
Marat Dukhanefc47b82019-11-18 09:25:38 -08001361TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2_varying_input_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001362 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001363 for (size_t input_height = 27; input_height <= 33; input_height++) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001364 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001365 .batch_size(2)
1366 .input_size(27, input_height)
1367 .kernel_size(5, 5)
1368 .padding_width(2)
1369 .subsampling(2)
1370 .groups(19)
1371 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001372 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001373 }
1374}
1375
Marat Dukhanefc47b82019-11-18 09:25:38 -08001376TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2_varying_channels) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001377 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhana99918a2019-11-15 14:40:12 -08001378 for (size_t channels = 1; channels <= 16; channels *= 4) {
Marat Dukhanefc47b82019-11-18 09:25:38 -08001379 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001380 .batch_size(2)
1381 .input_size(27, 29)
1382 .kernel_size(5, 5)
1383 .padding_width(2)
1384 .subsampling(2)
1385 .groups(channels)
1386 .iterations(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001387 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001388 }
1389}
1390
Marat Dukhanefc47b82019-11-18 09:25:38 -08001391TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2_with_input_stride) {
1392 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001393 .batch_size(2)
1394 .input_size(27, 29)
1395 .kernel_size(5, 5)
1396 .padding_width(2)
1397 .subsampling(2)
1398 .input_batch_stride(14879)
1399 .groups(19)
1400 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001401 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001402}
1403
Marat Dukhanefc47b82019-11-18 09:25:38 -08001404TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2_with_output_stride) {
1405 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001406 .batch_size(2)
1407 .input_size(27, 29)
1408 .kernel_size(5, 5)
1409 .padding_width(2)
1410 .subsampling(2)
1411 .output_batch_stride(13781)
1412 .groups(19)
1413 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001414 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001415}
1416
Marat Dukhanefc47b82019-11-18 09:25:38 -08001417TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2_with_qmin) {
1418 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001419 .batch_size(2)
1420 .input_size(27, 29)
1421 .kernel_size(5, 5)
1422 .padding_width(2)
1423 .subsampling(2)
1424 .groups(19)
1425 .qmin(128)
1426 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001427 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001428}
1429
Marat Dukhanefc47b82019-11-18 09:25:38 -08001430TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2_with_qmax) {
1431 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001432 .batch_size(2)
1433 .input_size(27, 29)
1434 .kernel_size(5, 5)
1435 .padding_width(2)
1436 .subsampling(2)
1437 .groups(19)
1438 .qmax(128)
1439 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001440 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001441}
1442
Marat Dukhanefc47b82019-11-18 09:25:38 -08001443TEST(CONVOLUTION_NHWC_F32, batched_depthwise_5x5s2_without_bias) {
1444 ConvolutionOperatorTester()
Marat Dukhana99918a2019-11-15 14:40:12 -08001445 .has_bias(false)
1446 .batch_size(2)
1447 .input_size(27, 29)
1448 .kernel_size(5, 5)
1449 .padding_width(2)
1450 .subsampling(2)
1451 .groups(19)
1452 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001453 .TestNCHWxF32();
Marat Dukhana99918a2019-11-15 14:40:12 -08001454}