blob: db74927ed98057a51d6755f521f92939f126c280 [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
Marat Dukhanef61d022020-06-19 13:54:49 -07009#include <algorithm>
10#include <cstddef>
11#include <cstdint>
XNNPACK Teamb455b122019-09-27 18:10:33 -070012
Marat Dukhanef61d022020-06-19 13:54:49 -070013#include <gtest/gtest.h>
Frank Barchardaf4dad42020-06-19 11:59:18 -070014
XNNPACK Teamb455b122019-09-27 18:10:33 -070015#include "global-average-pooling-operator-tester.h"
16
17#include <xnnpack/params.h>
18
Marat Dukhan08b7a972020-07-14 18:17:29 -070019TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_small_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080020 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -070021 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -070022 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -070023 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070024 GlobalAveragePoolingOperatorTester()
25 .batch_size(1)
26 .width(width)
27 .channels(channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -070028 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070029 }
30 }
31}
32
Marat Dukhan08b7a972020-07-14 18:17:29 -070033TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_small_width_with_input_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080034 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -070035 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -070036 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -070037 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070038 GlobalAveragePoolingOperatorTester()
39 .batch_size(1)
40 .width(width)
41 .channels(channels)
42 .input_stride(5 * channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -070043 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070044 }
45 }
46}
47
Marat Dukhan08b7a972020-07-14 18:17:29 -070048TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_small_width_with_input_scale) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080049 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -070050 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -070051 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -070052 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070053 for (float input_scale = 0.01f; input_scale < 100.0f; input_scale *= 3.14159265f) {
54 GlobalAveragePoolingOperatorTester()
55 .batch_size(1)
56 .width(width)
57 .channels(channels)
58 .input_scale(input_scale)
Marat Dukhan08b7a972020-07-14 18:17:29 -070059 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070060 }
61 }
62 }
63}
64
Marat Dukhan08b7a972020-07-14 18:17:29 -070065TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_small_width_with_input_zero_point) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080066 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -070067 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -070068 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -070069 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070070 for (int32_t input_zero_point = 0; input_zero_point <= 255; input_zero_point += 51) {
71 GlobalAveragePoolingOperatorTester()
72 .batch_size(1)
73 .width(width)
74 .channels(channels)
75 .input_zero_point(uint8_t(input_zero_point))
Marat Dukhan08b7a972020-07-14 18:17:29 -070076 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070077 }
78 }
79 }
80}
81
Marat Dukhan08b7a972020-07-14 18:17:29 -070082TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_small_width_with_output_scale) {
Marat Dukhan04f03be2019-11-19 12:36:47 -080083 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -070084 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -070085 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -070086 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070087 for (float output_scale = 0.01f; output_scale < 100.0f; output_scale *= 3.14159265f) {
88 GlobalAveragePoolingOperatorTester()
89 .batch_size(1)
90 .width(width)
91 .channels(channels)
92 .output_scale(output_scale)
Marat Dukhan08b7a972020-07-14 18:17:29 -070093 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070094 }
95 }
96 }
97}
98
Marat Dukhan08b7a972020-07-14 18:17:29 -070099TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_small_width_with_output_zero_point) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800100 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700101 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700102 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700103 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700104 for (int32_t output_zero_point = 0; output_zero_point <= 255; output_zero_point += 51) {
105 GlobalAveragePoolingOperatorTester()
106 .batch_size(1)
107 .width(width)
108 .channels(channels)
109 .output_zero_point(uint8_t(output_zero_point))
Marat Dukhan08b7a972020-07-14 18:17:29 -0700110 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700111 }
112 }
113 }
114}
115
Marat Dukhan08b7a972020-07-14 18:17:29 -0700116TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_small_width_with_qmin) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800117 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700118 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700119 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700120 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700121 GlobalAveragePoolingOperatorTester()
122 .batch_size(1)
123 .width(width)
124 .channels(channels)
125 .qmin(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700126 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700127 }
128 }
129}
130
Marat Dukhan08b7a972020-07-14 18:17:29 -0700131TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_small_width_with_qmax) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800132 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700133 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700134 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700135 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700136 GlobalAveragePoolingOperatorTester()
137 .batch_size(1)
138 .width(width)
139 .channels(channels)
140 .qmax(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700141 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700142 }
143 }
144}
145
Marat Dukhan08b7a972020-07-14 18:17:29 -0700146TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_large_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800147 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700148 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700149 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700150 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700151 GlobalAveragePoolingOperatorTester()
152 .batch_size(1)
153 .width(width)
154 .channels(channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700155 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700156 }
157 }
158}
159
Marat Dukhan08b7a972020-07-14 18:17:29 -0700160TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_large_width_with_input_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800161 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700162 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700163 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700164 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700165 GlobalAveragePoolingOperatorTester()
166 .batch_size(1)
167 .width(width)
168 .channels(channels)
169 .input_stride(5 * channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700170 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700171 }
172 }
173}
174
Marat Dukhan08b7a972020-07-14 18:17:29 -0700175TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_large_width_with_input_scale) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800176 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700177 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700178 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700179 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700180 for (float input_scale = 0.01f; input_scale < 100.0f; input_scale *= 3.14159265f) {
181 GlobalAveragePoolingOperatorTester()
182 .batch_size(1)
183 .width(width)
184 .channels(channels)
185 .input_scale(input_scale)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700186 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700187 }
188 }
189 }
190}
191
Marat Dukhan08b7a972020-07-14 18:17:29 -0700192TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_large_width_with_input_zero_point) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800193 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700194 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700195 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700196 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700197 for (int32_t input_zero_point = 0; input_zero_point <= 255; input_zero_point += 51) {
198 GlobalAveragePoolingOperatorTester()
199 .batch_size(1)
200 .width(width)
201 .channels(channels)
202 .input_zero_point(uint8_t(input_zero_point))
Marat Dukhan08b7a972020-07-14 18:17:29 -0700203 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700204 }
205 }
206 }
207}
208
Marat Dukhan08b7a972020-07-14 18:17:29 -0700209TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_large_width_with_output_scale) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800210 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700211 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700212 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700213 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700214 for (float output_scale = 0.01f; output_scale < 100.0f; output_scale *= 3.14159265f) {
215 GlobalAveragePoolingOperatorTester()
216 .batch_size(1)
217 .width(width)
218 .channels(channels)
219 .output_scale(output_scale)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700220 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700221 }
222 }
223 }
224}
225
Marat Dukhan08b7a972020-07-14 18:17:29 -0700226TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_large_width_with_output_zero_point) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800227 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700228 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700229 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700230 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700231 for (int32_t output_zero_point = 0; output_zero_point <= 255; output_zero_point += 51) {
232 GlobalAveragePoolingOperatorTester()
233 .batch_size(1)
234 .width(width)
235 .channels(channels)
236 .output_zero_point(uint8_t(output_zero_point))
Marat Dukhan08b7a972020-07-14 18:17:29 -0700237 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700238 }
239 }
240 }
241}
242
Marat Dukhan08b7a972020-07-14 18:17:29 -0700243TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_large_width_with_qmin) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800244 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700245 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700246 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700247 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700248 GlobalAveragePoolingOperatorTester()
249 .batch_size(1)
250 .width(width)
251 .channels(channels)
252 .qmin(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700253 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700254 }
255 }
256}
257
Marat Dukhan08b7a972020-07-14 18:17:29 -0700258TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, unit_batch_large_width_with_qmax) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800259 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700260 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700261 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700262 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700263 GlobalAveragePoolingOperatorTester()
264 .batch_size(1)
265 .width(width)
266 .channels(channels)
267 .qmax(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700268 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700269 }
270 }
271}
272
Marat Dukhan08b7a972020-07-14 18:17:29 -0700273TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, small_batch_small_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800274 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700275 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700276 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700277 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700278 GlobalAveragePoolingOperatorTester()
279 .batch_size(3)
280 .width(width)
281 .channels(channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700282 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700283 }
284 }
285}
286
Marat Dukhan08b7a972020-07-14 18:17:29 -0700287TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, small_batch_small_width_with_input_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800288 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700289 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700290 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700291 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700292 GlobalAveragePoolingOperatorTester()
293 .batch_size(3)
294 .width(width)
295 .channels(channels)
296 .input_stride(5 * channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700297 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700298 }
299 }
300}
301
Marat Dukhan08b7a972020-07-14 18:17:29 -0700302TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, small_batch_small_width_with_output_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800303 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700304 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700305 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700306 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700307 GlobalAveragePoolingOperatorTester()
308 .batch_size(3)
309 .width(width)
310 .channels(channels)
311 .output_stride(5 * channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700312 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700313 }
314 }
315}
316
Marat Dukhan08b7a972020-07-14 18:17:29 -0700317TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, small_batch_large_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800318 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700319 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700320 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700321 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700322 GlobalAveragePoolingOperatorTester()
323 .batch_size(3)
324 .width(width)
325 .channels(channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700326 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700327 }
328 }
329}
330
Marat Dukhan08b7a972020-07-14 18:17:29 -0700331TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, small_batch_large_width_with_input_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800332 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700333 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700334 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700335 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700336 GlobalAveragePoolingOperatorTester()
337 .batch_size(3)
338 .width(width)
339 .channels(channels)
340 .input_stride(5 * channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700341 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700342 }
343 }
344}
345
Marat Dukhan08b7a972020-07-14 18:17:29 -0700346TEST(GLOBAL_AVERAGE_POOLING_NWC_QU8, small_batch_large_width_with_output_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800347 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhan08b7a972020-07-14 18:17:29 -0700348 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qu8.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700349 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700350 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700351 GlobalAveragePoolingOperatorTester()
352 .batch_size(3)
353 .width(width)
354 .channels(channels)
355 .output_stride(5 * channels)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700356 .TestNWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700357 }
358 }
359}
360
Marat Dukhan9e0b5392020-08-07 02:29:34 -0700361TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_small_width) {
362 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
363 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
364 for (size_t channels = 1; channels <= 100; channels += 15) {
365 for (size_t width = 1; width <= spatial_tile; width++) {
366 GlobalAveragePoolingOperatorTester()
367 .batch_size(1)
368 .width(width)
369 .channels(channels)
370 .TestNWCxQS8();
371 }
372 }
373}
374
375TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_small_width_with_input_stride) {
376 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
377 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
378 for (size_t channels = 1; channels <= 100; channels += 15) {
379 for (size_t width = 1; width <= spatial_tile; width++) {
380 GlobalAveragePoolingOperatorTester()
381 .batch_size(1)
382 .width(width)
383 .channels(channels)
384 .input_stride(5 * channels)
385 .TestNWCxQS8();
386 }
387 }
388}
389
390TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_small_width_with_input_scale) {
391 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
392 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
393 for (size_t channels = 1; channels <= 100; channels += 15) {
394 for (size_t width = 1; width <= spatial_tile; width++) {
395 for (float input_scale = 0.01f; input_scale < 100.0f; input_scale *= 3.14159265f) {
396 GlobalAveragePoolingOperatorTester()
397 .batch_size(1)
398 .width(width)
399 .channels(channels)
400 .input_scale(input_scale)
401 .TestNWCxQS8();
402 }
403 }
404 }
405}
406
407TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_small_width_with_input_zero_point) {
408 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
409 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
410 for (size_t channels = 1; channels <= 100; channels += 15) {
411 for (size_t width = 1; width <= spatial_tile; width++) {
412 for (int32_t input_zero_point = 0; input_zero_point <= 255; input_zero_point += 51) {
413 GlobalAveragePoolingOperatorTester()
414 .batch_size(1)
415 .width(width)
416 .channels(channels)
417 .input_zero_point(uint8_t(input_zero_point))
418 .TestNWCxQS8();
419 }
420 }
421 }
422}
423
424TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_small_width_with_output_scale) {
425 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
426 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
427 for (size_t channels = 1; channels <= 100; channels += 15) {
428 for (size_t width = 1; width <= spatial_tile; width++) {
429 for (float output_scale = 0.01f; output_scale < 100.0f; output_scale *= 3.14159265f) {
430 GlobalAveragePoolingOperatorTester()
431 .batch_size(1)
432 .width(width)
433 .channels(channels)
434 .output_scale(output_scale)
435 .TestNWCxQS8();
436 }
437 }
438 }
439}
440
441TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_small_width_with_output_zero_point) {
442 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
443 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
444 for (size_t channels = 1; channels <= 100; channels += 15) {
445 for (size_t width = 1; width <= spatial_tile; width++) {
446 for (int32_t output_zero_point = 0; output_zero_point <= 255; output_zero_point += 51) {
447 GlobalAveragePoolingOperatorTester()
448 .batch_size(1)
449 .width(width)
450 .channels(channels)
451 .output_zero_point(uint8_t(output_zero_point))
452 .TestNWCxQS8();
453 }
454 }
455 }
456}
457
458TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_small_width_with_qmin) {
459 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
460 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
461 for (size_t channels = 1; channels <= 100; channels += 15) {
462 for (size_t width = 1; width <= spatial_tile; width++) {
463 GlobalAveragePoolingOperatorTester()
464 .batch_size(1)
465 .width(width)
466 .channels(channels)
467 .qmin(128)
468 .TestNWCxQS8();
469 }
470 }
471}
472
473TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_small_width_with_qmax) {
474 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
475 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
476 for (size_t channels = 1; channels <= 100; channels += 15) {
477 for (size_t width = 1; width <= spatial_tile; width++) {
478 GlobalAveragePoolingOperatorTester()
479 .batch_size(1)
480 .width(width)
481 .channels(channels)
482 .qmax(128)
483 .TestNWCxQS8();
484 }
485 }
486}
487
488TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_large_width) {
489 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
490 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
491 for (size_t channels = 1; channels <= 100; channels += 15) {
492 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
493 GlobalAveragePoolingOperatorTester()
494 .batch_size(1)
495 .width(width)
496 .channels(channels)
497 .TestNWCxQS8();
498 }
499 }
500}
501
502TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_large_width_with_input_stride) {
503 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
504 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
505 for (size_t channels = 1; channels <= 100; channels += 15) {
506 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
507 GlobalAveragePoolingOperatorTester()
508 .batch_size(1)
509 .width(width)
510 .channels(channels)
511 .input_stride(5 * channels)
512 .TestNWCxQS8();
513 }
514 }
515}
516
517TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_large_width_with_input_scale) {
518 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
519 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
520 for (size_t channels = 1; channels <= 100; channels += 15) {
521 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
522 for (float input_scale = 0.01f; input_scale < 100.0f; input_scale *= 3.14159265f) {
523 GlobalAveragePoolingOperatorTester()
524 .batch_size(1)
525 .width(width)
526 .channels(channels)
527 .input_scale(input_scale)
528 .TestNWCxQS8();
529 }
530 }
531 }
532}
533
534TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_large_width_with_input_zero_point) {
535 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
536 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
537 for (size_t channels = 1; channels <= 100; channels += 15) {
538 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
539 for (int32_t input_zero_point = 0; input_zero_point <= 255; input_zero_point += 51) {
540 GlobalAveragePoolingOperatorTester()
541 .batch_size(1)
542 .width(width)
543 .channels(channels)
544 .input_zero_point(uint8_t(input_zero_point))
545 .TestNWCxQS8();
546 }
547 }
548 }
549}
550
551TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_large_width_with_output_scale) {
552 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
553 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
554 for (size_t channels = 1; channels <= 100; channels += 15) {
555 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
556 for (float output_scale = 0.01f; output_scale < 100.0f; output_scale *= 3.14159265f) {
557 GlobalAveragePoolingOperatorTester()
558 .batch_size(1)
559 .width(width)
560 .channels(channels)
561 .output_scale(output_scale)
562 .TestNWCxQS8();
563 }
564 }
565 }
566}
567
568TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_large_width_with_output_zero_point) {
569 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
570 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
571 for (size_t channels = 1; channels <= 100; channels += 15) {
572 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
573 for (int32_t output_zero_point = 0; output_zero_point <= 255; output_zero_point += 51) {
574 GlobalAveragePoolingOperatorTester()
575 .batch_size(1)
576 .width(width)
577 .channels(channels)
578 .output_zero_point(uint8_t(output_zero_point))
579 .TestNWCxQS8();
580 }
581 }
582 }
583}
584
585TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_large_width_with_qmin) {
586 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
587 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
588 for (size_t channels = 1; channels <= 100; channels += 15) {
589 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
590 GlobalAveragePoolingOperatorTester()
591 .batch_size(1)
592 .width(width)
593 .channels(channels)
594 .qmin(128)
595 .TestNWCxQS8();
596 }
597 }
598}
599
600TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, unit_batch_large_width_with_qmax) {
601 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
602 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
603 for (size_t channels = 1; channels <= 100; channels += 15) {
604 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
605 GlobalAveragePoolingOperatorTester()
606 .batch_size(1)
607 .width(width)
608 .channels(channels)
609 .qmax(128)
610 .TestNWCxQS8();
611 }
612 }
613}
614
615TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, small_batch_small_width) {
616 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
617 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
618 for (size_t channels = 1; channels <= 100; channels += 15) {
619 for (size_t width = 1; width <= spatial_tile; width++) {
620 GlobalAveragePoolingOperatorTester()
621 .batch_size(3)
622 .width(width)
623 .channels(channels)
624 .TestNWCxQS8();
625 }
626 }
627}
628
629TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, small_batch_small_width_with_input_stride) {
630 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
631 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
632 for (size_t channels = 1; channels <= 100; channels += 15) {
633 for (size_t width = 1; width <= spatial_tile; width++) {
634 GlobalAveragePoolingOperatorTester()
635 .batch_size(3)
636 .width(width)
637 .channels(channels)
638 .input_stride(5 * channels)
639 .TestNWCxQS8();
640 }
641 }
642}
643
644TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, small_batch_small_width_with_output_stride) {
645 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
646 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
647 for (size_t channels = 1; channels <= 100; channels += 15) {
648 for (size_t width = 1; width <= spatial_tile; width++) {
649 GlobalAveragePoolingOperatorTester()
650 .batch_size(3)
651 .width(width)
652 .channels(channels)
653 .output_stride(5 * channels)
654 .TestNWCxQS8();
655 }
656 }
657}
658
659TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, small_batch_large_width) {
660 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
661 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
662 for (size_t channels = 1; channels <= 100; channels += 15) {
663 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
664 GlobalAveragePoolingOperatorTester()
665 .batch_size(3)
666 .width(width)
667 .channels(channels)
668 .TestNWCxQS8();
669 }
670 }
671}
672
673TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, small_batch_large_width_with_input_stride) {
674 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
675 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
676 for (size_t channels = 1; channels <= 100; channels += 15) {
677 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
678 GlobalAveragePoolingOperatorTester()
679 .batch_size(3)
680 .width(width)
681 .channels(channels)
682 .input_stride(5 * channels)
683 .TestNWCxQS8();
684 }
685 }
686}
687
688TEST(GLOBAL_AVERAGE_POOLING_NWC_QS8, small_batch_large_width_with_output_stride) {
689 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
690 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.qs8.gavgpool.mr, 1);
691 for (size_t channels = 1; channels <= 100; channels += 15) {
692 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
693 GlobalAveragePoolingOperatorTester()
694 .batch_size(3)
695 .width(width)
696 .channels(channels)
697 .output_stride(5 * channels)
698 .TestNWCxQS8();
699 }
700 }
701}
702
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700703TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, unit_batch_small_width) {
704 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700705 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700706 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700707 for (size_t width = 1; width <= spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700708 GlobalAveragePoolingOperatorTester()
709 .batch_size(1)
710 .width(width)
711 .channels(channels)
712 .TestNWCxF16();
713 }
714 }
715}
716
717TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, unit_batch_small_width_with_input_stride) {
718 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700719 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700720 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700721 for (size_t width = 1; width <= spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700722 GlobalAveragePoolingOperatorTester()
723 .batch_size(1)
724 .width(width)
725 .channels(channels)
726 .input_stride(5 * channels)
727 .TestNWCxF16();
728 }
729 }
730}
731
732TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, unit_batch_small_width_with_qmin) {
733 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700734 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700735 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700736 for (size_t width = 1; width <= spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700737 GlobalAveragePoolingOperatorTester()
738 .batch_size(1)
739 .width(width)
740 .channels(channels)
741 .qmin(128)
742 .TestNWCxF16();
743 }
744 }
745}
746
747TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, unit_batch_small_width_with_qmax) {
748 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700749 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700750 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700751 for (size_t width = 1; width <= spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700752 GlobalAveragePoolingOperatorTester()
753 .batch_size(1)
754 .width(width)
755 .channels(channels)
756 .qmax(128)
757 .TestNWCxF16();
758 }
759 }
760}
761
762TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, unit_batch_large_width) {
763 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700764 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700765 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700766 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700767 GlobalAveragePoolingOperatorTester()
768 .batch_size(1)
769 .width(width)
770 .channels(channels)
771 .TestNWCxF16();
772 }
773 }
774}
775
776TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, unit_batch_large_width_with_input_stride) {
777 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700778 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700779 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700780 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700781 GlobalAveragePoolingOperatorTester()
782 .batch_size(1)
783 .width(width)
784 .channels(channels)
785 .input_stride(5 * channels)
786 .TestNWCxF16();
787 }
788 }
789}
790
791TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, unit_batch_large_width_with_qmin) {
792 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700793 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700794 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700795 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700796 GlobalAveragePoolingOperatorTester()
797 .batch_size(1)
798 .width(width)
799 .channels(channels)
800 .qmin(128)
801 .TestNWCxF16();
802 }
803 }
804}
805
806TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, unit_batch_large_width_with_qmax) {
807 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700808 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700809 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700810 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700811 GlobalAveragePoolingOperatorTester()
812 .batch_size(1)
813 .width(width)
814 .channels(channels)
815 .qmax(128)
816 .TestNWCxF16();
817 }
818 }
819}
820
821TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, small_batch_small_width) {
822 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700823 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700824 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700825 for (size_t width = 1; width <= spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700826 GlobalAveragePoolingOperatorTester()
827 .batch_size(3)
828 .width(width)
829 .channels(channels)
830 .TestNWCxF16();
831 }
832 }
833}
834
835TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, small_batch_small_width_with_input_stride) {
836 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700837 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700838 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700839 for (size_t width = 1; width <= spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700840 GlobalAveragePoolingOperatorTester()
841 .batch_size(3)
842 .width(width)
843 .channels(channels)
844 .input_stride(5 * channels)
845 .TestNWCxF16();
846 }
847 }
848}
849
850TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, small_batch_small_width_with_output_stride) {
851 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700852 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700853 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700854 for (size_t width = 1; width <= spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700855 GlobalAveragePoolingOperatorTester()
856 .batch_size(3)
857 .width(width)
858 .channels(channels)
859 .output_stride(5 * channels)
860 .TestNWCxF16();
861 }
862 }
863}
864
865TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, small_batch_large_width) {
866 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700867 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700868 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700869 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700870 GlobalAveragePoolingOperatorTester()
871 .batch_size(3)
872 .width(width)
873 .channels(channels)
874 .TestNWCxF16();
875 }
876 }
877}
878
879TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, small_batch_large_width_with_input_stride) {
880 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700881 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700882 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700883 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700884 GlobalAveragePoolingOperatorTester()
885 .batch_size(3)
886 .width(width)
887 .channels(channels)
888 .input_stride(5 * channels)
889 .TestNWCxF16();
890 }
891 }
892}
893
894TEST(GLOBAL_AVERAGE_POOLING_NWC_F16, small_batch_large_width_with_output_stride) {
895 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700896 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f16.gavgpool.mr, 1);
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700897 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700898 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700899 GlobalAveragePoolingOperatorTester()
900 .batch_size(3)
901 .width(width)
902 .channels(channels)
903 .output_stride(5 * channels)
904 .TestNWCxF16();
905 }
906 }
907}
Frank Barchard7e2cbb02020-06-12 01:22:13 -0700908
Marat Dukhanefc47b82019-11-18 09:25:38 -0800909TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, unit_batch_small_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800910 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700911 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700912 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700913 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700914 GlobalAveragePoolingOperatorTester()
915 .batch_size(1)
916 .width(width)
917 .channels(channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800918 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700919 }
920 }
921}
922
Marat Dukhanefc47b82019-11-18 09:25:38 -0800923TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, unit_batch_small_width_with_input_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800924 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700925 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700926 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700927 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700928 GlobalAveragePoolingOperatorTester()
929 .batch_size(1)
930 .width(width)
931 .channels(channels)
932 .input_stride(5 * channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800933 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700934 }
935 }
936}
937
Marat Dukhanefc47b82019-11-18 09:25:38 -0800938TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, unit_batch_small_width_with_qmin) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800939 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700940 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700941 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700942 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700943 GlobalAveragePoolingOperatorTester()
944 .batch_size(1)
945 .width(width)
946 .channels(channels)
947 .qmin(128)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800948 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700949 }
950 }
951}
952
Marat Dukhanefc47b82019-11-18 09:25:38 -0800953TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, unit_batch_small_width_with_qmax) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800954 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700955 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700956 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700957 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700958 GlobalAveragePoolingOperatorTester()
959 .batch_size(1)
960 .width(width)
961 .channels(channels)
962 .qmax(128)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800963 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700964 }
965 }
966}
967
Marat Dukhanefc47b82019-11-18 09:25:38 -0800968TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, unit_batch_large_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800969 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700970 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700971 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700972 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700973 GlobalAveragePoolingOperatorTester()
974 .batch_size(1)
975 .width(width)
976 .channels(channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800977 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700978 }
979 }
980}
981
Marat Dukhanefc47b82019-11-18 09:25:38 -0800982TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, unit_batch_large_width_with_input_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800983 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700984 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700985 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -0700986 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700987 GlobalAveragePoolingOperatorTester()
988 .batch_size(1)
989 .width(width)
990 .channels(channels)
991 .input_stride(5 * channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -0800992 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700993 }
994 }
995}
996
Marat Dukhanefc47b82019-11-18 09:25:38 -0800997TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, unit_batch_large_width_with_qmin) {
Marat Dukhan04f03be2019-11-19 12:36:47 -0800998 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -0700999 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001000 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -07001001 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001002 GlobalAveragePoolingOperatorTester()
1003 .batch_size(1)
1004 .width(width)
1005 .channels(channels)
1006 .qmin(128)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001007 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07001008 }
1009 }
1010}
1011
Marat Dukhanefc47b82019-11-18 09:25:38 -08001012TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, unit_batch_large_width_with_qmax) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001013 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -07001014 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001015 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -07001016 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001017 GlobalAveragePoolingOperatorTester()
1018 .batch_size(1)
1019 .width(width)
1020 .channels(channels)
1021 .qmax(128)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001022 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07001023 }
1024 }
1025}
1026
Marat Dukhanefc47b82019-11-18 09:25:38 -08001027TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, small_batch_small_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001028 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -07001029 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001030 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -07001031 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001032 GlobalAveragePoolingOperatorTester()
1033 .batch_size(3)
1034 .width(width)
1035 .channels(channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001036 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07001037 }
1038 }
1039}
1040
Marat Dukhanefc47b82019-11-18 09:25:38 -08001041TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, small_batch_small_width_with_input_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001042 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -07001043 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001044 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -07001045 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001046 GlobalAveragePoolingOperatorTester()
1047 .batch_size(3)
1048 .width(width)
1049 .channels(channels)
1050 .input_stride(5 * channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001051 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07001052 }
1053 }
1054}
1055
Marat Dukhanefc47b82019-11-18 09:25:38 -08001056TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, small_batch_small_width_with_output_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001057 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -07001058 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001059 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -07001060 for (size_t width = 1; width <= spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001061 GlobalAveragePoolingOperatorTester()
1062 .batch_size(3)
1063 .width(width)
1064 .channels(channels)
1065 .output_stride(5 * channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001066 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07001067 }
1068 }
1069}
1070
Marat Dukhanefc47b82019-11-18 09:25:38 -08001071TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, small_batch_large_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001072 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -07001073 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001074 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -07001075 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001076 GlobalAveragePoolingOperatorTester()
1077 .batch_size(3)
1078 .width(width)
1079 .channels(channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001080 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07001081 }
1082 }
1083}
1084
Marat Dukhanefc47b82019-11-18 09:25:38 -08001085TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, small_batch_large_width_with_input_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001086 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -07001087 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001088 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -07001089 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001090 GlobalAveragePoolingOperatorTester()
1091 .batch_size(3)
1092 .width(width)
1093 .channels(channels)
1094 .input_stride(5 * channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001095 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07001096 }
1097 }
1098}
1099
Marat Dukhanefc47b82019-11-18 09:25:38 -08001100TEST(GLOBAL_AVERAGE_POOLING_NWC_F32, small_batch_large_width_with_output_stride) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08001101 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
Marat Dukhanef61d022020-06-19 13:54:49 -07001102 const uint32_t spatial_tile = std::max<uint32_t>(xnn_params.f32.gavgpool.mr, 1);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001103 for (size_t channels = 1; channels <= 100; channels += 15) {
Marat Dukhanef61d022020-06-19 13:54:49 -07001104 for (size_t width = spatial_tile; width <= 4 * spatial_tile; width++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001105 GlobalAveragePoolingOperatorTester()
1106 .batch_size(3)
1107 .width(width)
1108 .channels(channels)
1109 .output_stride(5 * channels)
Marat Dukhanefc47b82019-11-18 09:25:38 -08001110 .TestNWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07001111 }
1112 }
1113}