blob: 293b166194d7ee8a602df294c5ff004330886c0d [file] [log] [blame]
XNNPACK Teamb455b122019-09-27 18:10:33 -07001// Copyright (c) Facebook, Inc. and its affiliates.
2// All rights reserved.
3//
4// Copyright 2019 Google LLC
5//
6// This source code is licensed under the BSD-style license found in the
7// LICENSE file in the root directory of this source tree.
8//
9// Auto-generated file. Do not edit!
Marat Dukhan08b7a972020-07-14 18:17:29 -070010// Specification: test/qu8-igemm-minmax.yaml
XNNPACK Teamb455b122019-09-27 18:10:33 -070011// Generator: tools/generate-gemm-test.py
12
13
XNNPACK Teamb455b122019-09-27 18:10:33 -070014#include <gtest/gtest.h>
15
Marat Dukhan1dadbf72019-10-01 10:46:20 -070016#include <xnnpack/common.h>
17#include <xnnpack/isa-checks.h>
18
XNNPACK Teamb455b122019-09-27 18:10:33 -070019#include <xnnpack/gemm.h>
20#include <xnnpack/igemm.h>
21#include <xnnpack/ppmm.h>
XNNPACK Teamb455b122019-09-27 18:10:33 -070022#include "gemm-microkernel-tester.h"
23
24
Marat Dukhan1dadbf72019-10-01 10:46:20 -070025#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhan08b7a972020-07-14 18:17:29 -070026 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_eq_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070027 TEST_REQUIRES_ARM_NEON;
28 GemmMicrokernelTester()
29 .mr(4)
30 .nr(8)
31 .kr(1)
32 .sr(1)
33 .m(4)
34 .n(8)
35 .k(8)
Marat Dukhan08b7a972020-07-14 18:17:29 -070036 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -070037 }
38
Marat Dukhan08b7a972020-07-14 18:17:29 -070039 TEST(QU8_IGEMM_MINMAX_4X8__NEON, strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070040 TEST_REQUIRES_ARM_NEON;
41 GemmMicrokernelTester()
42 .mr(4)
43 .nr(8)
44 .kr(1)
45 .sr(1)
46 .m(4)
47 .n(8)
48 .k(8)
49 .cn_stride(11)
Marat Dukhan08b7a972020-07-14 18:17:29 -070050 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -070051 }
52
Marat Dukhan08b7a972020-07-14 18:17:29 -070053 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_eq_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070054 TEST_REQUIRES_ARM_NEON;
55 for (uint32_t m = 1; m <= 4; m++) {
56 for (uint32_t n = 1; n <= 8; n++) {
57 GemmMicrokernelTester()
58 .mr(4)
59 .nr(8)
60 .kr(1)
61 .sr(1)
62 .m(m)
63 .n(n)
64 .k(8)
65 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -070066 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -070067 }
68 }
69 }
70
Marat Dukhan08b7a972020-07-14 18:17:29 -070071 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_eq_8_subtile_m) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070072 TEST_REQUIRES_ARM_NEON;
73 for (uint32_t m = 1; m <= 4; m++) {
74 GemmMicrokernelTester()
75 .mr(4)
76 .nr(8)
77 .kr(1)
78 .sr(1)
79 .m(m)
80 .n(8)
81 .k(8)
82 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -070083 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -070084 }
85 }
86
Marat Dukhan08b7a972020-07-14 18:17:29 -070087 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_eq_8_subtile_n) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070088 TEST_REQUIRES_ARM_NEON;
89 for (uint32_t n = 1; n <= 8; n++) {
90 GemmMicrokernelTester()
91 .mr(4)
92 .nr(8)
93 .kr(1)
94 .sr(1)
95 .m(4)
96 .n(n)
97 .k(8)
98 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -070099 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700100 }
101 }
102
Marat Dukhan08b7a972020-07-14 18:17:29 -0700103 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_lt_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700104 TEST_REQUIRES_ARM_NEON;
105 for (size_t k = 1; k < 8; k++) {
106 GemmMicrokernelTester()
107 .mr(4)
108 .nr(8)
109 .kr(1)
110 .sr(1)
111 .m(4)
112 .n(8)
113 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700114 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700115 }
116 }
117
Marat Dukhan08b7a972020-07-14 18:17:29 -0700118 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_lt_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700119 TEST_REQUIRES_ARM_NEON;
120 for (size_t k = 1; k < 8; k++) {
121 for (uint32_t m = 1; m <= 4; m++) {
122 for (uint32_t n = 1; n <= 8; n++) {
123 GemmMicrokernelTester()
124 .mr(4)
125 .nr(8)
126 .kr(1)
127 .sr(1)
128 .m(m)
129 .n(n)
130 .k(k)
131 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700132 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700133 }
134 }
135 }
136 }
137
Marat Dukhan08b7a972020-07-14 18:17:29 -0700138 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_gt_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700139 TEST_REQUIRES_ARM_NEON;
140 for (size_t k = 9; k < 16; k++) {
141 GemmMicrokernelTester()
142 .mr(4)
143 .nr(8)
144 .kr(1)
145 .sr(1)
146 .m(4)
147 .n(8)
148 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700149 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700150 }
151 }
152
Marat Dukhan08b7a972020-07-14 18:17:29 -0700153 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_gt_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700154 TEST_REQUIRES_ARM_NEON;
155 for (size_t k = 9; k < 16; k++) {
156 for (uint32_t m = 1; m <= 4; m++) {
157 for (uint32_t n = 1; n <= 8; n++) {
158 GemmMicrokernelTester()
159 .mr(4)
160 .nr(8)
161 .kr(1)
162 .sr(1)
163 .m(m)
164 .n(n)
165 .k(k)
166 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700167 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700168 }
169 }
170 }
171 }
172
Marat Dukhan08b7a972020-07-14 18:17:29 -0700173 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_div_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700174 TEST_REQUIRES_ARM_NEON;
175 for (size_t k = 16; k <= 80; k += 8) {
176 GemmMicrokernelTester()
177 .mr(4)
178 .nr(8)
179 .kr(1)
180 .sr(1)
181 .m(4)
182 .n(8)
183 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700184 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700185 }
186 }
187
Marat Dukhan08b7a972020-07-14 18:17:29 -0700188 TEST(QU8_IGEMM_MINMAX_4X8__NEON, k_div_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700189 TEST_REQUIRES_ARM_NEON;
190 for (size_t k = 16; k <= 80; k += 8) {
191 for (uint32_t m = 1; m <= 4; m++) {
192 for (uint32_t n = 1; n <= 8; n++) {
193 GemmMicrokernelTester()
194 .mr(4)
195 .nr(8)
196 .kr(1)
197 .sr(1)
198 .m(m)
199 .n(n)
200 .k(k)
201 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700202 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700203 }
204 }
205 }
206 }
207
Marat Dukhan08b7a972020-07-14 18:17:29 -0700208 TEST(QU8_IGEMM_MINMAX_4X8__NEON, n_gt_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700209 TEST_REQUIRES_ARM_NEON;
210 for (uint32_t n = 9; n < 16; n++) {
211 for (size_t k = 1; k <= 40; k += 9) {
212 GemmMicrokernelTester()
213 .mr(4)
214 .nr(8)
215 .kr(1)
216 .sr(1)
217 .m(4)
218 .n(8)
219 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700220 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700221 }
222 }
223 }
224
Marat Dukhan08b7a972020-07-14 18:17:29 -0700225 TEST(QU8_IGEMM_MINMAX_4X8__NEON, n_gt_8_strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700226 TEST_REQUIRES_ARM_NEON;
227 for (uint32_t n = 9; n < 16; n++) {
228 for (size_t k = 1; k <= 40; k += 9) {
229 GemmMicrokernelTester()
230 .mr(4)
231 .nr(8)
232 .kr(1)
233 .sr(1)
234 .m(4)
235 .n(8)
236 .k(k)
237 .cn_stride(11)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700238 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700239 }
240 }
241 }
242
Marat Dukhan08b7a972020-07-14 18:17:29 -0700243 TEST(QU8_IGEMM_MINMAX_4X8__NEON, n_gt_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700244 TEST_REQUIRES_ARM_NEON;
245 for (uint32_t n = 9; n < 16; n++) {
246 for (size_t k = 1; k <= 40; k += 9) {
247 for (uint32_t m = 1; m <= 4; m++) {
248 GemmMicrokernelTester()
249 .mr(4)
250 .nr(8)
251 .kr(1)
252 .sr(1)
253 .m(m)
254 .n(n)
255 .k(k)
256 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700257 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700258 }
259 }
260 }
261 }
262
Marat Dukhan08b7a972020-07-14 18:17:29 -0700263 TEST(QU8_IGEMM_MINMAX_4X8__NEON, n_div_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700264 TEST_REQUIRES_ARM_NEON;
265 for (uint32_t n = 16; n <= 24; n += 8) {
266 for (size_t k = 1; k <= 40; k += 9) {
267 GemmMicrokernelTester()
268 .mr(4)
269 .nr(8)
270 .kr(1)
271 .sr(1)
272 .m(4)
273 .n(8)
274 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700275 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700276 }
277 }
278 }
279
Marat Dukhan08b7a972020-07-14 18:17:29 -0700280 TEST(QU8_IGEMM_MINMAX_4X8__NEON, n_div_8_strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700281 TEST_REQUIRES_ARM_NEON;
282 for (uint32_t n = 16; n <= 24; n += 8) {
283 for (size_t k = 1; k <= 40; k += 9) {
284 GemmMicrokernelTester()
285 .mr(4)
286 .nr(8)
287 .kr(1)
288 .sr(1)
289 .m(4)
290 .n(n)
291 .k(k)
292 .cn_stride(11)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700293 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700294 }
295 }
296 }
297
Marat Dukhan08b7a972020-07-14 18:17:29 -0700298 TEST(QU8_IGEMM_MINMAX_4X8__NEON, n_div_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700299 TEST_REQUIRES_ARM_NEON;
300 for (uint32_t n = 16; n <= 24; n += 8) {
301 for (size_t k = 1; k <= 40; k += 9) {
302 for (uint32_t m = 1; m <= 4; m++) {
303 GemmMicrokernelTester()
304 .mr(4)
305 .nr(8)
306 .kr(1)
307 .sr(1)
308 .m(m)
309 .n(n)
310 .k(k)
311 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700312 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700313 }
314 }
315 }
316 }
317
Marat Dukhan08b7a972020-07-14 18:17:29 -0700318 TEST(QU8_IGEMM_MINMAX_4X8__NEON, small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700319 TEST_REQUIRES_ARM_NEON;
320 for (size_t k = 1; k <= 40; k += 9) {
321 GemmMicrokernelTester()
322 .mr(4)
323 .nr(8)
324 .kr(1)
325 .sr(1)
326 .m(4)
327 .n(8)
328 .k(k)
329 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700330 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700331 }
332 }
333
Marat Dukhan08b7a972020-07-14 18:17:29 -0700334 TEST(QU8_IGEMM_MINMAX_4X8__NEON, small_kernel_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700335 TEST_REQUIRES_ARM_NEON;
336 for (size_t k = 1; k <= 40; k += 9) {
337 for (uint32_t m = 1; m <= 4; m++) {
338 for (uint32_t n = 1; n <= 8; n++) {
339 GemmMicrokernelTester()
340 .mr(4)
341 .nr(8)
342 .kr(1)
343 .sr(1)
344 .m(m)
345 .n(n)
346 .k(k)
347 .ks(3)
348 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700349 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700350 }
351 }
352 }
353 }
354
Marat Dukhan08b7a972020-07-14 18:17:29 -0700355 TEST(QU8_IGEMM_MINMAX_4X8__NEON, n_gt_8_small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700356 TEST_REQUIRES_ARM_NEON;
357 for (uint32_t n = 9; n < 16; n++) {
358 for (size_t k = 1; k <= 40; k += 9) {
359 GemmMicrokernelTester()
360 .mr(4)
361 .nr(8)
362 .kr(1)
363 .sr(1)
364 .m(4)
365 .n(8)
366 .k(k)
367 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700368 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700369 }
370 }
371 }
372
Marat Dukhan08b7a972020-07-14 18:17:29 -0700373 TEST(QU8_IGEMM_MINMAX_4X8__NEON, n_div_8_small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700374 TEST_REQUIRES_ARM_NEON;
375 for (uint32_t n = 16; n <= 24; n += 8) {
376 for (size_t k = 1; k <= 40; k += 9) {
377 GemmMicrokernelTester()
378 .mr(4)
379 .nr(8)
380 .kr(1)
381 .sr(1)
382 .m(4)
383 .n(8)
384 .k(k)
385 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700386 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700387 }
388 }
389 }
390
Marat Dukhan08b7a972020-07-14 18:17:29 -0700391 TEST(QU8_IGEMM_MINMAX_4X8__NEON, strided_cm_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700392 TEST_REQUIRES_ARM_NEON;
393 for (size_t k = 1; k <= 40; k += 9) {
394 for (uint32_t m = 1; m <= 4; m++) {
395 for (uint32_t n = 1; n <= 8; n++) {
396 GemmMicrokernelTester()
397 .mr(4)
398 .nr(8)
399 .kr(1)
400 .sr(1)
401 .m(m)
402 .n(n)
403 .k(k)
404 .cm_stride(11)
405 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700406 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700407 }
408 }
409 }
410 }
411
Marat Dukhan08b7a972020-07-14 18:17:29 -0700412 TEST(QU8_IGEMM_MINMAX_4X8__NEON, a_offset) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700413 TEST_REQUIRES_ARM_NEON;
414 for (size_t k = 1; k <= 40; k += 9) {
415 GemmMicrokernelTester()
416 .mr(4)
417 .nr(8)
418 .kr(1)
419 .sr(1)
420 .m(4)
421 .n(8)
422 .k(k)
423 .ks(3)
424 .a_offset(163)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700425 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700426 }
427 }
428
Marat Dukhan08b7a972020-07-14 18:17:29 -0700429 TEST(QU8_IGEMM_MINMAX_4X8__NEON, zero) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700430 TEST_REQUIRES_ARM_NEON;
431 for (uint32_t mz = 0; mz < 4; mz++) {
432 for (size_t k = 1; k <= 40; k += 9) {
433 GemmMicrokernelTester()
434 .mr(4)
435 .nr(8)
436 .kr(1)
437 .sr(1)
438 .m(4)
439 .n(8)
440 .k(k)
441 .ks(3)
442 .a_offset(163)
443 .zero_index(mz)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700444 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700445 }
446 }
447 }
448
Marat Dukhan08b7a972020-07-14 18:17:29 -0700449 TEST(QU8_IGEMM_MINMAX_4X8__NEON, qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700450 TEST_REQUIRES_ARM_NEON;
451 GemmMicrokernelTester()
452 .mr(4)
453 .nr(8)
454 .kr(1)
455 .sr(1)
456 .m(4)
457 .n(8)
458 .k(8)
459 .qmin(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700460 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700461 }
462
Marat Dukhan08b7a972020-07-14 18:17:29 -0700463 TEST(QU8_IGEMM_MINMAX_4X8__NEON, qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700464 TEST_REQUIRES_ARM_NEON;
465 GemmMicrokernelTester()
466 .mr(4)
467 .nr(8)
468 .kr(1)
469 .sr(1)
470 .m(4)
471 .n(8)
472 .k(8)
473 .qmax(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700474 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700475 }
476
Marat Dukhan08b7a972020-07-14 18:17:29 -0700477 TEST(QU8_IGEMM_MINMAX_4X8__NEON, strided_cm) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700478 TEST_REQUIRES_ARM_NEON;
479 GemmMicrokernelTester()
480 .mr(4)
481 .nr(8)
482 .kr(1)
483 .sr(1)
484 .m(4)
485 .n(8)
486 .k(8)
487 .cm_stride(11)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700488 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700489 }
490
Marat Dukhan08b7a972020-07-14 18:17:29 -0700491 TEST(QU8_IGEMM_MINMAX_4X8__NEON, no_a_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700492 TEST_REQUIRES_ARM_NEON;
493 for (size_t k = 1; k <= 40; k += 9) {
494 GemmMicrokernelTester()
495 .mr(4)
496 .nr(8)
497 .kr(1)
498 .sr(1)
499 .m(4)
500 .n(8)
501 .k(k)
502 .a_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700503 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700504 }
505 }
506
Marat Dukhan08b7a972020-07-14 18:17:29 -0700507 TEST(QU8_IGEMM_MINMAX_4X8__NEON, no_b_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700508 TEST_REQUIRES_ARM_NEON;
509 for (size_t k = 1; k <= 40; k += 9) {
510 GemmMicrokernelTester()
511 .mr(4)
512 .nr(8)
513 .kr(1)
514 .sr(1)
515 .m(4)
516 .n(8)
517 .k(k)
518 .b_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700519 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700520 }
521 }
522
Marat Dukhan08b7a972020-07-14 18:17:29 -0700523 TEST(QU8_IGEMM_MINMAX_4X8__NEON, no_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700524 TEST_REQUIRES_ARM_NEON;
525 for (size_t k = 1; k <= 40; k += 9) {
526 GemmMicrokernelTester()
527 .mr(4)
528 .nr(8)
529 .kr(1)
530 .sr(1)
531 .m(4)
532 .n(8)
533 .k(k)
534 .a_zero_point(0)
535 .b_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700536 .Test(xnn_qu8_igemm_minmax_ukernel_4x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700537 }
538 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700539#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
XNNPACK Teamb455b122019-09-27 18:10:33 -0700540
541
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700542#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhan08b7a972020-07-14 18:17:29 -0700543 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_eq_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700544 TEST_REQUIRES_ARM_NEON;
545 GemmMicrokernelTester()
546 .mr(8)
547 .nr(8)
548 .kr(1)
549 .sr(1)
550 .m(8)
551 .n(8)
552 .k(8)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700553 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700554 }
555
Marat Dukhan08b7a972020-07-14 18:17:29 -0700556 TEST(QU8_IGEMM_MINMAX_8X8__NEON, strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700557 TEST_REQUIRES_ARM_NEON;
558 GemmMicrokernelTester()
559 .mr(8)
560 .nr(8)
561 .kr(1)
562 .sr(1)
563 .m(8)
564 .n(8)
565 .k(8)
566 .cn_stride(11)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700567 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700568 }
569
Marat Dukhan08b7a972020-07-14 18:17:29 -0700570 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_eq_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700571 TEST_REQUIRES_ARM_NEON;
572 for (uint32_t m = 1; m <= 8; m++) {
573 for (uint32_t n = 1; n <= 8; n++) {
574 GemmMicrokernelTester()
575 .mr(8)
576 .nr(8)
577 .kr(1)
578 .sr(1)
579 .m(m)
580 .n(n)
581 .k(8)
582 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700583 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700584 }
585 }
586 }
587
Marat Dukhan08b7a972020-07-14 18:17:29 -0700588 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_eq_8_subtile_m) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700589 TEST_REQUIRES_ARM_NEON;
590 for (uint32_t m = 1; m <= 8; m++) {
591 GemmMicrokernelTester()
592 .mr(8)
593 .nr(8)
594 .kr(1)
595 .sr(1)
596 .m(m)
597 .n(8)
598 .k(8)
599 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700600 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700601 }
602 }
603
Marat Dukhan08b7a972020-07-14 18:17:29 -0700604 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_eq_8_subtile_n) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700605 TEST_REQUIRES_ARM_NEON;
606 for (uint32_t n = 1; n <= 8; n++) {
607 GemmMicrokernelTester()
608 .mr(8)
609 .nr(8)
610 .kr(1)
611 .sr(1)
612 .m(8)
613 .n(n)
614 .k(8)
615 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700616 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700617 }
618 }
619
Marat Dukhan08b7a972020-07-14 18:17:29 -0700620 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_lt_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700621 TEST_REQUIRES_ARM_NEON;
622 for (size_t k = 1; k < 8; k++) {
623 GemmMicrokernelTester()
624 .mr(8)
625 .nr(8)
626 .kr(1)
627 .sr(1)
628 .m(8)
629 .n(8)
630 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700631 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700632 }
633 }
634
Marat Dukhan08b7a972020-07-14 18:17:29 -0700635 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_lt_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700636 TEST_REQUIRES_ARM_NEON;
637 for (size_t k = 1; k < 8; k++) {
638 for (uint32_t m = 1; m <= 8; m++) {
639 for (uint32_t n = 1; n <= 8; n++) {
640 GemmMicrokernelTester()
641 .mr(8)
642 .nr(8)
643 .kr(1)
644 .sr(1)
645 .m(m)
646 .n(n)
647 .k(k)
648 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700649 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700650 }
651 }
652 }
653 }
654
Marat Dukhan08b7a972020-07-14 18:17:29 -0700655 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_gt_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700656 TEST_REQUIRES_ARM_NEON;
657 for (size_t k = 9; k < 16; k++) {
658 GemmMicrokernelTester()
659 .mr(8)
660 .nr(8)
661 .kr(1)
662 .sr(1)
663 .m(8)
664 .n(8)
665 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700666 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700667 }
668 }
669
Marat Dukhan08b7a972020-07-14 18:17:29 -0700670 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_gt_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700671 TEST_REQUIRES_ARM_NEON;
672 for (size_t k = 9; k < 16; k++) {
673 for (uint32_t m = 1; m <= 8; m++) {
674 for (uint32_t n = 1; n <= 8; n++) {
675 GemmMicrokernelTester()
676 .mr(8)
677 .nr(8)
678 .kr(1)
679 .sr(1)
680 .m(m)
681 .n(n)
682 .k(k)
683 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700684 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700685 }
686 }
687 }
688 }
689
Marat Dukhan08b7a972020-07-14 18:17:29 -0700690 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_div_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700691 TEST_REQUIRES_ARM_NEON;
692 for (size_t k = 16; k <= 80; k += 8) {
693 GemmMicrokernelTester()
694 .mr(8)
695 .nr(8)
696 .kr(1)
697 .sr(1)
698 .m(8)
699 .n(8)
700 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700701 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700702 }
703 }
704
Marat Dukhan08b7a972020-07-14 18:17:29 -0700705 TEST(QU8_IGEMM_MINMAX_8X8__NEON, k_div_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700706 TEST_REQUIRES_ARM_NEON;
707 for (size_t k = 16; k <= 80; k += 8) {
708 for (uint32_t m = 1; m <= 8; m++) {
709 for (uint32_t n = 1; n <= 8; n++) {
710 GemmMicrokernelTester()
711 .mr(8)
712 .nr(8)
713 .kr(1)
714 .sr(1)
715 .m(m)
716 .n(n)
717 .k(k)
718 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700719 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700720 }
721 }
722 }
723 }
724
Marat Dukhan08b7a972020-07-14 18:17:29 -0700725 TEST(QU8_IGEMM_MINMAX_8X8__NEON, n_gt_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700726 TEST_REQUIRES_ARM_NEON;
727 for (uint32_t n = 9; n < 16; n++) {
728 for (size_t k = 1; k <= 40; k += 9) {
729 GemmMicrokernelTester()
730 .mr(8)
731 .nr(8)
732 .kr(1)
733 .sr(1)
734 .m(8)
735 .n(8)
736 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700737 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700738 }
739 }
740 }
741
Marat Dukhan08b7a972020-07-14 18:17:29 -0700742 TEST(QU8_IGEMM_MINMAX_8X8__NEON, n_gt_8_strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700743 TEST_REQUIRES_ARM_NEON;
744 for (uint32_t n = 9; n < 16; n++) {
745 for (size_t k = 1; k <= 40; k += 9) {
746 GemmMicrokernelTester()
747 .mr(8)
748 .nr(8)
749 .kr(1)
750 .sr(1)
751 .m(8)
752 .n(8)
753 .k(k)
754 .cn_stride(11)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700755 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700756 }
757 }
758 }
759
Marat Dukhan08b7a972020-07-14 18:17:29 -0700760 TEST(QU8_IGEMM_MINMAX_8X8__NEON, n_gt_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700761 TEST_REQUIRES_ARM_NEON;
762 for (uint32_t n = 9; n < 16; n++) {
763 for (size_t k = 1; k <= 40; k += 9) {
764 for (uint32_t m = 1; m <= 8; m++) {
765 GemmMicrokernelTester()
766 .mr(8)
767 .nr(8)
768 .kr(1)
769 .sr(1)
770 .m(m)
771 .n(n)
772 .k(k)
773 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700774 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700775 }
776 }
777 }
778 }
779
Marat Dukhan08b7a972020-07-14 18:17:29 -0700780 TEST(QU8_IGEMM_MINMAX_8X8__NEON, n_div_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700781 TEST_REQUIRES_ARM_NEON;
782 for (uint32_t n = 16; n <= 24; n += 8) {
783 for (size_t k = 1; k <= 40; k += 9) {
784 GemmMicrokernelTester()
785 .mr(8)
786 .nr(8)
787 .kr(1)
788 .sr(1)
789 .m(8)
790 .n(8)
791 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700792 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700793 }
794 }
795 }
796
Marat Dukhan08b7a972020-07-14 18:17:29 -0700797 TEST(QU8_IGEMM_MINMAX_8X8__NEON, n_div_8_strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700798 TEST_REQUIRES_ARM_NEON;
799 for (uint32_t n = 16; n <= 24; n += 8) {
800 for (size_t k = 1; k <= 40; k += 9) {
801 GemmMicrokernelTester()
802 .mr(8)
803 .nr(8)
804 .kr(1)
805 .sr(1)
806 .m(8)
807 .n(n)
808 .k(k)
809 .cn_stride(11)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700810 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700811 }
812 }
813 }
814
Marat Dukhan08b7a972020-07-14 18:17:29 -0700815 TEST(QU8_IGEMM_MINMAX_8X8__NEON, n_div_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700816 TEST_REQUIRES_ARM_NEON;
817 for (uint32_t n = 16; n <= 24; n += 8) {
818 for (size_t k = 1; k <= 40; k += 9) {
819 for (uint32_t m = 1; m <= 8; m++) {
820 GemmMicrokernelTester()
821 .mr(8)
822 .nr(8)
823 .kr(1)
824 .sr(1)
825 .m(m)
826 .n(n)
827 .k(k)
828 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700829 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700830 }
831 }
832 }
833 }
834
Marat Dukhan08b7a972020-07-14 18:17:29 -0700835 TEST(QU8_IGEMM_MINMAX_8X8__NEON, small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700836 TEST_REQUIRES_ARM_NEON;
837 for (size_t k = 1; k <= 40; k += 9) {
838 GemmMicrokernelTester()
839 .mr(8)
840 .nr(8)
841 .kr(1)
842 .sr(1)
843 .m(8)
844 .n(8)
845 .k(k)
846 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700847 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700848 }
849 }
850
Marat Dukhan08b7a972020-07-14 18:17:29 -0700851 TEST(QU8_IGEMM_MINMAX_8X8__NEON, small_kernel_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700852 TEST_REQUIRES_ARM_NEON;
853 for (size_t k = 1; k <= 40; k += 9) {
854 for (uint32_t m = 1; m <= 8; m++) {
855 for (uint32_t n = 1; n <= 8; n++) {
856 GemmMicrokernelTester()
857 .mr(8)
858 .nr(8)
859 .kr(1)
860 .sr(1)
861 .m(m)
862 .n(n)
863 .k(k)
864 .ks(3)
865 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700866 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700867 }
868 }
869 }
870 }
871
Marat Dukhan08b7a972020-07-14 18:17:29 -0700872 TEST(QU8_IGEMM_MINMAX_8X8__NEON, n_gt_8_small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700873 TEST_REQUIRES_ARM_NEON;
874 for (uint32_t n = 9; n < 16; n++) {
875 for (size_t k = 1; k <= 40; k += 9) {
876 GemmMicrokernelTester()
877 .mr(8)
878 .nr(8)
879 .kr(1)
880 .sr(1)
881 .m(8)
882 .n(8)
883 .k(k)
884 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700885 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700886 }
887 }
888 }
889
Marat Dukhan08b7a972020-07-14 18:17:29 -0700890 TEST(QU8_IGEMM_MINMAX_8X8__NEON, n_div_8_small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700891 TEST_REQUIRES_ARM_NEON;
892 for (uint32_t n = 16; n <= 24; n += 8) {
893 for (size_t k = 1; k <= 40; k += 9) {
894 GemmMicrokernelTester()
895 .mr(8)
896 .nr(8)
897 .kr(1)
898 .sr(1)
899 .m(8)
900 .n(8)
901 .k(k)
902 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700903 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700904 }
905 }
906 }
907
Marat Dukhan08b7a972020-07-14 18:17:29 -0700908 TEST(QU8_IGEMM_MINMAX_8X8__NEON, strided_cm_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700909 TEST_REQUIRES_ARM_NEON;
910 for (size_t k = 1; k <= 40; k += 9) {
911 for (uint32_t m = 1; m <= 8; m++) {
912 for (uint32_t n = 1; n <= 8; n++) {
913 GemmMicrokernelTester()
914 .mr(8)
915 .nr(8)
916 .kr(1)
917 .sr(1)
918 .m(m)
919 .n(n)
920 .k(k)
921 .cm_stride(11)
922 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700923 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700924 }
925 }
926 }
927 }
928
Marat Dukhan08b7a972020-07-14 18:17:29 -0700929 TEST(QU8_IGEMM_MINMAX_8X8__NEON, a_offset) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700930 TEST_REQUIRES_ARM_NEON;
931 for (size_t k = 1; k <= 40; k += 9) {
932 GemmMicrokernelTester()
933 .mr(8)
934 .nr(8)
935 .kr(1)
936 .sr(1)
937 .m(8)
938 .n(8)
939 .k(k)
940 .ks(3)
941 .a_offset(331)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700942 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700943 }
944 }
945
Marat Dukhan08b7a972020-07-14 18:17:29 -0700946 TEST(QU8_IGEMM_MINMAX_8X8__NEON, zero) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700947 TEST_REQUIRES_ARM_NEON;
948 for (uint32_t mz = 0; mz < 8; mz++) {
949 for (size_t k = 1; k <= 40; k += 9) {
950 GemmMicrokernelTester()
951 .mr(8)
952 .nr(8)
953 .kr(1)
954 .sr(1)
955 .m(8)
956 .n(8)
957 .k(k)
958 .ks(3)
959 .a_offset(331)
960 .zero_index(mz)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700961 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700962 }
963 }
964 }
965
Marat Dukhan08b7a972020-07-14 18:17:29 -0700966 TEST(QU8_IGEMM_MINMAX_8X8__NEON, qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700967 TEST_REQUIRES_ARM_NEON;
968 GemmMicrokernelTester()
969 .mr(8)
970 .nr(8)
971 .kr(1)
972 .sr(1)
973 .m(8)
974 .n(8)
975 .k(8)
976 .qmin(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700977 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700978 }
979
Marat Dukhan08b7a972020-07-14 18:17:29 -0700980 TEST(QU8_IGEMM_MINMAX_8X8__NEON, qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700981 TEST_REQUIRES_ARM_NEON;
982 GemmMicrokernelTester()
983 .mr(8)
984 .nr(8)
985 .kr(1)
986 .sr(1)
987 .m(8)
988 .n(8)
989 .k(8)
990 .qmax(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700991 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700992 }
993
Marat Dukhan08b7a972020-07-14 18:17:29 -0700994 TEST(QU8_IGEMM_MINMAX_8X8__NEON, strided_cm) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700995 TEST_REQUIRES_ARM_NEON;
996 GemmMicrokernelTester()
997 .mr(8)
998 .nr(8)
999 .kr(1)
1000 .sr(1)
1001 .m(8)
1002 .n(8)
1003 .k(8)
1004 .cm_stride(11)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001005 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001006 }
1007
Marat Dukhan08b7a972020-07-14 18:17:29 -07001008 TEST(QU8_IGEMM_MINMAX_8X8__NEON, no_a_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001009 TEST_REQUIRES_ARM_NEON;
1010 for (size_t k = 1; k <= 40; k += 9) {
1011 GemmMicrokernelTester()
1012 .mr(8)
1013 .nr(8)
1014 .kr(1)
1015 .sr(1)
1016 .m(8)
1017 .n(8)
1018 .k(k)
1019 .a_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001020 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001021 }
1022 }
1023
Marat Dukhan08b7a972020-07-14 18:17:29 -07001024 TEST(QU8_IGEMM_MINMAX_8X8__NEON, no_b_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001025 TEST_REQUIRES_ARM_NEON;
1026 for (size_t k = 1; k <= 40; k += 9) {
1027 GemmMicrokernelTester()
1028 .mr(8)
1029 .nr(8)
1030 .kr(1)
1031 .sr(1)
1032 .m(8)
1033 .n(8)
1034 .k(k)
1035 .b_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001036 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001037 }
1038 }
1039
Marat Dukhan08b7a972020-07-14 18:17:29 -07001040 TEST(QU8_IGEMM_MINMAX_8X8__NEON, no_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001041 TEST_REQUIRES_ARM_NEON;
1042 for (size_t k = 1; k <= 40; k += 9) {
1043 GemmMicrokernelTester()
1044 .mr(8)
1045 .nr(8)
1046 .kr(1)
1047 .sr(1)
1048 .m(8)
1049 .n(8)
1050 .k(k)
1051 .a_zero_point(0)
1052 .b_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001053 .Test(xnn_qu8_igemm_minmax_ukernel_8x8__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001054 }
1055 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -07001056#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
XNNPACK Teamb455b122019-09-27 18:10:33 -07001057
1058
Marat Dukhan1dadbf72019-10-01 10:46:20 -07001059#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhan08b7a972020-07-14 18:17:29 -07001060 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_eq_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001061 TEST_REQUIRES_X86_SSE2;
1062 GemmMicrokernelTester()
1063 .mr(4)
1064 .nr(4)
1065 .kr(2)
1066 .sr(1)
1067 .m(4)
1068 .n(4)
1069 .k(8)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001070 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001071 }
1072
Marat Dukhan08b7a972020-07-14 18:17:29 -07001073 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001074 TEST_REQUIRES_X86_SSE2;
1075 GemmMicrokernelTester()
1076 .mr(4)
1077 .nr(4)
1078 .kr(2)
1079 .sr(1)
1080 .m(4)
1081 .n(4)
1082 .k(8)
1083 .cn_stride(7)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001084 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001085 }
1086
Marat Dukhan08b7a972020-07-14 18:17:29 -07001087 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_eq_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001088 TEST_REQUIRES_X86_SSE2;
1089 for (uint32_t m = 1; m <= 4; m++) {
1090 for (uint32_t n = 1; n <= 4; n++) {
1091 GemmMicrokernelTester()
1092 .mr(4)
1093 .nr(4)
1094 .kr(2)
1095 .sr(1)
1096 .m(m)
1097 .n(n)
1098 .k(8)
1099 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001100 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001101 }
1102 }
1103 }
1104
Marat Dukhan08b7a972020-07-14 18:17:29 -07001105 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_eq_8_subtile_m) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001106 TEST_REQUIRES_X86_SSE2;
1107 for (uint32_t m = 1; m <= 4; m++) {
1108 GemmMicrokernelTester()
1109 .mr(4)
1110 .nr(4)
1111 .kr(2)
1112 .sr(1)
1113 .m(m)
1114 .n(4)
1115 .k(8)
1116 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001117 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001118 }
1119 }
1120
Marat Dukhan08b7a972020-07-14 18:17:29 -07001121 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_eq_8_subtile_n) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001122 TEST_REQUIRES_X86_SSE2;
1123 for (uint32_t n = 1; n <= 4; n++) {
1124 GemmMicrokernelTester()
1125 .mr(4)
1126 .nr(4)
1127 .kr(2)
1128 .sr(1)
1129 .m(4)
1130 .n(n)
1131 .k(8)
1132 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001133 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001134 }
1135 }
1136
Marat Dukhan08b7a972020-07-14 18:17:29 -07001137 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_lt_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001138 TEST_REQUIRES_X86_SSE2;
1139 for (size_t k = 1; k < 8; k++) {
1140 GemmMicrokernelTester()
1141 .mr(4)
1142 .nr(4)
1143 .kr(2)
1144 .sr(1)
1145 .m(4)
1146 .n(4)
1147 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001148 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001149 }
1150 }
1151
Marat Dukhan08b7a972020-07-14 18:17:29 -07001152 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_lt_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001153 TEST_REQUIRES_X86_SSE2;
1154 for (size_t k = 1; k < 8; k++) {
1155 for (uint32_t m = 1; m <= 4; m++) {
1156 for (uint32_t n = 1; n <= 4; n++) {
1157 GemmMicrokernelTester()
1158 .mr(4)
1159 .nr(4)
1160 .kr(2)
1161 .sr(1)
1162 .m(m)
1163 .n(n)
1164 .k(k)
1165 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001166 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001167 }
1168 }
1169 }
1170 }
1171
Marat Dukhan08b7a972020-07-14 18:17:29 -07001172 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_gt_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001173 TEST_REQUIRES_X86_SSE2;
1174 for (size_t k = 9; k < 16; k++) {
1175 GemmMicrokernelTester()
1176 .mr(4)
1177 .nr(4)
1178 .kr(2)
1179 .sr(1)
1180 .m(4)
1181 .n(4)
1182 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001183 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001184 }
1185 }
1186
Marat Dukhan08b7a972020-07-14 18:17:29 -07001187 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_gt_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001188 TEST_REQUIRES_X86_SSE2;
1189 for (size_t k = 9; k < 16; k++) {
1190 for (uint32_t m = 1; m <= 4; m++) {
1191 for (uint32_t n = 1; n <= 4; n++) {
1192 GemmMicrokernelTester()
1193 .mr(4)
1194 .nr(4)
1195 .kr(2)
1196 .sr(1)
1197 .m(m)
1198 .n(n)
1199 .k(k)
1200 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001201 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001202 }
1203 }
1204 }
1205 }
1206
Marat Dukhan08b7a972020-07-14 18:17:29 -07001207 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_div_8) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001208 TEST_REQUIRES_X86_SSE2;
1209 for (size_t k = 16; k <= 80; k += 8) {
1210 GemmMicrokernelTester()
1211 .mr(4)
1212 .nr(4)
1213 .kr(2)
1214 .sr(1)
1215 .m(4)
1216 .n(4)
1217 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001218 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001219 }
1220 }
1221
Marat Dukhan08b7a972020-07-14 18:17:29 -07001222 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, k_div_8_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001223 TEST_REQUIRES_X86_SSE2;
1224 for (size_t k = 16; k <= 80; k += 8) {
1225 for (uint32_t m = 1; m <= 4; m++) {
1226 for (uint32_t n = 1; n <= 4; n++) {
1227 GemmMicrokernelTester()
1228 .mr(4)
1229 .nr(4)
1230 .kr(2)
1231 .sr(1)
1232 .m(m)
1233 .n(n)
1234 .k(k)
1235 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001236 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001237 }
1238 }
1239 }
1240 }
1241
Marat Dukhan08b7a972020-07-14 18:17:29 -07001242 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, n_gt_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001243 TEST_REQUIRES_X86_SSE2;
1244 for (uint32_t n = 5; n < 8; n++) {
1245 for (size_t k = 1; k <= 40; k += 9) {
1246 GemmMicrokernelTester()
1247 .mr(4)
1248 .nr(4)
1249 .kr(2)
1250 .sr(1)
1251 .m(4)
1252 .n(4)
1253 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001254 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001255 }
1256 }
1257 }
1258
Marat Dukhan08b7a972020-07-14 18:17:29 -07001259 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, n_gt_4_strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001260 TEST_REQUIRES_X86_SSE2;
1261 for (uint32_t n = 5; n < 8; n++) {
1262 for (size_t k = 1; k <= 40; k += 9) {
1263 GemmMicrokernelTester()
1264 .mr(4)
1265 .nr(4)
1266 .kr(2)
1267 .sr(1)
1268 .m(4)
1269 .n(4)
1270 .k(k)
1271 .cn_stride(7)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001272 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001273 }
1274 }
1275 }
1276
Marat Dukhan08b7a972020-07-14 18:17:29 -07001277 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, n_gt_4_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001278 TEST_REQUIRES_X86_SSE2;
1279 for (uint32_t n = 5; n < 8; n++) {
1280 for (size_t k = 1; k <= 40; k += 9) {
1281 for (uint32_t m = 1; m <= 4; m++) {
1282 GemmMicrokernelTester()
1283 .mr(4)
1284 .nr(4)
1285 .kr(2)
1286 .sr(1)
1287 .m(m)
1288 .n(n)
1289 .k(k)
1290 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001291 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001292 }
1293 }
1294 }
1295 }
1296
Marat Dukhan08b7a972020-07-14 18:17:29 -07001297 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, n_div_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001298 TEST_REQUIRES_X86_SSE2;
1299 for (uint32_t n = 8; n <= 12; n += 4) {
1300 for (size_t k = 1; k <= 40; k += 9) {
1301 GemmMicrokernelTester()
1302 .mr(4)
1303 .nr(4)
1304 .kr(2)
1305 .sr(1)
1306 .m(4)
1307 .n(4)
1308 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001309 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001310 }
1311 }
1312 }
1313
Marat Dukhan08b7a972020-07-14 18:17:29 -07001314 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, n_div_4_strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001315 TEST_REQUIRES_X86_SSE2;
1316 for (uint32_t n = 8; n <= 12; n += 4) {
1317 for (size_t k = 1; k <= 40; k += 9) {
1318 GemmMicrokernelTester()
1319 .mr(4)
1320 .nr(4)
1321 .kr(2)
1322 .sr(1)
1323 .m(4)
1324 .n(n)
1325 .k(k)
1326 .cn_stride(7)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001327 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001328 }
1329 }
1330 }
1331
Marat Dukhan08b7a972020-07-14 18:17:29 -07001332 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, n_div_4_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001333 TEST_REQUIRES_X86_SSE2;
1334 for (uint32_t n = 8; n <= 12; n += 4) {
1335 for (size_t k = 1; k <= 40; k += 9) {
1336 for (uint32_t m = 1; m <= 4; m++) {
1337 GemmMicrokernelTester()
1338 .mr(4)
1339 .nr(4)
1340 .kr(2)
1341 .sr(1)
1342 .m(m)
1343 .n(n)
1344 .k(k)
1345 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001346 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001347 }
1348 }
1349 }
1350 }
1351
Marat Dukhan08b7a972020-07-14 18:17:29 -07001352 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001353 TEST_REQUIRES_X86_SSE2;
1354 for (size_t k = 1; k <= 40; k += 9) {
1355 GemmMicrokernelTester()
1356 .mr(4)
1357 .nr(4)
1358 .kr(2)
1359 .sr(1)
1360 .m(4)
1361 .n(4)
1362 .k(k)
1363 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001364 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001365 }
1366 }
1367
Marat Dukhan08b7a972020-07-14 18:17:29 -07001368 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, small_kernel_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001369 TEST_REQUIRES_X86_SSE2;
1370 for (size_t k = 1; k <= 40; k += 9) {
1371 for (uint32_t m = 1; m <= 4; m++) {
1372 for (uint32_t n = 1; n <= 4; n++) {
1373 GemmMicrokernelTester()
1374 .mr(4)
1375 .nr(4)
1376 .kr(2)
1377 .sr(1)
1378 .m(m)
1379 .n(n)
1380 .k(k)
1381 .ks(3)
1382 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001383 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001384 }
1385 }
1386 }
1387 }
1388
Marat Dukhan08b7a972020-07-14 18:17:29 -07001389 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, n_gt_4_small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001390 TEST_REQUIRES_X86_SSE2;
1391 for (uint32_t n = 5; n < 8; n++) {
1392 for (size_t k = 1; k <= 40; k += 9) {
1393 GemmMicrokernelTester()
1394 .mr(4)
1395 .nr(4)
1396 .kr(2)
1397 .sr(1)
1398 .m(4)
1399 .n(4)
1400 .k(k)
1401 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001402 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001403 }
1404 }
1405 }
1406
Marat Dukhan08b7a972020-07-14 18:17:29 -07001407 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, n_div_4_small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001408 TEST_REQUIRES_X86_SSE2;
1409 for (uint32_t n = 8; n <= 12; n += 4) {
1410 for (size_t k = 1; k <= 40; k += 9) {
1411 GemmMicrokernelTester()
1412 .mr(4)
1413 .nr(4)
1414 .kr(2)
1415 .sr(1)
1416 .m(4)
1417 .n(4)
1418 .k(k)
1419 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001420 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001421 }
1422 }
1423 }
1424
Marat Dukhan08b7a972020-07-14 18:17:29 -07001425 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, strided_cm_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001426 TEST_REQUIRES_X86_SSE2;
1427 for (size_t k = 1; k <= 40; k += 9) {
1428 for (uint32_t m = 1; m <= 4; m++) {
1429 for (uint32_t n = 1; n <= 4; n++) {
1430 GemmMicrokernelTester()
1431 .mr(4)
1432 .nr(4)
1433 .kr(2)
1434 .sr(1)
1435 .m(m)
1436 .n(n)
1437 .k(k)
1438 .cm_stride(7)
1439 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001440 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001441 }
1442 }
1443 }
1444 }
1445
Marat Dukhan08b7a972020-07-14 18:17:29 -07001446 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, a_offset) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001447 TEST_REQUIRES_X86_SSE2;
1448 for (size_t k = 1; k <= 40; k += 9) {
1449 GemmMicrokernelTester()
1450 .mr(4)
1451 .nr(4)
1452 .kr(2)
1453 .sr(1)
1454 .m(4)
1455 .n(4)
1456 .k(k)
1457 .ks(3)
1458 .a_offset(163)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001459 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001460 }
1461 }
1462
Marat Dukhan08b7a972020-07-14 18:17:29 -07001463 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, zero) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001464 TEST_REQUIRES_X86_SSE2;
1465 for (uint32_t mz = 0; mz < 4; mz++) {
1466 for (size_t k = 1; k <= 40; k += 9) {
1467 GemmMicrokernelTester()
1468 .mr(4)
1469 .nr(4)
1470 .kr(2)
1471 .sr(1)
1472 .m(4)
1473 .n(4)
1474 .k(k)
1475 .ks(3)
1476 .a_offset(163)
1477 .zero_index(mz)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001478 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001479 }
1480 }
1481 }
1482
Marat Dukhan08b7a972020-07-14 18:17:29 -07001483 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001484 TEST_REQUIRES_X86_SSE2;
1485 GemmMicrokernelTester()
1486 .mr(4)
1487 .nr(4)
1488 .kr(2)
1489 .sr(1)
1490 .m(4)
1491 .n(4)
1492 .k(8)
1493 .qmin(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001494 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001495 }
1496
Marat Dukhan08b7a972020-07-14 18:17:29 -07001497 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001498 TEST_REQUIRES_X86_SSE2;
1499 GemmMicrokernelTester()
1500 .mr(4)
1501 .nr(4)
1502 .kr(2)
1503 .sr(1)
1504 .m(4)
1505 .n(4)
1506 .k(8)
1507 .qmax(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001508 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001509 }
1510
Marat Dukhan08b7a972020-07-14 18:17:29 -07001511 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, strided_cm) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001512 TEST_REQUIRES_X86_SSE2;
1513 GemmMicrokernelTester()
1514 .mr(4)
1515 .nr(4)
1516 .kr(2)
1517 .sr(1)
1518 .m(4)
1519 .n(4)
1520 .k(8)
1521 .cm_stride(7)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001522 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001523 }
1524
Marat Dukhan08b7a972020-07-14 18:17:29 -07001525 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, no_a_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001526 TEST_REQUIRES_X86_SSE2;
1527 for (size_t k = 1; k <= 40; k += 9) {
1528 GemmMicrokernelTester()
1529 .mr(4)
1530 .nr(4)
1531 .kr(2)
1532 .sr(1)
1533 .m(4)
1534 .n(4)
1535 .k(k)
1536 .a_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001537 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001538 }
1539 }
1540
Marat Dukhan08b7a972020-07-14 18:17:29 -07001541 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, no_b_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001542 TEST_REQUIRES_X86_SSE2;
1543 for (size_t k = 1; k <= 40; k += 9) {
1544 GemmMicrokernelTester()
1545 .mr(4)
1546 .nr(4)
1547 .kr(2)
1548 .sr(1)
1549 .m(4)
1550 .n(4)
1551 .k(k)
1552 .b_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001553 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001554 }
1555 }
1556
Marat Dukhan08b7a972020-07-14 18:17:29 -07001557 TEST(QU8_IGEMM_MINMAX_4X4C2__SSE2, no_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001558 TEST_REQUIRES_X86_SSE2;
1559 for (size_t k = 1; k <= 40; k += 9) {
1560 GemmMicrokernelTester()
1561 .mr(4)
1562 .nr(4)
1563 .kr(2)
1564 .sr(1)
1565 .m(4)
1566 .n(4)
1567 .k(k)
1568 .a_zero_point(0)
1569 .b_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001570 .Test(xnn_qu8_igemm_minmax_ukernel_4x4c2__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001571 }
1572 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -07001573#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
XNNPACK Teamb455b122019-09-27 18:10:33 -07001574
1575
Marat Dukhan08b7a972020-07-14 18:17:29 -07001576TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, k_eq_1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001577 GemmMicrokernelTester()
1578 .mr(2)
1579 .nr(2)
1580 .kr(1)
1581 .sr(1)
1582 .m(2)
1583 .n(2)
1584 .k(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001585 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001586}
1587
Marat Dukhan08b7a972020-07-14 18:17:29 -07001588TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001589 GemmMicrokernelTester()
1590 .mr(2)
1591 .nr(2)
1592 .kr(1)
1593 .sr(1)
1594 .m(2)
1595 .n(2)
1596 .k(1)
1597 .cn_stride(5)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001598 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001599}
1600
Marat Dukhan08b7a972020-07-14 18:17:29 -07001601TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, k_eq_1_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001602 for (uint32_t m = 1; m <= 2; m++) {
1603 for (uint32_t n = 1; n <= 2; n++) {
1604 GemmMicrokernelTester()
1605 .mr(2)
1606 .nr(2)
1607 .kr(1)
1608 .sr(1)
1609 .m(m)
1610 .n(n)
1611 .k(1)
1612 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001613 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001614 }
1615 }
1616}
1617
Marat Dukhan08b7a972020-07-14 18:17:29 -07001618TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, k_eq_1_subtile_m) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001619 for (uint32_t m = 1; m <= 2; m++) {
1620 GemmMicrokernelTester()
1621 .mr(2)
1622 .nr(2)
1623 .kr(1)
1624 .sr(1)
1625 .m(m)
1626 .n(2)
1627 .k(1)
1628 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001629 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001630 }
1631}
1632
Marat Dukhan08b7a972020-07-14 18:17:29 -07001633TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, k_eq_1_subtile_n) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001634 for (uint32_t n = 1; n <= 2; n++) {
1635 GemmMicrokernelTester()
1636 .mr(2)
1637 .nr(2)
1638 .kr(1)
1639 .sr(1)
1640 .m(2)
1641 .n(n)
1642 .k(1)
1643 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001644 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001645 }
1646}
1647
Marat Dukhan08b7a972020-07-14 18:17:29 -07001648TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, k_gt_1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001649 for (size_t k = 2; k < 10; k++) {
1650 GemmMicrokernelTester()
1651 .mr(2)
1652 .nr(2)
1653 .kr(1)
1654 .sr(1)
1655 .m(2)
1656 .n(2)
1657 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001658 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001659 }
1660}
1661
Marat Dukhan08b7a972020-07-14 18:17:29 -07001662TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, k_gt_1_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001663 for (size_t k = 2; k < 10; k++) {
1664 for (uint32_t m = 1; m <= 2; m++) {
1665 for (uint32_t n = 1; n <= 2; n++) {
1666 GemmMicrokernelTester()
1667 .mr(2)
1668 .nr(2)
1669 .kr(1)
1670 .sr(1)
1671 .m(m)
1672 .n(n)
1673 .k(k)
1674 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001675 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001676 }
1677 }
1678 }
1679}
1680
Marat Dukhan08b7a972020-07-14 18:17:29 -07001681TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, n_gt_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001682 for (uint32_t n = 3; n < 4; n++) {
1683 for (size_t k = 1; k <= 5; k += 2) {
1684 GemmMicrokernelTester()
1685 .mr(2)
1686 .nr(2)
1687 .kr(1)
1688 .sr(1)
1689 .m(2)
1690 .n(2)
1691 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001692 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001693 }
1694 }
1695}
1696
Marat Dukhan08b7a972020-07-14 18:17:29 -07001697TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, n_gt_2_strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001698 for (uint32_t n = 3; n < 4; n++) {
1699 for (size_t k = 1; k <= 5; k += 2) {
1700 GemmMicrokernelTester()
1701 .mr(2)
1702 .nr(2)
1703 .kr(1)
1704 .sr(1)
1705 .m(2)
1706 .n(2)
1707 .k(k)
1708 .cn_stride(5)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001709 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001710 }
1711 }
1712}
1713
Marat Dukhan08b7a972020-07-14 18:17:29 -07001714TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, n_gt_2_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001715 for (uint32_t n = 3; n < 4; n++) {
1716 for (size_t k = 1; k <= 5; k += 2) {
1717 for (uint32_t m = 1; m <= 2; m++) {
1718 GemmMicrokernelTester()
1719 .mr(2)
1720 .nr(2)
1721 .kr(1)
1722 .sr(1)
1723 .m(m)
1724 .n(n)
1725 .k(k)
1726 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001727 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001728 }
1729 }
1730 }
1731}
1732
Marat Dukhan08b7a972020-07-14 18:17:29 -07001733TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, n_div_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001734 for (uint32_t n = 4; n <= 6; n += 2) {
1735 for (size_t k = 1; k <= 5; k += 2) {
1736 GemmMicrokernelTester()
1737 .mr(2)
1738 .nr(2)
1739 .kr(1)
1740 .sr(1)
1741 .m(2)
1742 .n(2)
1743 .k(k)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001744 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001745 }
1746 }
1747}
1748
Marat Dukhan08b7a972020-07-14 18:17:29 -07001749TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, n_div_2_strided_cn) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001750 for (uint32_t n = 4; n <= 6; n += 2) {
1751 for (size_t k = 1; k <= 5; k += 2) {
1752 GemmMicrokernelTester()
1753 .mr(2)
1754 .nr(2)
1755 .kr(1)
1756 .sr(1)
1757 .m(2)
1758 .n(n)
1759 .k(k)
1760 .cn_stride(5)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001761 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001762 }
1763 }
1764}
1765
Marat Dukhan08b7a972020-07-14 18:17:29 -07001766TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, n_div_2_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001767 for (uint32_t n = 4; n <= 6; n += 2) {
1768 for (size_t k = 1; k <= 5; k += 2) {
1769 for (uint32_t m = 1; m <= 2; m++) {
1770 GemmMicrokernelTester()
1771 .mr(2)
1772 .nr(2)
1773 .kr(1)
1774 .sr(1)
1775 .m(m)
1776 .n(n)
1777 .k(k)
1778 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001779 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001780 }
1781 }
1782 }
1783}
1784
Marat Dukhan08b7a972020-07-14 18:17:29 -07001785TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001786 for (size_t k = 1; k <= 5; k += 2) {
1787 GemmMicrokernelTester()
1788 .mr(2)
1789 .nr(2)
1790 .kr(1)
1791 .sr(1)
1792 .m(2)
1793 .n(2)
1794 .k(k)
1795 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001796 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001797 }
1798}
1799
Marat Dukhan08b7a972020-07-14 18:17:29 -07001800TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, small_kernel_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001801 for (size_t k = 1; k <= 5; k += 2) {
1802 for (uint32_t m = 1; m <= 2; m++) {
1803 for (uint32_t n = 1; n <= 2; n++) {
1804 GemmMicrokernelTester()
1805 .mr(2)
1806 .nr(2)
1807 .kr(1)
1808 .sr(1)
1809 .m(m)
1810 .n(n)
1811 .k(k)
1812 .ks(3)
1813 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001814 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001815 }
1816 }
1817 }
1818}
1819
Marat Dukhan08b7a972020-07-14 18:17:29 -07001820TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, n_gt_2_small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001821 for (uint32_t n = 3; n < 4; n++) {
1822 for (size_t k = 1; k <= 5; k += 2) {
1823 GemmMicrokernelTester()
1824 .mr(2)
1825 .nr(2)
1826 .kr(1)
1827 .sr(1)
1828 .m(2)
1829 .n(2)
1830 .k(k)
1831 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001832 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001833 }
1834 }
1835}
1836
Marat Dukhan08b7a972020-07-14 18:17:29 -07001837TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, n_div_2_small_kernel) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001838 for (uint32_t n = 4; n <= 6; n += 2) {
1839 for (size_t k = 1; k <= 5; k += 2) {
1840 GemmMicrokernelTester()
1841 .mr(2)
1842 .nr(2)
1843 .kr(1)
1844 .sr(1)
1845 .m(2)
1846 .n(2)
1847 .k(k)
1848 .ks(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001849 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001850 }
1851 }
1852}
1853
Marat Dukhan08b7a972020-07-14 18:17:29 -07001854TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, strided_cm_subtile) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001855 for (size_t k = 1; k <= 5; k += 2) {
1856 for (uint32_t m = 1; m <= 2; m++) {
1857 for (uint32_t n = 1; n <= 2; n++) {
1858 GemmMicrokernelTester()
1859 .mr(2)
1860 .nr(2)
1861 .kr(1)
1862 .sr(1)
1863 .m(m)
1864 .n(n)
1865 .k(k)
1866 .cm_stride(5)
1867 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001868 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001869 }
1870 }
1871 }
1872}
1873
Marat Dukhan08b7a972020-07-14 18:17:29 -07001874TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, a_offset) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001875 for (size_t k = 1; k <= 5; k += 2) {
1876 GemmMicrokernelTester()
1877 .mr(2)
1878 .nr(2)
1879 .kr(1)
1880 .sr(1)
1881 .m(2)
1882 .n(2)
1883 .k(k)
1884 .ks(3)
1885 .a_offset(13)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001886 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001887 }
1888}
1889
Marat Dukhan08b7a972020-07-14 18:17:29 -07001890TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, zero) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001891 for (uint32_t mz = 0; mz < 2; mz++) {
1892 for (size_t k = 1; k <= 5; k += 2) {
1893 GemmMicrokernelTester()
1894 .mr(2)
1895 .nr(2)
1896 .kr(1)
1897 .sr(1)
1898 .m(2)
1899 .n(2)
1900 .k(k)
1901 .ks(3)
1902 .a_offset(13)
1903 .zero_index(mz)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001904 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001905 }
1906 }
1907}
1908
Marat Dukhan08b7a972020-07-14 18:17:29 -07001909TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001910 GemmMicrokernelTester()
1911 .mr(2)
1912 .nr(2)
1913 .kr(1)
1914 .sr(1)
1915 .m(2)
1916 .n(2)
1917 .k(1)
1918 .qmin(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001919 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001920}
1921
Marat Dukhan08b7a972020-07-14 18:17:29 -07001922TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001923 GemmMicrokernelTester()
1924 .mr(2)
1925 .nr(2)
1926 .kr(1)
1927 .sr(1)
1928 .m(2)
1929 .n(2)
1930 .k(1)
1931 .qmax(128)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001932 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001933}
1934
Marat Dukhan08b7a972020-07-14 18:17:29 -07001935TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, strided_cm) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001936 GemmMicrokernelTester()
1937 .mr(2)
1938 .nr(2)
1939 .kr(1)
1940 .sr(1)
1941 .m(2)
1942 .n(2)
1943 .k(1)
1944 .cm_stride(5)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001945 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001946}
1947
Marat Dukhan08b7a972020-07-14 18:17:29 -07001948TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, no_a_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001949 for (size_t k = 1; k <= 5; k += 2) {
1950 GemmMicrokernelTester()
1951 .mr(2)
1952 .nr(2)
1953 .kr(1)
1954 .sr(1)
1955 .m(2)
1956 .n(2)
1957 .k(k)
1958 .a_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001959 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001960 }
1961}
1962
Marat Dukhan08b7a972020-07-14 18:17:29 -07001963TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, no_b_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001964 for (size_t k = 1; k <= 5; k += 2) {
1965 GemmMicrokernelTester()
1966 .mr(2)
1967 .nr(2)
1968 .kr(1)
1969 .sr(1)
1970 .m(2)
1971 .n(2)
1972 .k(k)
1973 .b_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001974 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001975 }
1976}
1977
Marat Dukhan08b7a972020-07-14 18:17:29 -07001978TEST(QU8_IGEMM_MINMAX_2X2__SCALAR, no_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001979 for (size_t k = 1; k <= 5; k += 2) {
1980 GemmMicrokernelTester()
1981 .mr(2)
1982 .nr(2)
1983 .kr(1)
1984 .sr(1)
1985 .m(2)
1986 .n(2)
1987 .k(k)
1988 .a_zero_point(0)
1989 .b_zero_point(0)
Marat Dukhan08b7a972020-07-14 18:17:29 -07001990 .Test(xnn_qu8_igemm_minmax_ukernel_2x2__scalar, GemmMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001991 }
1992}