blob: 5c9ae2e8eb42499e50a6cbe63de34daf22d0539b [file] [log] [blame]
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001// Copyright 2019 Google LLC
2//
3// This source code is licensed under the BSD-style license found in the
4// LICENSE file in the root directory of this source tree.
5//
6// Auto-generated file. Do not edit!
Marat Dukhan355ab432020-04-09 19:01:52 -07007// Specification: test/f16-spmm-minmax.yaml
Marat Dukhanbdb56f52020-02-05 21:42:49 -08008// Generator: tools/generate-spmm-test.py
9
10
11#include <gtest/gtest.h>
12
13#include <xnnpack/common.h>
14#include <xnnpack/isa-checks.h>
15
16#include <xnnpack/spmm.h>
17#include "spmm-microkernel-tester.h"
18
19
20#if XNN_ARCH_ARM64
Marat Dukhan355ab432020-04-09 19:01:52 -070021 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, k_eq_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -080022 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
23 SpMMMicrokernelTester()
24 .mr(8)
25 .nr(1)
26 .m(8)
27 .n(1)
28 .k(1)
29 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -080030 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -080031 }
32
Marat Dukhan355ab432020-04-09 19:01:52 -070033 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, k_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -080034 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
35 for (size_t k = 2; k < 10; k++) {
36 SpMMMicrokernelTester()
37 .mr(8)
38 .nr(1)
39 .m(8)
40 .n(1)
41 .k(k)
42 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -080043 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -080044 }
45 }
46
Marat Dukhan355ab432020-04-09 19:01:52 -070047 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, n_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -080048 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
49 for (uint32_t n = 2; n < 10; n++) {
50 for (size_t k = 1; k <= 5; k += 2) {
51 SpMMMicrokernelTester()
52 .mr(8)
53 .nr(1)
54 .m(8)
55 .n(n)
56 .k(k)
57 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -080058 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -080059 }
60 }
61 }
62
Marat Dukhan355ab432020-04-09 19:01:52 -070063 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, m_lt_8) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -080064 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
65 for (uint32_t m = 1; m < 8; m++) {
66 for (uint32_t n = 1; n < 10; n += 2) {
67 for (size_t k = 1; k <= 5; k += 2) {
68 SpMMMicrokernelTester()
69 .mr(8)
70 .nr(1)
71 .m(m)
72 .n(n)
73 .k(k)
74 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -080075 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -080076 }
77 }
78 }
79 }
80
Marat Dukhan355ab432020-04-09 19:01:52 -070081 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, m_div_8) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -080082 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
83 for (uint32_t m = 16; m <= 24; m += 8) {
84 for (uint32_t n = 1; n < 10; n += 2) {
85 for (size_t k = 1; k <= 5; k += 2) {
86 SpMMMicrokernelTester()
87 .mr(8)
88 .nr(1)
89 .m(m)
90 .n(n)
91 .k(k)
92 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -080093 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -080094 }
95 }
96 }
97 }
98
Marat Dukhan355ab432020-04-09 19:01:52 -070099 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, m_gt_8) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800100 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
101 for (uint32_t m = 9; m < 16; m++) {
102 for (uint32_t n = 1; n < 10; n += 2) {
103 for (size_t k = 1; k <= 5; k += 2) {
104 SpMMMicrokernelTester()
105 .mr(8)
106 .nr(1)
107 .m(m)
108 .n(n)
109 .k(k)
110 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800111 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800112 }
113 }
114 }
115 }
116
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800117 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, output_stride) {
118 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
119 for (uint32_t n = 1; n < 10; n += 2) {
120 for (size_t k = 1; k <= 5; k += 2) {
121 SpMMMicrokernelTester()
122 .mr(8)
123 .nr(1)
124 .m(16)
125 .n(n)
126 .k(k)
127 .output_stride(19)
128 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800129 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800130 }
131 }
132 }
133
Marat Dukhan355ab432020-04-09 19:01:52 -0700134 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, qmin) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800135 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
136 for (uint32_t n = 1; n < 10; n += 2) {
137 for (size_t k = 1; k <= 5; k += 2) {
138 SpMMMicrokernelTester()
139 .mr(8)
140 .nr(1)
141 .m(16)
142 .n(n)
143 .k(k)
144 .sparsity(0.0f)
145 .qmin(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800146 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800147 }
148 }
149 }
150
Marat Dukhan355ab432020-04-09 19:01:52 -0700151 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, qmax) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800152 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
153 for (uint32_t n = 1; n < 10; n += 2) {
154 for (size_t k = 1; k <= 5; k += 2) {
155 SpMMMicrokernelTester()
156 .mr(8)
157 .nr(1)
158 .m(16)
159 .n(n)
160 .k(k)
161 .sparsity(0.0f)
162 .qmax(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800163 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800164 }
165 }
166 }
167
Marat Dukhan355ab432020-04-09 19:01:52 -0700168 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, half_sparse) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800169 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
170 for (uint32_t n = 1; n < 10; n += 2) {
171 for (size_t k = 1; k <= 5; k += 2) {
172 SpMMMicrokernelTester()
173 .mr(8)
174 .nr(1)
175 .m(16)
176 .n(n)
177 .k(k)
178 .sparsity(0.5f)
Marat Dukhan645af972022-01-09 22:50:27 -0800179 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800180 }
181 }
182 }
183
Marat Dukhan355ab432020-04-09 19:01:52 -0700184 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, zero_weights) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800185 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
186 for (uint32_t n = 1; n < 10; n += 2) {
187 for (size_t k = 1; k <= 5; k += 2) {
188 SpMMMicrokernelTester()
189 .mr(8)
190 .nr(1)
191 .m(16)
192 .n(n)
193 .k(k)
194 .sparsity(1.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800195 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800196 }
197 }
198 }
199#endif // XNN_ARCH_ARM64
200
201
202#if XNN_ARCH_ARM64
Frank Barchardbeca6522020-10-30 22:34:35 -0700203 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, k_eq_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800204 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
205 SpMMMicrokernelTester()
206 .mr(8)
207 .nr(1)
208 .m(8)
209 .n(1)
210 .k(2)
211 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800212 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800213 }
214
Frank Barchardbeca6522020-10-30 22:34:35 -0700215 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, k_lt_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800216 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
217 for (size_t k = 1; k < 2; k++) {
218 SpMMMicrokernelTester()
219 .mr(8)
220 .nr(1)
221 .m(8)
222 .n(1)
223 .k(k)
224 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800225 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800226 }
227 }
228
Frank Barchardbeca6522020-10-30 22:34:35 -0700229 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, k_gt_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800230 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
231 for (size_t k = 3; k < 4; k++) {
232 SpMMMicrokernelTester()
233 .mr(8)
234 .nr(1)
235 .m(8)
236 .n(1)
237 .k(k)
238 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800239 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800240 }
241 }
242
Frank Barchardbeca6522020-10-30 22:34:35 -0700243 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, k_div_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800244 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
245 for (size_t k = 4; k <= 20; k += 2) {
246 SpMMMicrokernelTester()
247 .mr(8)
248 .nr(1)
249 .m(8)
250 .n(1)
251 .k(k)
252 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800253 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800254 }
255 }
256
Frank Barchardbeca6522020-10-30 22:34:35 -0700257 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, n_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800258 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
259 for (uint32_t n = 2; n < 10; n++) {
260 for (size_t k = 1; k <= 10; k += 3) {
261 SpMMMicrokernelTester()
262 .mr(8)
263 .nr(1)
264 .m(8)
265 .n(n)
266 .k(k)
267 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800268 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800269 }
270 }
271 }
272
Frank Barchardbeca6522020-10-30 22:34:35 -0700273 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, m_lt_8) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800274 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
275 for (uint32_t m = 1; m < 8; m++) {
276 for (uint32_t n = 1; n < 10; n += 2) {
277 for (size_t k = 1; k <= 10; k += 3) {
278 SpMMMicrokernelTester()
279 .mr(8)
280 .nr(1)
281 .m(m)
282 .n(n)
283 .k(k)
284 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800285 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800286 }
287 }
288 }
289 }
290
Frank Barchardbeca6522020-10-30 22:34:35 -0700291 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, m_div_8) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800292 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
293 for (uint32_t m = 16; m <= 24; m += 8) {
294 for (uint32_t n = 1; n < 10; n += 2) {
295 for (size_t k = 1; k <= 10; k += 3) {
296 SpMMMicrokernelTester()
297 .mr(8)
298 .nr(1)
299 .m(m)
300 .n(n)
301 .k(k)
302 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800303 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800304 }
305 }
306 }
307 }
308
Frank Barchardbeca6522020-10-30 22:34:35 -0700309 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, m_gt_8) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800310 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
311 for (uint32_t m = 9; m < 16; m++) {
312 for (uint32_t n = 1; n < 10; n += 2) {
313 for (size_t k = 1; k <= 10; k += 3) {
314 SpMMMicrokernelTester()
315 .mr(8)
316 .nr(1)
317 .m(m)
318 .n(n)
319 .k(k)
320 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800321 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800322 }
323 }
324 }
325 }
326
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800327 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, output_stride) {
328 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
329 for (uint32_t n = 1; n < 10; n += 2) {
330 for (size_t k = 1; k <= 10; k += 3) {
331 SpMMMicrokernelTester()
332 .mr(8)
333 .nr(1)
334 .m(16)
335 .n(n)
336 .k(k)
337 .output_stride(19)
338 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800339 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800340 }
341 }
342 }
343
Frank Barchardbeca6522020-10-30 22:34:35 -0700344 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, qmin) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800345 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
346 for (uint32_t n = 1; n < 10; n += 2) {
347 for (size_t k = 1; k <= 10; k += 3) {
348 SpMMMicrokernelTester()
349 .mr(8)
350 .nr(1)
351 .m(16)
352 .n(n)
353 .k(k)
354 .sparsity(0.0f)
355 .qmin(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800356 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800357 }
358 }
359 }
360
Frank Barchardbeca6522020-10-30 22:34:35 -0700361 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, qmax) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800362 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
363 for (uint32_t n = 1; n < 10; n += 2) {
364 for (size_t k = 1; k <= 10; k += 3) {
365 SpMMMicrokernelTester()
366 .mr(8)
367 .nr(1)
368 .m(16)
369 .n(n)
370 .k(k)
371 .sparsity(0.0f)
372 .qmax(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800373 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800374 }
375 }
376 }
377
Frank Barchardbeca6522020-10-30 22:34:35 -0700378 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, half_sparse) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800379 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
380 for (uint32_t n = 1; n < 10; n += 2) {
381 for (size_t k = 1; k <= 10; k += 3) {
382 SpMMMicrokernelTester()
383 .mr(8)
384 .nr(1)
385 .m(16)
386 .n(n)
387 .k(k)
388 .sparsity(0.5f)
Marat Dukhan645af972022-01-09 22:50:27 -0800389 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800390 }
391 }
392 }
393
Frank Barchardbeca6522020-10-30 22:34:35 -0700394 TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, zero_weights) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800395 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
396 for (uint32_t n = 1; n < 10; n += 2) {
397 for (size_t k = 1; k <= 10; k += 3) {
398 SpMMMicrokernelTester()
399 .mr(8)
400 .nr(1)
401 .m(16)
402 .n(n)
403 .k(k)
404 .sparsity(1.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800405 .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800406 }
407 }
408 }
409#endif // XNN_ARCH_ARM64
410
411
412#if XNN_ARCH_ARM64
Marat Dukhan355ab432020-04-09 19:01:52 -0700413 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, k_eq_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800414 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
415 SpMMMicrokernelTester()
416 .mr(16)
417 .nr(1)
418 .m(16)
419 .n(1)
420 .k(1)
421 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800422 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800423 }
424
Marat Dukhan355ab432020-04-09 19:01:52 -0700425 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, k_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800426 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
427 for (size_t k = 2; k < 10; k++) {
428 SpMMMicrokernelTester()
429 .mr(16)
430 .nr(1)
431 .m(16)
432 .n(1)
433 .k(k)
434 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800435 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800436 }
437 }
438
Marat Dukhan355ab432020-04-09 19:01:52 -0700439 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, n_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800440 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
441 for (uint32_t n = 2; n < 10; n++) {
442 for (size_t k = 1; k <= 5; k += 2) {
443 SpMMMicrokernelTester()
444 .mr(16)
445 .nr(1)
446 .m(16)
447 .n(n)
448 .k(k)
449 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800450 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800451 }
452 }
453 }
454
Marat Dukhan355ab432020-04-09 19:01:52 -0700455 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, m_lt_16) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800456 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
457 for (uint32_t m = 1; m < 16; m++) {
458 for (uint32_t n = 1; n < 10; n += 2) {
459 for (size_t k = 1; k <= 5; k += 2) {
460 SpMMMicrokernelTester()
461 .mr(16)
462 .nr(1)
463 .m(m)
464 .n(n)
465 .k(k)
466 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800467 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800468 }
469 }
470 }
471 }
472
Marat Dukhan355ab432020-04-09 19:01:52 -0700473 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, m_div_16) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800474 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
475 for (uint32_t m = 32; m <= 48; m += 16) {
476 for (uint32_t n = 1; n < 10; n += 2) {
477 for (size_t k = 1; k <= 5; k += 2) {
478 SpMMMicrokernelTester()
479 .mr(16)
480 .nr(1)
481 .m(m)
482 .n(n)
483 .k(k)
484 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800485 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800486 }
487 }
488 }
489 }
490
Marat Dukhan355ab432020-04-09 19:01:52 -0700491 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, m_gt_16) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800492 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
493 for (uint32_t m = 17; m < 32; m++) {
494 for (uint32_t n = 1; n < 10; n += 2) {
495 for (size_t k = 1; k <= 5; k += 2) {
496 SpMMMicrokernelTester()
497 .mr(16)
498 .nr(1)
499 .m(m)
500 .n(n)
501 .k(k)
502 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800503 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800504 }
505 }
506 }
507 }
508
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800509 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, output_stride) {
510 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
511 for (uint32_t n = 1; n < 10; n += 2) {
512 for (size_t k = 1; k <= 5; k += 2) {
513 SpMMMicrokernelTester()
514 .mr(16)
515 .nr(1)
516 .m(32)
517 .n(n)
518 .k(k)
519 .output_stride(37)
520 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800521 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800522 }
523 }
524 }
525
Marat Dukhan355ab432020-04-09 19:01:52 -0700526 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, qmin) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800527 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
528 for (uint32_t n = 1; n < 10; n += 2) {
529 for (size_t k = 1; k <= 5; k += 2) {
530 SpMMMicrokernelTester()
531 .mr(16)
532 .nr(1)
533 .m(32)
534 .n(n)
535 .k(k)
536 .sparsity(0.0f)
537 .qmin(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800538 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800539 }
540 }
541 }
542
Marat Dukhan355ab432020-04-09 19:01:52 -0700543 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, qmax) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800544 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
545 for (uint32_t n = 1; n < 10; n += 2) {
546 for (size_t k = 1; k <= 5; k += 2) {
547 SpMMMicrokernelTester()
548 .mr(16)
549 .nr(1)
550 .m(32)
551 .n(n)
552 .k(k)
553 .sparsity(0.0f)
554 .qmax(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800555 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800556 }
557 }
558 }
559
Marat Dukhan355ab432020-04-09 19:01:52 -0700560 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, half_sparse) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800561 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
562 for (uint32_t n = 1; n < 10; n += 2) {
563 for (size_t k = 1; k <= 5; k += 2) {
564 SpMMMicrokernelTester()
565 .mr(16)
566 .nr(1)
567 .m(32)
568 .n(n)
569 .k(k)
570 .sparsity(0.5f)
Marat Dukhan645af972022-01-09 22:50:27 -0800571 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800572 }
573 }
574 }
575
Marat Dukhan355ab432020-04-09 19:01:52 -0700576 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, zero_weights) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800577 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
578 for (uint32_t n = 1; n < 10; n += 2) {
579 for (size_t k = 1; k <= 5; k += 2) {
580 SpMMMicrokernelTester()
581 .mr(16)
582 .nr(1)
583 .m(32)
584 .n(n)
585 .k(k)
586 .sparsity(1.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800587 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800588 }
589 }
590 }
591#endif // XNN_ARCH_ARM64
592
593
594#if XNN_ARCH_ARM64
Frank Barchardbeca6522020-10-30 22:34:35 -0700595 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, k_eq_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800596 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
597 SpMMMicrokernelTester()
598 .mr(16)
599 .nr(1)
600 .m(16)
601 .n(1)
602 .k(2)
603 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800604 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800605 }
606
Frank Barchardbeca6522020-10-30 22:34:35 -0700607 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, k_lt_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800608 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
609 for (size_t k = 1; k < 2; k++) {
610 SpMMMicrokernelTester()
611 .mr(16)
612 .nr(1)
613 .m(16)
614 .n(1)
615 .k(k)
616 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800617 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800618 }
619 }
620
Frank Barchardbeca6522020-10-30 22:34:35 -0700621 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, k_gt_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800622 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
623 for (size_t k = 3; k < 4; k++) {
624 SpMMMicrokernelTester()
625 .mr(16)
626 .nr(1)
627 .m(16)
628 .n(1)
629 .k(k)
630 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800631 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800632 }
633 }
634
Frank Barchardbeca6522020-10-30 22:34:35 -0700635 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, k_div_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800636 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
637 for (size_t k = 4; k <= 20; k += 2) {
638 SpMMMicrokernelTester()
639 .mr(16)
640 .nr(1)
641 .m(16)
642 .n(1)
643 .k(k)
644 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800645 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800646 }
647 }
648
Frank Barchardbeca6522020-10-30 22:34:35 -0700649 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, n_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800650 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
651 for (uint32_t n = 2; n < 10; n++) {
652 for (size_t k = 1; k <= 10; k += 3) {
653 SpMMMicrokernelTester()
654 .mr(16)
655 .nr(1)
656 .m(16)
657 .n(n)
658 .k(k)
659 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800660 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800661 }
662 }
663 }
664
Frank Barchardbeca6522020-10-30 22:34:35 -0700665 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, m_lt_16) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800666 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
667 for (uint32_t m = 1; m < 16; m++) {
668 for (uint32_t n = 1; n < 10; n += 2) {
669 for (size_t k = 1; k <= 10; k += 3) {
670 SpMMMicrokernelTester()
671 .mr(16)
672 .nr(1)
673 .m(m)
674 .n(n)
675 .k(k)
676 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800677 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800678 }
679 }
680 }
681 }
682
Frank Barchardbeca6522020-10-30 22:34:35 -0700683 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, m_div_16) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800684 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
685 for (uint32_t m = 32; m <= 48; m += 16) {
686 for (uint32_t n = 1; n < 10; n += 2) {
687 for (size_t k = 1; k <= 10; k += 3) {
688 SpMMMicrokernelTester()
689 .mr(16)
690 .nr(1)
691 .m(m)
692 .n(n)
693 .k(k)
694 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800695 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800696 }
697 }
698 }
699 }
700
Frank Barchardbeca6522020-10-30 22:34:35 -0700701 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, m_gt_16) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800702 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
703 for (uint32_t m = 17; m < 32; m++) {
704 for (uint32_t n = 1; n < 10; n += 2) {
705 for (size_t k = 1; k <= 10; k += 3) {
706 SpMMMicrokernelTester()
707 .mr(16)
708 .nr(1)
709 .m(m)
710 .n(n)
711 .k(k)
712 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800713 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800714 }
715 }
716 }
717 }
718
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800719 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, output_stride) {
720 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
721 for (uint32_t n = 1; n < 10; n += 2) {
722 for (size_t k = 1; k <= 10; k += 3) {
723 SpMMMicrokernelTester()
724 .mr(16)
725 .nr(1)
726 .m(32)
727 .n(n)
728 .k(k)
729 .output_stride(37)
730 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800731 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800732 }
733 }
734 }
735
Frank Barchardbeca6522020-10-30 22:34:35 -0700736 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, qmin) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800737 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
738 for (uint32_t n = 1; n < 10; n += 2) {
739 for (size_t k = 1; k <= 10; k += 3) {
740 SpMMMicrokernelTester()
741 .mr(16)
742 .nr(1)
743 .m(32)
744 .n(n)
745 .k(k)
746 .sparsity(0.0f)
747 .qmin(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800748 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800749 }
750 }
751 }
752
Frank Barchardbeca6522020-10-30 22:34:35 -0700753 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, qmax) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800754 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
755 for (uint32_t n = 1; n < 10; n += 2) {
756 for (size_t k = 1; k <= 10; k += 3) {
757 SpMMMicrokernelTester()
758 .mr(16)
759 .nr(1)
760 .m(32)
761 .n(n)
762 .k(k)
763 .sparsity(0.0f)
764 .qmax(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800765 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800766 }
767 }
768 }
769
Frank Barchardbeca6522020-10-30 22:34:35 -0700770 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, half_sparse) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800771 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
772 for (uint32_t n = 1; n < 10; n += 2) {
773 for (size_t k = 1; k <= 10; k += 3) {
774 SpMMMicrokernelTester()
775 .mr(16)
776 .nr(1)
777 .m(32)
778 .n(n)
779 .k(k)
780 .sparsity(0.5f)
Marat Dukhan645af972022-01-09 22:50:27 -0800781 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800782 }
783 }
784 }
785
Frank Barchardbeca6522020-10-30 22:34:35 -0700786 TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, zero_weights) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800787 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
788 for (uint32_t n = 1; n < 10; n += 2) {
789 for (size_t k = 1; k <= 10; k += 3) {
790 SpMMMicrokernelTester()
791 .mr(16)
792 .nr(1)
793 .m(32)
794 .n(n)
795 .k(k)
796 .sparsity(1.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800797 .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800798 }
799 }
800 }
801#endif // XNN_ARCH_ARM64
802
803
804#if XNN_ARCH_ARM64
Marat Dukhan355ab432020-04-09 19:01:52 -0700805 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, k_eq_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800806 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
807 SpMMMicrokernelTester()
808 .mr(24)
809 .nr(1)
810 .m(24)
811 .n(1)
812 .k(1)
813 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800814 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800815 }
816
Marat Dukhan355ab432020-04-09 19:01:52 -0700817 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, k_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800818 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
819 for (size_t k = 2; k < 10; k++) {
820 SpMMMicrokernelTester()
821 .mr(24)
822 .nr(1)
823 .m(24)
824 .n(1)
825 .k(k)
826 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800827 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800828 }
829 }
830
Marat Dukhan355ab432020-04-09 19:01:52 -0700831 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, n_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800832 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
833 for (uint32_t n = 2; n < 10; n++) {
834 for (size_t k = 1; k <= 5; k += 2) {
835 SpMMMicrokernelTester()
836 .mr(24)
837 .nr(1)
838 .m(24)
839 .n(n)
840 .k(k)
841 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800842 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800843 }
844 }
845 }
846
Marat Dukhan355ab432020-04-09 19:01:52 -0700847 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, m_lt_24) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800848 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
849 for (uint32_t m = 1; m < 24; m++) {
850 for (uint32_t n = 1; n < 10; n += 2) {
851 for (size_t k = 1; k <= 5; k += 2) {
852 SpMMMicrokernelTester()
853 .mr(24)
854 .nr(1)
855 .m(m)
856 .n(n)
857 .k(k)
858 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800859 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800860 }
861 }
862 }
863 }
864
Marat Dukhan355ab432020-04-09 19:01:52 -0700865 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, m_div_24) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800866 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
867 for (uint32_t m = 48; m <= 72; m += 24) {
868 for (uint32_t n = 1; n < 10; n += 2) {
869 for (size_t k = 1; k <= 5; k += 2) {
870 SpMMMicrokernelTester()
871 .mr(24)
872 .nr(1)
873 .m(m)
874 .n(n)
875 .k(k)
876 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800877 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800878 }
879 }
880 }
881 }
882
Marat Dukhan355ab432020-04-09 19:01:52 -0700883 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, m_gt_24) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800884 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
885 for (uint32_t m = 25; m < 48; m++) {
886 for (uint32_t n = 1; n < 10; n += 2) {
887 for (size_t k = 1; k <= 5; k += 2) {
888 SpMMMicrokernelTester()
889 .mr(24)
890 .nr(1)
891 .m(m)
892 .n(n)
893 .k(k)
894 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800895 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800896 }
897 }
898 }
899 }
900
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800901 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, output_stride) {
902 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
903 for (uint32_t n = 1; n < 10; n += 2) {
904 for (size_t k = 1; k <= 5; k += 2) {
905 SpMMMicrokernelTester()
906 .mr(24)
907 .nr(1)
908 .m(48)
909 .n(n)
910 .k(k)
911 .output_stride(53)
912 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800913 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhane8bfcc82020-11-16 12:28:13 -0800914 }
915 }
916 }
917
Marat Dukhan355ab432020-04-09 19:01:52 -0700918 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, qmin) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800919 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
920 for (uint32_t n = 1; n < 10; n += 2) {
921 for (size_t k = 1; k <= 5; k += 2) {
922 SpMMMicrokernelTester()
923 .mr(24)
924 .nr(1)
925 .m(48)
926 .n(n)
927 .k(k)
928 .sparsity(0.0f)
929 .qmin(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800930 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800931 }
932 }
933 }
934
Marat Dukhan355ab432020-04-09 19:01:52 -0700935 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, qmax) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800936 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
937 for (uint32_t n = 1; n < 10; n += 2) {
938 for (size_t k = 1; k <= 5; k += 2) {
939 SpMMMicrokernelTester()
940 .mr(24)
941 .nr(1)
942 .m(48)
943 .n(n)
944 .k(k)
945 .sparsity(0.0f)
946 .qmax(128)
Marat Dukhan645af972022-01-09 22:50:27 -0800947 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800948 }
949 }
950 }
951
Marat Dukhan355ab432020-04-09 19:01:52 -0700952 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, half_sparse) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800953 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
954 for (uint32_t n = 1; n < 10; n += 2) {
955 for (size_t k = 1; k <= 5; k += 2) {
956 SpMMMicrokernelTester()
957 .mr(24)
958 .nr(1)
959 .m(48)
960 .n(n)
961 .k(k)
962 .sparsity(0.5f)
Marat Dukhan645af972022-01-09 22:50:27 -0800963 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800964 }
965 }
966 }
967
Marat Dukhan355ab432020-04-09 19:01:52 -0700968 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, zero_weights) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800969 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
970 for (uint32_t n = 1; n < 10; n += 2) {
971 for (size_t k = 1; k <= 5; k += 2) {
972 SpMMMicrokernelTester()
973 .mr(24)
974 .nr(1)
975 .m(48)
976 .n(n)
977 .k(k)
978 .sparsity(1.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800979 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800980 }
981 }
982 }
983#endif // XNN_ARCH_ARM64
984
985
986#if XNN_ARCH_ARM64
Frank Barchardbeca6522020-10-30 22:34:35 -0700987 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, k_eq_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800988 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
989 SpMMMicrokernelTester()
990 .mr(24)
991 .nr(1)
992 .m(24)
993 .n(1)
994 .k(2)
995 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -0800996 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -0800997 }
998
Frank Barchardbeca6522020-10-30 22:34:35 -0700999 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, k_lt_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001000 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1001 for (size_t k = 1; k < 2; k++) {
1002 SpMMMicrokernelTester()
1003 .mr(24)
1004 .nr(1)
1005 .m(24)
1006 .n(1)
1007 .k(k)
1008 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001009 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001010 }
1011 }
1012
Frank Barchardbeca6522020-10-30 22:34:35 -07001013 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, k_gt_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001014 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1015 for (size_t k = 3; k < 4; k++) {
1016 SpMMMicrokernelTester()
1017 .mr(24)
1018 .nr(1)
1019 .m(24)
1020 .n(1)
1021 .k(k)
1022 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001023 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001024 }
1025 }
1026
Frank Barchardbeca6522020-10-30 22:34:35 -07001027 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, k_div_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001028 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1029 for (size_t k = 4; k <= 20; k += 2) {
1030 SpMMMicrokernelTester()
1031 .mr(24)
1032 .nr(1)
1033 .m(24)
1034 .n(1)
1035 .k(k)
1036 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001037 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001038 }
1039 }
1040
Frank Barchardbeca6522020-10-30 22:34:35 -07001041 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, n_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001042 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1043 for (uint32_t n = 2; n < 10; n++) {
1044 for (size_t k = 1; k <= 10; k += 3) {
1045 SpMMMicrokernelTester()
1046 .mr(24)
1047 .nr(1)
1048 .m(24)
1049 .n(n)
1050 .k(k)
1051 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001052 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001053 }
1054 }
1055 }
1056
Frank Barchardbeca6522020-10-30 22:34:35 -07001057 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, m_lt_24) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001058 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1059 for (uint32_t m = 1; m < 24; m++) {
1060 for (uint32_t n = 1; n < 10; n += 2) {
1061 for (size_t k = 1; k <= 10; k += 3) {
1062 SpMMMicrokernelTester()
1063 .mr(24)
1064 .nr(1)
1065 .m(m)
1066 .n(n)
1067 .k(k)
1068 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001069 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001070 }
1071 }
1072 }
1073 }
1074
Frank Barchardbeca6522020-10-30 22:34:35 -07001075 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, m_div_24) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001076 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1077 for (uint32_t m = 48; m <= 72; m += 24) {
1078 for (uint32_t n = 1; n < 10; n += 2) {
1079 for (size_t k = 1; k <= 10; k += 3) {
1080 SpMMMicrokernelTester()
1081 .mr(24)
1082 .nr(1)
1083 .m(m)
1084 .n(n)
1085 .k(k)
1086 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001087 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001088 }
1089 }
1090 }
1091 }
1092
Frank Barchardbeca6522020-10-30 22:34:35 -07001093 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, m_gt_24) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001094 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1095 for (uint32_t m = 25; m < 48; m++) {
1096 for (uint32_t n = 1; n < 10; n += 2) {
1097 for (size_t k = 1; k <= 10; k += 3) {
1098 SpMMMicrokernelTester()
1099 .mr(24)
1100 .nr(1)
1101 .m(m)
1102 .n(n)
1103 .k(k)
1104 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001105 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001106 }
1107 }
1108 }
1109 }
1110
Marat Dukhane8bfcc82020-11-16 12:28:13 -08001111 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, output_stride) {
1112 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1113 for (uint32_t n = 1; n < 10; n += 2) {
1114 for (size_t k = 1; k <= 10; k += 3) {
1115 SpMMMicrokernelTester()
1116 .mr(24)
1117 .nr(1)
1118 .m(48)
1119 .n(n)
1120 .k(k)
1121 .output_stride(53)
1122 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001123 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhane8bfcc82020-11-16 12:28:13 -08001124 }
1125 }
1126 }
1127
Frank Barchardbeca6522020-10-30 22:34:35 -07001128 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, qmin) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001129 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1130 for (uint32_t n = 1; n < 10; n += 2) {
1131 for (size_t k = 1; k <= 10; k += 3) {
1132 SpMMMicrokernelTester()
1133 .mr(24)
1134 .nr(1)
1135 .m(48)
1136 .n(n)
1137 .k(k)
1138 .sparsity(0.0f)
1139 .qmin(128)
Marat Dukhan645af972022-01-09 22:50:27 -08001140 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001141 }
1142 }
1143 }
1144
Frank Barchardbeca6522020-10-30 22:34:35 -07001145 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, qmax) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001146 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1147 for (uint32_t n = 1; n < 10; n += 2) {
1148 for (size_t k = 1; k <= 10; k += 3) {
1149 SpMMMicrokernelTester()
1150 .mr(24)
1151 .nr(1)
1152 .m(48)
1153 .n(n)
1154 .k(k)
1155 .sparsity(0.0f)
1156 .qmax(128)
Marat Dukhan645af972022-01-09 22:50:27 -08001157 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001158 }
1159 }
1160 }
1161
Frank Barchardbeca6522020-10-30 22:34:35 -07001162 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, half_sparse) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001163 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1164 for (uint32_t n = 1; n < 10; n += 2) {
1165 for (size_t k = 1; k <= 10; k += 3) {
1166 SpMMMicrokernelTester()
1167 .mr(24)
1168 .nr(1)
1169 .m(48)
1170 .n(n)
1171 .k(k)
1172 .sparsity(0.5f)
Marat Dukhan645af972022-01-09 22:50:27 -08001173 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001174 }
1175 }
1176 }
1177
Frank Barchardbeca6522020-10-30 22:34:35 -07001178 TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, zero_weights) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001179 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1180 for (uint32_t n = 1; n < 10; n += 2) {
1181 for (size_t k = 1; k <= 10; k += 3) {
1182 SpMMMicrokernelTester()
1183 .mr(24)
1184 .nr(1)
1185 .m(48)
1186 .n(n)
1187 .k(k)
1188 .sparsity(1.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001189 .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001190 }
1191 }
1192 }
1193#endif // XNN_ARCH_ARM64
1194
1195
1196#if XNN_ARCH_ARM64
Marat Dukhan355ab432020-04-09 19:01:52 -07001197 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, k_eq_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001198 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1199 SpMMMicrokernelTester()
1200 .mr(32)
1201 .nr(1)
1202 .m(32)
1203 .n(1)
1204 .k(1)
1205 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001206 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001207 }
1208
Marat Dukhan355ab432020-04-09 19:01:52 -07001209 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, k_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001210 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1211 for (size_t k = 2; k < 10; k++) {
1212 SpMMMicrokernelTester()
1213 .mr(32)
1214 .nr(1)
1215 .m(32)
1216 .n(1)
1217 .k(k)
1218 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001219 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001220 }
1221 }
1222
Marat Dukhan355ab432020-04-09 19:01:52 -07001223 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, n_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001224 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1225 for (uint32_t n = 2; n < 10; n++) {
1226 for (size_t k = 1; k <= 5; k += 2) {
1227 SpMMMicrokernelTester()
1228 .mr(32)
1229 .nr(1)
1230 .m(32)
1231 .n(n)
1232 .k(k)
1233 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001234 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001235 }
1236 }
1237 }
1238
Marat Dukhan355ab432020-04-09 19:01:52 -07001239 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, m_lt_32) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001240 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1241 for (uint32_t m = 1; m < 32; m++) {
1242 for (uint32_t n = 1; n < 10; n += 2) {
1243 for (size_t k = 1; k <= 5; k += 2) {
1244 SpMMMicrokernelTester()
1245 .mr(32)
1246 .nr(1)
1247 .m(m)
1248 .n(n)
1249 .k(k)
1250 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001251 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001252 }
1253 }
1254 }
1255 }
1256
Marat Dukhan355ab432020-04-09 19:01:52 -07001257 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, m_div_32) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001258 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1259 for (uint32_t m = 64; m <= 96; m += 32) {
1260 for (uint32_t n = 1; n < 10; n += 2) {
1261 for (size_t k = 1; k <= 5; k += 2) {
1262 SpMMMicrokernelTester()
1263 .mr(32)
1264 .nr(1)
1265 .m(m)
1266 .n(n)
1267 .k(k)
1268 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001269 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001270 }
1271 }
1272 }
1273 }
1274
Marat Dukhan355ab432020-04-09 19:01:52 -07001275 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, m_gt_32) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001276 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1277 for (uint32_t m = 33; m < 64; m++) {
1278 for (uint32_t n = 1; n < 10; n += 2) {
1279 for (size_t k = 1; k <= 5; k += 2) {
1280 SpMMMicrokernelTester()
1281 .mr(32)
1282 .nr(1)
1283 .m(m)
1284 .n(n)
1285 .k(k)
1286 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001287 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001288 }
1289 }
1290 }
1291 }
1292
Marat Dukhane8bfcc82020-11-16 12:28:13 -08001293 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, output_stride) {
1294 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1295 for (uint32_t n = 1; n < 10; n += 2) {
1296 for (size_t k = 1; k <= 5; k += 2) {
1297 SpMMMicrokernelTester()
1298 .mr(32)
1299 .nr(1)
1300 .m(64)
1301 .n(n)
1302 .k(k)
1303 .output_stride(67)
1304 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001305 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhane8bfcc82020-11-16 12:28:13 -08001306 }
1307 }
1308 }
1309
Marat Dukhan355ab432020-04-09 19:01:52 -07001310 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, qmin) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001311 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1312 for (uint32_t n = 1; n < 10; n += 2) {
1313 for (size_t k = 1; k <= 5; k += 2) {
1314 SpMMMicrokernelTester()
1315 .mr(32)
1316 .nr(1)
1317 .m(64)
1318 .n(n)
1319 .k(k)
1320 .sparsity(0.0f)
1321 .qmin(128)
Marat Dukhan645af972022-01-09 22:50:27 -08001322 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001323 }
1324 }
1325 }
1326
Marat Dukhan355ab432020-04-09 19:01:52 -07001327 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, qmax) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001328 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1329 for (uint32_t n = 1; n < 10; n += 2) {
1330 for (size_t k = 1; k <= 5; k += 2) {
1331 SpMMMicrokernelTester()
1332 .mr(32)
1333 .nr(1)
1334 .m(64)
1335 .n(n)
1336 .k(k)
1337 .sparsity(0.0f)
1338 .qmax(128)
Marat Dukhan645af972022-01-09 22:50:27 -08001339 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001340 }
1341 }
1342 }
1343
Marat Dukhan355ab432020-04-09 19:01:52 -07001344 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, half_sparse) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001345 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1346 for (uint32_t n = 1; n < 10; n += 2) {
1347 for (size_t k = 1; k <= 5; k += 2) {
1348 SpMMMicrokernelTester()
1349 .mr(32)
1350 .nr(1)
1351 .m(64)
1352 .n(n)
1353 .k(k)
1354 .sparsity(0.5f)
Marat Dukhan645af972022-01-09 22:50:27 -08001355 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001356 }
1357 }
1358 }
1359
Marat Dukhan355ab432020-04-09 19:01:52 -07001360 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, zero_weights) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001361 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1362 for (uint32_t n = 1; n < 10; n += 2) {
1363 for (size_t k = 1; k <= 5; k += 2) {
1364 SpMMMicrokernelTester()
1365 .mr(32)
1366 .nr(1)
1367 .m(64)
1368 .n(n)
1369 .k(k)
1370 .sparsity(1.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001371 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001372 }
1373 }
1374 }
1375#endif // XNN_ARCH_ARM64
1376
1377
1378#if XNN_ARCH_ARM64
Frank Barchardbeca6522020-10-30 22:34:35 -07001379 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, k_eq_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001380 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1381 SpMMMicrokernelTester()
1382 .mr(32)
1383 .nr(1)
1384 .m(32)
1385 .n(1)
1386 .k(2)
1387 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001388 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001389 }
1390
Frank Barchardbeca6522020-10-30 22:34:35 -07001391 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, k_lt_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001392 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1393 for (size_t k = 1; k < 2; k++) {
1394 SpMMMicrokernelTester()
1395 .mr(32)
1396 .nr(1)
1397 .m(32)
1398 .n(1)
1399 .k(k)
1400 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001401 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001402 }
1403 }
1404
Frank Barchardbeca6522020-10-30 22:34:35 -07001405 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, k_gt_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001406 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1407 for (size_t k = 3; k < 4; k++) {
1408 SpMMMicrokernelTester()
1409 .mr(32)
1410 .nr(1)
1411 .m(32)
1412 .n(1)
1413 .k(k)
1414 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001415 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001416 }
1417 }
1418
Frank Barchardbeca6522020-10-30 22:34:35 -07001419 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, k_div_2) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001420 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1421 for (size_t k = 4; k <= 20; k += 2) {
1422 SpMMMicrokernelTester()
1423 .mr(32)
1424 .nr(1)
1425 .m(32)
1426 .n(1)
1427 .k(k)
1428 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001429 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001430 }
1431 }
1432
Frank Barchardbeca6522020-10-30 22:34:35 -07001433 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, n_gt_1) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001434 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1435 for (uint32_t n = 2; n < 10; n++) {
1436 for (size_t k = 1; k <= 10; k += 3) {
1437 SpMMMicrokernelTester()
1438 .mr(32)
1439 .nr(1)
1440 .m(32)
1441 .n(n)
1442 .k(k)
1443 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001444 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001445 }
1446 }
1447 }
1448
Frank Barchardbeca6522020-10-30 22:34:35 -07001449 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, m_lt_32) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001450 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1451 for (uint32_t m = 1; m < 32; m++) {
1452 for (uint32_t n = 1; n < 10; n += 2) {
1453 for (size_t k = 1; k <= 10; k += 3) {
1454 SpMMMicrokernelTester()
1455 .mr(32)
1456 .nr(1)
1457 .m(m)
1458 .n(n)
1459 .k(k)
1460 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001461 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001462 }
1463 }
1464 }
1465 }
1466
Frank Barchardbeca6522020-10-30 22:34:35 -07001467 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, m_div_32) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001468 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1469 for (uint32_t m = 64; m <= 96; m += 32) {
1470 for (uint32_t n = 1; n < 10; n += 2) {
1471 for (size_t k = 1; k <= 10; k += 3) {
1472 SpMMMicrokernelTester()
1473 .mr(32)
1474 .nr(1)
1475 .m(m)
1476 .n(n)
1477 .k(k)
1478 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001479 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001480 }
1481 }
1482 }
1483 }
1484
Frank Barchardbeca6522020-10-30 22:34:35 -07001485 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, m_gt_32) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001486 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1487 for (uint32_t m = 33; m < 64; m++) {
1488 for (uint32_t n = 1; n < 10; n += 2) {
1489 for (size_t k = 1; k <= 10; k += 3) {
1490 SpMMMicrokernelTester()
1491 .mr(32)
1492 .nr(1)
1493 .m(m)
1494 .n(n)
1495 .k(k)
1496 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001497 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001498 }
1499 }
1500 }
1501 }
1502
Marat Dukhane8bfcc82020-11-16 12:28:13 -08001503 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, output_stride) {
1504 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1505 for (uint32_t n = 1; n < 10; n += 2) {
1506 for (size_t k = 1; k <= 10; k += 3) {
1507 SpMMMicrokernelTester()
1508 .mr(32)
1509 .nr(1)
1510 .m(64)
1511 .n(n)
1512 .k(k)
1513 .output_stride(67)
1514 .sparsity(0.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001515 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhane8bfcc82020-11-16 12:28:13 -08001516 }
1517 }
1518 }
1519
Frank Barchardbeca6522020-10-30 22:34:35 -07001520 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, qmin) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001521 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1522 for (uint32_t n = 1; n < 10; n += 2) {
1523 for (size_t k = 1; k <= 10; k += 3) {
1524 SpMMMicrokernelTester()
1525 .mr(32)
1526 .nr(1)
1527 .m(64)
1528 .n(n)
1529 .k(k)
1530 .sparsity(0.0f)
1531 .qmin(128)
Marat Dukhan645af972022-01-09 22:50:27 -08001532 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001533 }
1534 }
1535 }
1536
Frank Barchardbeca6522020-10-30 22:34:35 -07001537 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, qmax) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001538 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1539 for (uint32_t n = 1; n < 10; n += 2) {
1540 for (size_t k = 1; k <= 10; k += 3) {
1541 SpMMMicrokernelTester()
1542 .mr(32)
1543 .nr(1)
1544 .m(64)
1545 .n(n)
1546 .k(k)
1547 .sparsity(0.0f)
1548 .qmax(128)
Marat Dukhan645af972022-01-09 22:50:27 -08001549 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001550 }
1551 }
1552 }
1553
Frank Barchardbeca6522020-10-30 22:34:35 -07001554 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, half_sparse) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001555 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1556 for (uint32_t n = 1; n < 10; n += 2) {
1557 for (size_t k = 1; k <= 10; k += 3) {
1558 SpMMMicrokernelTester()
1559 .mr(32)
1560 .nr(1)
1561 .m(64)
1562 .n(n)
1563 .k(k)
1564 .sparsity(0.5f)
Marat Dukhan645af972022-01-09 22:50:27 -08001565 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001566 }
1567 }
1568 }
1569
Frank Barchardbeca6522020-10-30 22:34:35 -07001570 TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, zero_weights) {
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001571 TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1572 for (uint32_t n = 1; n < 10; n += 2) {
1573 for (size_t k = 1; k <= 10; k += 3) {
1574 SpMMMicrokernelTester()
1575 .mr(32)
1576 .nr(1)
1577 .m(64)
1578 .n(n)
1579 .k(k)
1580 .sparsity(1.0f)
Marat Dukhan645af972022-01-09 22:50:27 -08001581 .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_scaleminmax_neon_params);
Marat Dukhanbdb56f52020-02-05 21:42:49 -08001582 }
1583 }
1584 }
1585#endif // XNN_ARCH_ARM64