1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC 2*4bdc9457SAndroid Build Coastguard Worker // 3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the 4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree. 5*4bdc9457SAndroid Build Coastguard Worker // 6*4bdc9457SAndroid Build Coastguard Worker // Auto-generated file. Do not edit! 7*4bdc9457SAndroid Build Coastguard Worker // Specification: test/f16-spmm-minmax.yaml 8*4bdc9457SAndroid Build Coastguard Worker // Generator: tools/generate-spmm-test.py 9*4bdc9457SAndroid Build Coastguard Worker 10*4bdc9457SAndroid Build Coastguard Worker 11*4bdc9457SAndroid Build Coastguard Worker #include <gtest/gtest.h> 12*4bdc9457SAndroid Build Coastguard Worker 13*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h> 14*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/isa-checks.h> 15*4bdc9457SAndroid Build Coastguard Worker 16*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/spmm.h> 17*4bdc9457SAndroid Build Coastguard Worker #include "spmm-microkernel-tester.h" 18*4bdc9457SAndroid Build Coastguard Worker 19*4bdc9457SAndroid Build Coastguard Worker 20*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,k_eq_1)21*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, k_eq_1) { 22*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 23*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 24*4bdc9457SAndroid Build Coastguard Worker .mr(8) 25*4bdc9457SAndroid Build Coastguard Worker .nr(1) 26*4bdc9457SAndroid Build Coastguard Worker .m(8) 27*4bdc9457SAndroid Build Coastguard Worker .n(1) 28*4bdc9457SAndroid Build Coastguard Worker .k(1) 29*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 30*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 31*4bdc9457SAndroid Build Coastguard Worker } 32*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,k_gt_1)33*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, k_gt_1) { 34*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 35*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 2; k < 10; k++) { 36*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 37*4bdc9457SAndroid Build Coastguard Worker .mr(8) 38*4bdc9457SAndroid Build Coastguard Worker .nr(1) 39*4bdc9457SAndroid Build Coastguard Worker .m(8) 40*4bdc9457SAndroid Build Coastguard Worker .n(1) 41*4bdc9457SAndroid Build Coastguard Worker .k(k) 42*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 43*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 44*4bdc9457SAndroid Build Coastguard Worker } 45*4bdc9457SAndroid Build Coastguard Worker } 46*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,n_gt_1)47*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, n_gt_1) { 48*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 49*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 2; n < 10; n++) { 50*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 51*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 52*4bdc9457SAndroid Build Coastguard Worker .mr(8) 53*4bdc9457SAndroid Build Coastguard Worker .nr(1) 54*4bdc9457SAndroid Build Coastguard Worker .m(8) 55*4bdc9457SAndroid Build Coastguard Worker .n(n) 56*4bdc9457SAndroid Build Coastguard Worker .k(k) 57*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 58*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 59*4bdc9457SAndroid Build Coastguard Worker } 60*4bdc9457SAndroid Build Coastguard Worker } 61*4bdc9457SAndroid Build Coastguard Worker } 62*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,m_lt_8)63*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, m_lt_8) { 64*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 65*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 1; m < 8; m++) { 66*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 67*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 68*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 69*4bdc9457SAndroid Build Coastguard Worker .mr(8) 70*4bdc9457SAndroid Build Coastguard Worker .nr(1) 71*4bdc9457SAndroid Build Coastguard Worker .m(m) 72*4bdc9457SAndroid Build Coastguard Worker .n(n) 73*4bdc9457SAndroid Build Coastguard Worker .k(k) 74*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 75*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 76*4bdc9457SAndroid Build Coastguard Worker } 77*4bdc9457SAndroid Build Coastguard Worker } 78*4bdc9457SAndroid Build Coastguard Worker } 79*4bdc9457SAndroid Build Coastguard Worker } 80*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,m_div_8)81*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, m_div_8) { 82*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 83*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 16; m <= 24; m += 8) { 84*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 85*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 86*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 87*4bdc9457SAndroid Build Coastguard Worker .mr(8) 88*4bdc9457SAndroid Build Coastguard Worker .nr(1) 89*4bdc9457SAndroid Build Coastguard Worker .m(m) 90*4bdc9457SAndroid Build Coastguard Worker .n(n) 91*4bdc9457SAndroid Build Coastguard Worker .k(k) 92*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 93*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 94*4bdc9457SAndroid Build Coastguard Worker } 95*4bdc9457SAndroid Build Coastguard Worker } 96*4bdc9457SAndroid Build Coastguard Worker } 97*4bdc9457SAndroid Build Coastguard Worker } 98*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,m_gt_8)99*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, m_gt_8) { 100*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 101*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 9; m < 16; m++) { 102*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 103*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 104*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 105*4bdc9457SAndroid Build Coastguard Worker .mr(8) 106*4bdc9457SAndroid Build Coastguard Worker .nr(1) 107*4bdc9457SAndroid Build Coastguard Worker .m(m) 108*4bdc9457SAndroid Build Coastguard Worker .n(n) 109*4bdc9457SAndroid Build Coastguard Worker .k(k) 110*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 111*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 112*4bdc9457SAndroid Build Coastguard Worker } 113*4bdc9457SAndroid Build Coastguard Worker } 114*4bdc9457SAndroid Build Coastguard Worker } 115*4bdc9457SAndroid Build Coastguard Worker } 116*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,output_stride)117*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, output_stride) { 118*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 119*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 120*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 121*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 122*4bdc9457SAndroid Build Coastguard Worker .mr(8) 123*4bdc9457SAndroid Build Coastguard Worker .nr(1) 124*4bdc9457SAndroid Build Coastguard Worker .m(16) 125*4bdc9457SAndroid Build Coastguard Worker .n(n) 126*4bdc9457SAndroid Build Coastguard Worker .k(k) 127*4bdc9457SAndroid Build Coastguard Worker .output_stride(19) 128*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 129*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 130*4bdc9457SAndroid Build Coastguard Worker } 131*4bdc9457SAndroid Build Coastguard Worker } 132*4bdc9457SAndroid Build Coastguard Worker } 133*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,qmin)134*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, qmin) { 135*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 136*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 137*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 138*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 139*4bdc9457SAndroid Build Coastguard Worker .mr(8) 140*4bdc9457SAndroid Build Coastguard Worker .nr(1) 141*4bdc9457SAndroid Build Coastguard Worker .m(16) 142*4bdc9457SAndroid Build Coastguard Worker .n(n) 143*4bdc9457SAndroid Build Coastguard Worker .k(k) 144*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 145*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 146*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 147*4bdc9457SAndroid Build Coastguard Worker } 148*4bdc9457SAndroid Build Coastguard Worker } 149*4bdc9457SAndroid Build Coastguard Worker } 150*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,qmax)151*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, qmax) { 152*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 153*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 154*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 155*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 156*4bdc9457SAndroid Build Coastguard Worker .mr(8) 157*4bdc9457SAndroid Build Coastguard Worker .nr(1) 158*4bdc9457SAndroid Build Coastguard Worker .m(16) 159*4bdc9457SAndroid Build Coastguard Worker .n(n) 160*4bdc9457SAndroid Build Coastguard Worker .k(k) 161*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 162*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 163*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 164*4bdc9457SAndroid Build Coastguard Worker } 165*4bdc9457SAndroid Build Coastguard Worker } 166*4bdc9457SAndroid Build Coastguard Worker } 167*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,half_sparse)168*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, half_sparse) { 169*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 170*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 171*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 172*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 173*4bdc9457SAndroid Build Coastguard Worker .mr(8) 174*4bdc9457SAndroid Build Coastguard Worker .nr(1) 175*4bdc9457SAndroid Build Coastguard Worker .m(16) 176*4bdc9457SAndroid Build Coastguard Worker .n(n) 177*4bdc9457SAndroid Build Coastguard Worker .k(k) 178*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.5f) 179*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 180*4bdc9457SAndroid Build Coastguard Worker } 181*4bdc9457SAndroid Build Coastguard Worker } 182*4bdc9457SAndroid Build Coastguard Worker } 183*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH,zero_weights)184*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH, zero_weights) { 185*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 186*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 187*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 188*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 189*4bdc9457SAndroid Build Coastguard Worker .mr(8) 190*4bdc9457SAndroid Build Coastguard Worker .nr(1) 191*4bdc9457SAndroid Build Coastguard Worker .m(16) 192*4bdc9457SAndroid Build Coastguard Worker .n(n) 193*4bdc9457SAndroid Build Coastguard Worker .k(k) 194*4bdc9457SAndroid Build Coastguard Worker .sparsity(1.0f) 195*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 196*4bdc9457SAndroid Build Coastguard Worker } 197*4bdc9457SAndroid Build Coastguard Worker } 198*4bdc9457SAndroid Build Coastguard Worker } 199*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 200*4bdc9457SAndroid Build Coastguard Worker 201*4bdc9457SAndroid Build Coastguard Worker 202*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,k_eq_2)203*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, k_eq_2) { 204*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 205*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 206*4bdc9457SAndroid Build Coastguard Worker .mr(8) 207*4bdc9457SAndroid Build Coastguard Worker .nr(1) 208*4bdc9457SAndroid Build Coastguard Worker .m(8) 209*4bdc9457SAndroid Build Coastguard Worker .n(1) 210*4bdc9457SAndroid Build Coastguard Worker .k(2) 211*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 212*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 213*4bdc9457SAndroid Build Coastguard Worker } 214*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,k_lt_2)215*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, k_lt_2) { 216*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 217*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k < 2; k++) { 218*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 219*4bdc9457SAndroid Build Coastguard Worker .mr(8) 220*4bdc9457SAndroid Build Coastguard Worker .nr(1) 221*4bdc9457SAndroid Build Coastguard Worker .m(8) 222*4bdc9457SAndroid Build Coastguard Worker .n(1) 223*4bdc9457SAndroid Build Coastguard Worker .k(k) 224*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 225*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 226*4bdc9457SAndroid Build Coastguard Worker } 227*4bdc9457SAndroid Build Coastguard Worker } 228*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,k_gt_2)229*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, k_gt_2) { 230*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 231*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 3; k < 4; k++) { 232*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 233*4bdc9457SAndroid Build Coastguard Worker .mr(8) 234*4bdc9457SAndroid Build Coastguard Worker .nr(1) 235*4bdc9457SAndroid Build Coastguard Worker .m(8) 236*4bdc9457SAndroid Build Coastguard Worker .n(1) 237*4bdc9457SAndroid Build Coastguard Worker .k(k) 238*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 239*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 240*4bdc9457SAndroid Build Coastguard Worker } 241*4bdc9457SAndroid Build Coastguard Worker } 242*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,k_div_2)243*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, k_div_2) { 244*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 245*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 4; k <= 20; k += 2) { 246*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 247*4bdc9457SAndroid Build Coastguard Worker .mr(8) 248*4bdc9457SAndroid Build Coastguard Worker .nr(1) 249*4bdc9457SAndroid Build Coastguard Worker .m(8) 250*4bdc9457SAndroid Build Coastguard Worker .n(1) 251*4bdc9457SAndroid Build Coastguard Worker .k(k) 252*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 253*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 254*4bdc9457SAndroid Build Coastguard Worker } 255*4bdc9457SAndroid Build Coastguard Worker } 256*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,n_gt_1)257*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, n_gt_1) { 258*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 259*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 2; n < 10; n++) { 260*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 261*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 262*4bdc9457SAndroid Build Coastguard Worker .mr(8) 263*4bdc9457SAndroid Build Coastguard Worker .nr(1) 264*4bdc9457SAndroid Build Coastguard Worker .m(8) 265*4bdc9457SAndroid Build Coastguard Worker .n(n) 266*4bdc9457SAndroid Build Coastguard Worker .k(k) 267*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 268*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 269*4bdc9457SAndroid Build Coastguard Worker } 270*4bdc9457SAndroid Build Coastguard Worker } 271*4bdc9457SAndroid Build Coastguard Worker } 272*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,m_lt_8)273*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, m_lt_8) { 274*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 275*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 1; m < 8; m++) { 276*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 277*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 278*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 279*4bdc9457SAndroid Build Coastguard Worker .mr(8) 280*4bdc9457SAndroid Build Coastguard Worker .nr(1) 281*4bdc9457SAndroid Build Coastguard Worker .m(m) 282*4bdc9457SAndroid Build Coastguard Worker .n(n) 283*4bdc9457SAndroid Build Coastguard Worker .k(k) 284*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 285*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 286*4bdc9457SAndroid Build Coastguard Worker } 287*4bdc9457SAndroid Build Coastguard Worker } 288*4bdc9457SAndroid Build Coastguard Worker } 289*4bdc9457SAndroid Build Coastguard Worker } 290*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,m_div_8)291*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, m_div_8) { 292*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 293*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 16; m <= 24; m += 8) { 294*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 295*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 296*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 297*4bdc9457SAndroid Build Coastguard Worker .mr(8) 298*4bdc9457SAndroid Build Coastguard Worker .nr(1) 299*4bdc9457SAndroid Build Coastguard Worker .m(m) 300*4bdc9457SAndroid Build Coastguard Worker .n(n) 301*4bdc9457SAndroid Build Coastguard Worker .k(k) 302*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 303*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 304*4bdc9457SAndroid Build Coastguard Worker } 305*4bdc9457SAndroid Build Coastguard Worker } 306*4bdc9457SAndroid Build Coastguard Worker } 307*4bdc9457SAndroid Build Coastguard Worker } 308*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,m_gt_8)309*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, m_gt_8) { 310*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 311*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 9; m < 16; m++) { 312*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 313*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 314*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 315*4bdc9457SAndroid Build Coastguard Worker .mr(8) 316*4bdc9457SAndroid Build Coastguard Worker .nr(1) 317*4bdc9457SAndroid Build Coastguard Worker .m(m) 318*4bdc9457SAndroid Build Coastguard Worker .n(n) 319*4bdc9457SAndroid Build Coastguard Worker .k(k) 320*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 321*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 322*4bdc9457SAndroid Build Coastguard Worker } 323*4bdc9457SAndroid Build Coastguard Worker } 324*4bdc9457SAndroid Build Coastguard Worker } 325*4bdc9457SAndroid Build Coastguard Worker } 326*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,output_stride)327*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, output_stride) { 328*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 329*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 330*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 331*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 332*4bdc9457SAndroid Build Coastguard Worker .mr(8) 333*4bdc9457SAndroid Build Coastguard Worker .nr(1) 334*4bdc9457SAndroid Build Coastguard Worker .m(16) 335*4bdc9457SAndroid Build Coastguard Worker .n(n) 336*4bdc9457SAndroid Build Coastguard Worker .k(k) 337*4bdc9457SAndroid Build Coastguard Worker .output_stride(19) 338*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 339*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 340*4bdc9457SAndroid Build Coastguard Worker } 341*4bdc9457SAndroid Build Coastguard Worker } 342*4bdc9457SAndroid Build Coastguard Worker } 343*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,qmin)344*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, qmin) { 345*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 346*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 347*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 348*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 349*4bdc9457SAndroid Build Coastguard Worker .mr(8) 350*4bdc9457SAndroid Build Coastguard Worker .nr(1) 351*4bdc9457SAndroid Build Coastguard Worker .m(16) 352*4bdc9457SAndroid Build Coastguard Worker .n(n) 353*4bdc9457SAndroid Build Coastguard Worker .k(k) 354*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 355*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 356*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 357*4bdc9457SAndroid Build Coastguard Worker } 358*4bdc9457SAndroid Build Coastguard Worker } 359*4bdc9457SAndroid Build Coastguard Worker } 360*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,qmax)361*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, qmax) { 362*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 363*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 364*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 365*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 366*4bdc9457SAndroid Build Coastguard Worker .mr(8) 367*4bdc9457SAndroid Build Coastguard Worker .nr(1) 368*4bdc9457SAndroid Build Coastguard Worker .m(16) 369*4bdc9457SAndroid Build Coastguard Worker .n(n) 370*4bdc9457SAndroid Build Coastguard Worker .k(k) 371*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 372*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 373*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 374*4bdc9457SAndroid Build Coastguard Worker } 375*4bdc9457SAndroid Build Coastguard Worker } 376*4bdc9457SAndroid Build Coastguard Worker } 377*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,half_sparse)378*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, half_sparse) { 379*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 380*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 381*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 382*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 383*4bdc9457SAndroid Build Coastguard Worker .mr(8) 384*4bdc9457SAndroid Build Coastguard Worker .nr(1) 385*4bdc9457SAndroid Build Coastguard Worker .m(16) 386*4bdc9457SAndroid Build Coastguard Worker .n(n) 387*4bdc9457SAndroid Build Coastguard Worker .k(k) 388*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.5f) 389*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 390*4bdc9457SAndroid Build Coastguard Worker } 391*4bdc9457SAndroid Build Coastguard Worker } 392*4bdc9457SAndroid Build Coastguard Worker } 393*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2,zero_weights)394*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_8X1__NEONFP16ARITH_X2, zero_weights) { 395*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 396*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 397*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 398*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 399*4bdc9457SAndroid Build Coastguard Worker .mr(8) 400*4bdc9457SAndroid Build Coastguard Worker .nr(1) 401*4bdc9457SAndroid Build Coastguard Worker .m(16) 402*4bdc9457SAndroid Build Coastguard Worker .n(n) 403*4bdc9457SAndroid Build Coastguard Worker .k(k) 404*4bdc9457SAndroid Build Coastguard Worker .sparsity(1.0f) 405*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_8x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 406*4bdc9457SAndroid Build Coastguard Worker } 407*4bdc9457SAndroid Build Coastguard Worker } 408*4bdc9457SAndroid Build Coastguard Worker } 409*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 410*4bdc9457SAndroid Build Coastguard Worker 411*4bdc9457SAndroid Build Coastguard Worker 412*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,k_eq_1)413*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, k_eq_1) { 414*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 415*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 416*4bdc9457SAndroid Build Coastguard Worker .mr(16) 417*4bdc9457SAndroid Build Coastguard Worker .nr(1) 418*4bdc9457SAndroid Build Coastguard Worker .m(16) 419*4bdc9457SAndroid Build Coastguard Worker .n(1) 420*4bdc9457SAndroid Build Coastguard Worker .k(1) 421*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 422*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 423*4bdc9457SAndroid Build Coastguard Worker } 424*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,k_gt_1)425*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, k_gt_1) { 426*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 427*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 2; k < 10; k++) { 428*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 429*4bdc9457SAndroid Build Coastguard Worker .mr(16) 430*4bdc9457SAndroid Build Coastguard Worker .nr(1) 431*4bdc9457SAndroid Build Coastguard Worker .m(16) 432*4bdc9457SAndroid Build Coastguard Worker .n(1) 433*4bdc9457SAndroid Build Coastguard Worker .k(k) 434*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 435*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 436*4bdc9457SAndroid Build Coastguard Worker } 437*4bdc9457SAndroid Build Coastguard Worker } 438*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,n_gt_1)439*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, n_gt_1) { 440*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 441*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 2; n < 10; n++) { 442*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 443*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 444*4bdc9457SAndroid Build Coastguard Worker .mr(16) 445*4bdc9457SAndroid Build Coastguard Worker .nr(1) 446*4bdc9457SAndroid Build Coastguard Worker .m(16) 447*4bdc9457SAndroid Build Coastguard Worker .n(n) 448*4bdc9457SAndroid Build Coastguard Worker .k(k) 449*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 450*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 451*4bdc9457SAndroid Build Coastguard Worker } 452*4bdc9457SAndroid Build Coastguard Worker } 453*4bdc9457SAndroid Build Coastguard Worker } 454*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,m_lt_16)455*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, m_lt_16) { 456*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 457*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 1; m < 16; m++) { 458*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 459*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 460*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 461*4bdc9457SAndroid Build Coastguard Worker .mr(16) 462*4bdc9457SAndroid Build Coastguard Worker .nr(1) 463*4bdc9457SAndroid Build Coastguard Worker .m(m) 464*4bdc9457SAndroid Build Coastguard Worker .n(n) 465*4bdc9457SAndroid Build Coastguard Worker .k(k) 466*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 467*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 468*4bdc9457SAndroid Build Coastguard Worker } 469*4bdc9457SAndroid Build Coastguard Worker } 470*4bdc9457SAndroid Build Coastguard Worker } 471*4bdc9457SAndroid Build Coastguard Worker } 472*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,m_div_16)473*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, m_div_16) { 474*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 475*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 32; m <= 48; m += 16) { 476*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 477*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 478*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 479*4bdc9457SAndroid Build Coastguard Worker .mr(16) 480*4bdc9457SAndroid Build Coastguard Worker .nr(1) 481*4bdc9457SAndroid Build Coastguard Worker .m(m) 482*4bdc9457SAndroid Build Coastguard Worker .n(n) 483*4bdc9457SAndroid Build Coastguard Worker .k(k) 484*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 485*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 486*4bdc9457SAndroid Build Coastguard Worker } 487*4bdc9457SAndroid Build Coastguard Worker } 488*4bdc9457SAndroid Build Coastguard Worker } 489*4bdc9457SAndroid Build Coastguard Worker } 490*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,m_gt_16)491*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, m_gt_16) { 492*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 493*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 17; m < 32; m++) { 494*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 495*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 496*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 497*4bdc9457SAndroid Build Coastguard Worker .mr(16) 498*4bdc9457SAndroid Build Coastguard Worker .nr(1) 499*4bdc9457SAndroid Build Coastguard Worker .m(m) 500*4bdc9457SAndroid Build Coastguard Worker .n(n) 501*4bdc9457SAndroid Build Coastguard Worker .k(k) 502*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 503*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 504*4bdc9457SAndroid Build Coastguard Worker } 505*4bdc9457SAndroid Build Coastguard Worker } 506*4bdc9457SAndroid Build Coastguard Worker } 507*4bdc9457SAndroid Build Coastguard Worker } 508*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,output_stride)509*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, output_stride) { 510*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 511*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 512*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 513*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 514*4bdc9457SAndroid Build Coastguard Worker .mr(16) 515*4bdc9457SAndroid Build Coastguard Worker .nr(1) 516*4bdc9457SAndroid Build Coastguard Worker .m(32) 517*4bdc9457SAndroid Build Coastguard Worker .n(n) 518*4bdc9457SAndroid Build Coastguard Worker .k(k) 519*4bdc9457SAndroid Build Coastguard Worker .output_stride(37) 520*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 521*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 522*4bdc9457SAndroid Build Coastguard Worker } 523*4bdc9457SAndroid Build Coastguard Worker } 524*4bdc9457SAndroid Build Coastguard Worker } 525*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,qmin)526*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, qmin) { 527*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 528*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 529*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 530*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 531*4bdc9457SAndroid Build Coastguard Worker .mr(16) 532*4bdc9457SAndroid Build Coastguard Worker .nr(1) 533*4bdc9457SAndroid Build Coastguard Worker .m(32) 534*4bdc9457SAndroid Build Coastguard Worker .n(n) 535*4bdc9457SAndroid Build Coastguard Worker .k(k) 536*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 537*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 538*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 539*4bdc9457SAndroid Build Coastguard Worker } 540*4bdc9457SAndroid Build Coastguard Worker } 541*4bdc9457SAndroid Build Coastguard Worker } 542*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,qmax)543*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, qmax) { 544*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 545*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 546*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 547*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 548*4bdc9457SAndroid Build Coastguard Worker .mr(16) 549*4bdc9457SAndroid Build Coastguard Worker .nr(1) 550*4bdc9457SAndroid Build Coastguard Worker .m(32) 551*4bdc9457SAndroid Build Coastguard Worker .n(n) 552*4bdc9457SAndroid Build Coastguard Worker .k(k) 553*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 554*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 555*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 556*4bdc9457SAndroid Build Coastguard Worker } 557*4bdc9457SAndroid Build Coastguard Worker } 558*4bdc9457SAndroid Build Coastguard Worker } 559*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,half_sparse)560*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, half_sparse) { 561*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 562*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 563*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 564*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 565*4bdc9457SAndroid Build Coastguard Worker .mr(16) 566*4bdc9457SAndroid Build Coastguard Worker .nr(1) 567*4bdc9457SAndroid Build Coastguard Worker .m(32) 568*4bdc9457SAndroid Build Coastguard Worker .n(n) 569*4bdc9457SAndroid Build Coastguard Worker .k(k) 570*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.5f) 571*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 572*4bdc9457SAndroid Build Coastguard Worker } 573*4bdc9457SAndroid Build Coastguard Worker } 574*4bdc9457SAndroid Build Coastguard Worker } 575*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH,zero_weights)576*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH, zero_weights) { 577*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 578*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 579*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 580*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 581*4bdc9457SAndroid Build Coastguard Worker .mr(16) 582*4bdc9457SAndroid Build Coastguard Worker .nr(1) 583*4bdc9457SAndroid Build Coastguard Worker .m(32) 584*4bdc9457SAndroid Build Coastguard Worker .n(n) 585*4bdc9457SAndroid Build Coastguard Worker .k(k) 586*4bdc9457SAndroid Build Coastguard Worker .sparsity(1.0f) 587*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 588*4bdc9457SAndroid Build Coastguard Worker } 589*4bdc9457SAndroid Build Coastguard Worker } 590*4bdc9457SAndroid Build Coastguard Worker } 591*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 592*4bdc9457SAndroid Build Coastguard Worker 593*4bdc9457SAndroid Build Coastguard Worker 594*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,k_eq_2)595*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, k_eq_2) { 596*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 597*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 598*4bdc9457SAndroid Build Coastguard Worker .mr(16) 599*4bdc9457SAndroid Build Coastguard Worker .nr(1) 600*4bdc9457SAndroid Build Coastguard Worker .m(16) 601*4bdc9457SAndroid Build Coastguard Worker .n(1) 602*4bdc9457SAndroid Build Coastguard Worker .k(2) 603*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 604*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 605*4bdc9457SAndroid Build Coastguard Worker } 606*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,k_lt_2)607*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, k_lt_2) { 608*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 609*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k < 2; k++) { 610*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 611*4bdc9457SAndroid Build Coastguard Worker .mr(16) 612*4bdc9457SAndroid Build Coastguard Worker .nr(1) 613*4bdc9457SAndroid Build Coastguard Worker .m(16) 614*4bdc9457SAndroid Build Coastguard Worker .n(1) 615*4bdc9457SAndroid Build Coastguard Worker .k(k) 616*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 617*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 618*4bdc9457SAndroid Build Coastguard Worker } 619*4bdc9457SAndroid Build Coastguard Worker } 620*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,k_gt_2)621*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, k_gt_2) { 622*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 623*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 3; k < 4; k++) { 624*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 625*4bdc9457SAndroid Build Coastguard Worker .mr(16) 626*4bdc9457SAndroid Build Coastguard Worker .nr(1) 627*4bdc9457SAndroid Build Coastguard Worker .m(16) 628*4bdc9457SAndroid Build Coastguard Worker .n(1) 629*4bdc9457SAndroid Build Coastguard Worker .k(k) 630*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 631*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 632*4bdc9457SAndroid Build Coastguard Worker } 633*4bdc9457SAndroid Build Coastguard Worker } 634*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,k_div_2)635*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, k_div_2) { 636*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 637*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 4; k <= 20; k += 2) { 638*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 639*4bdc9457SAndroid Build Coastguard Worker .mr(16) 640*4bdc9457SAndroid Build Coastguard Worker .nr(1) 641*4bdc9457SAndroid Build Coastguard Worker .m(16) 642*4bdc9457SAndroid Build Coastguard Worker .n(1) 643*4bdc9457SAndroid Build Coastguard Worker .k(k) 644*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 645*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 646*4bdc9457SAndroid Build Coastguard Worker } 647*4bdc9457SAndroid Build Coastguard Worker } 648*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,n_gt_1)649*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, n_gt_1) { 650*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 651*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 2; n < 10; n++) { 652*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 653*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 654*4bdc9457SAndroid Build Coastguard Worker .mr(16) 655*4bdc9457SAndroid Build Coastguard Worker .nr(1) 656*4bdc9457SAndroid Build Coastguard Worker .m(16) 657*4bdc9457SAndroid Build Coastguard Worker .n(n) 658*4bdc9457SAndroid Build Coastguard Worker .k(k) 659*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 660*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 661*4bdc9457SAndroid Build Coastguard Worker } 662*4bdc9457SAndroid Build Coastguard Worker } 663*4bdc9457SAndroid Build Coastguard Worker } 664*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,m_lt_16)665*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, m_lt_16) { 666*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 667*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 1; m < 16; m++) { 668*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 669*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 670*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 671*4bdc9457SAndroid Build Coastguard Worker .mr(16) 672*4bdc9457SAndroid Build Coastguard Worker .nr(1) 673*4bdc9457SAndroid Build Coastguard Worker .m(m) 674*4bdc9457SAndroid Build Coastguard Worker .n(n) 675*4bdc9457SAndroid Build Coastguard Worker .k(k) 676*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 677*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 678*4bdc9457SAndroid Build Coastguard Worker } 679*4bdc9457SAndroid Build Coastguard Worker } 680*4bdc9457SAndroid Build Coastguard Worker } 681*4bdc9457SAndroid Build Coastguard Worker } 682*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,m_div_16)683*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, m_div_16) { 684*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 685*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 32; m <= 48; m += 16) { 686*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 687*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 688*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 689*4bdc9457SAndroid Build Coastguard Worker .mr(16) 690*4bdc9457SAndroid Build Coastguard Worker .nr(1) 691*4bdc9457SAndroid Build Coastguard Worker .m(m) 692*4bdc9457SAndroid Build Coastguard Worker .n(n) 693*4bdc9457SAndroid Build Coastguard Worker .k(k) 694*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 695*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 696*4bdc9457SAndroid Build Coastguard Worker } 697*4bdc9457SAndroid Build Coastguard Worker } 698*4bdc9457SAndroid Build Coastguard Worker } 699*4bdc9457SAndroid Build Coastguard Worker } 700*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,m_gt_16)701*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, m_gt_16) { 702*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 703*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 17; m < 32; m++) { 704*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 705*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 706*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 707*4bdc9457SAndroid Build Coastguard Worker .mr(16) 708*4bdc9457SAndroid Build Coastguard Worker .nr(1) 709*4bdc9457SAndroid Build Coastguard Worker .m(m) 710*4bdc9457SAndroid Build Coastguard Worker .n(n) 711*4bdc9457SAndroid Build Coastguard Worker .k(k) 712*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 713*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 714*4bdc9457SAndroid Build Coastguard Worker } 715*4bdc9457SAndroid Build Coastguard Worker } 716*4bdc9457SAndroid Build Coastguard Worker } 717*4bdc9457SAndroid Build Coastguard Worker } 718*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,output_stride)719*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, output_stride) { 720*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 721*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 722*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 723*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 724*4bdc9457SAndroid Build Coastguard Worker .mr(16) 725*4bdc9457SAndroid Build Coastguard Worker .nr(1) 726*4bdc9457SAndroid Build Coastguard Worker .m(32) 727*4bdc9457SAndroid Build Coastguard Worker .n(n) 728*4bdc9457SAndroid Build Coastguard Worker .k(k) 729*4bdc9457SAndroid Build Coastguard Worker .output_stride(37) 730*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 731*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 732*4bdc9457SAndroid Build Coastguard Worker } 733*4bdc9457SAndroid Build Coastguard Worker } 734*4bdc9457SAndroid Build Coastguard Worker } 735*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,qmin)736*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, qmin) { 737*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 738*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 739*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 740*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 741*4bdc9457SAndroid Build Coastguard Worker .mr(16) 742*4bdc9457SAndroid Build Coastguard Worker .nr(1) 743*4bdc9457SAndroid Build Coastguard Worker .m(32) 744*4bdc9457SAndroid Build Coastguard Worker .n(n) 745*4bdc9457SAndroid Build Coastguard Worker .k(k) 746*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 747*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 748*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 749*4bdc9457SAndroid Build Coastguard Worker } 750*4bdc9457SAndroid Build Coastguard Worker } 751*4bdc9457SAndroid Build Coastguard Worker } 752*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,qmax)753*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, qmax) { 754*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 755*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 756*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 757*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 758*4bdc9457SAndroid Build Coastguard Worker .mr(16) 759*4bdc9457SAndroid Build Coastguard Worker .nr(1) 760*4bdc9457SAndroid Build Coastguard Worker .m(32) 761*4bdc9457SAndroid Build Coastguard Worker .n(n) 762*4bdc9457SAndroid Build Coastguard Worker .k(k) 763*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 764*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 765*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 766*4bdc9457SAndroid Build Coastguard Worker } 767*4bdc9457SAndroid Build Coastguard Worker } 768*4bdc9457SAndroid Build Coastguard Worker } 769*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,half_sparse)770*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, half_sparse) { 771*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 772*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 773*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 774*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 775*4bdc9457SAndroid Build Coastguard Worker .mr(16) 776*4bdc9457SAndroid Build Coastguard Worker .nr(1) 777*4bdc9457SAndroid Build Coastguard Worker .m(32) 778*4bdc9457SAndroid Build Coastguard Worker .n(n) 779*4bdc9457SAndroid Build Coastguard Worker .k(k) 780*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.5f) 781*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 782*4bdc9457SAndroid Build Coastguard Worker } 783*4bdc9457SAndroid Build Coastguard Worker } 784*4bdc9457SAndroid Build Coastguard Worker } 785*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2,zero_weights)786*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_16X1__NEONFP16ARITH_X2, zero_weights) { 787*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 788*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 789*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 790*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 791*4bdc9457SAndroid Build Coastguard Worker .mr(16) 792*4bdc9457SAndroid Build Coastguard Worker .nr(1) 793*4bdc9457SAndroid Build Coastguard Worker .m(32) 794*4bdc9457SAndroid Build Coastguard Worker .n(n) 795*4bdc9457SAndroid Build Coastguard Worker .k(k) 796*4bdc9457SAndroid Build Coastguard Worker .sparsity(1.0f) 797*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_16x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 798*4bdc9457SAndroid Build Coastguard Worker } 799*4bdc9457SAndroid Build Coastguard Worker } 800*4bdc9457SAndroid Build Coastguard Worker } 801*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 802*4bdc9457SAndroid Build Coastguard Worker 803*4bdc9457SAndroid Build Coastguard Worker 804*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,k_eq_1)805*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, k_eq_1) { 806*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 807*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 808*4bdc9457SAndroid Build Coastguard Worker .mr(24) 809*4bdc9457SAndroid Build Coastguard Worker .nr(1) 810*4bdc9457SAndroid Build Coastguard Worker .m(24) 811*4bdc9457SAndroid Build Coastguard Worker .n(1) 812*4bdc9457SAndroid Build Coastguard Worker .k(1) 813*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 814*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 815*4bdc9457SAndroid Build Coastguard Worker } 816*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,k_gt_1)817*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, k_gt_1) { 818*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 819*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 2; k < 10; k++) { 820*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 821*4bdc9457SAndroid Build Coastguard Worker .mr(24) 822*4bdc9457SAndroid Build Coastguard Worker .nr(1) 823*4bdc9457SAndroid Build Coastguard Worker .m(24) 824*4bdc9457SAndroid Build Coastguard Worker .n(1) 825*4bdc9457SAndroid Build Coastguard Worker .k(k) 826*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 827*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 828*4bdc9457SAndroid Build Coastguard Worker } 829*4bdc9457SAndroid Build Coastguard Worker } 830*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,n_gt_1)831*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, n_gt_1) { 832*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 833*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 2; n < 10; n++) { 834*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 835*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 836*4bdc9457SAndroid Build Coastguard Worker .mr(24) 837*4bdc9457SAndroid Build Coastguard Worker .nr(1) 838*4bdc9457SAndroid Build Coastguard Worker .m(24) 839*4bdc9457SAndroid Build Coastguard Worker .n(n) 840*4bdc9457SAndroid Build Coastguard Worker .k(k) 841*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 842*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 843*4bdc9457SAndroid Build Coastguard Worker } 844*4bdc9457SAndroid Build Coastguard Worker } 845*4bdc9457SAndroid Build Coastguard Worker } 846*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,m_lt_24)847*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, m_lt_24) { 848*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 849*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 1; m < 24; m++) { 850*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 851*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 852*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 853*4bdc9457SAndroid Build Coastguard Worker .mr(24) 854*4bdc9457SAndroid Build Coastguard Worker .nr(1) 855*4bdc9457SAndroid Build Coastguard Worker .m(m) 856*4bdc9457SAndroid Build Coastguard Worker .n(n) 857*4bdc9457SAndroid Build Coastguard Worker .k(k) 858*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 859*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 860*4bdc9457SAndroid Build Coastguard Worker } 861*4bdc9457SAndroid Build Coastguard Worker } 862*4bdc9457SAndroid Build Coastguard Worker } 863*4bdc9457SAndroid Build Coastguard Worker } 864*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,m_div_24)865*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, m_div_24) { 866*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 867*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 48; m <= 72; m += 24) { 868*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 869*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 870*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 871*4bdc9457SAndroid Build Coastguard Worker .mr(24) 872*4bdc9457SAndroid Build Coastguard Worker .nr(1) 873*4bdc9457SAndroid Build Coastguard Worker .m(m) 874*4bdc9457SAndroid Build Coastguard Worker .n(n) 875*4bdc9457SAndroid Build Coastguard Worker .k(k) 876*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 877*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 878*4bdc9457SAndroid Build Coastguard Worker } 879*4bdc9457SAndroid Build Coastguard Worker } 880*4bdc9457SAndroid Build Coastguard Worker } 881*4bdc9457SAndroid Build Coastguard Worker } 882*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,m_gt_24)883*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, m_gt_24) { 884*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 885*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 25; m < 48; m++) { 886*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 887*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 888*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 889*4bdc9457SAndroid Build Coastguard Worker .mr(24) 890*4bdc9457SAndroid Build Coastguard Worker .nr(1) 891*4bdc9457SAndroid Build Coastguard Worker .m(m) 892*4bdc9457SAndroid Build Coastguard Worker .n(n) 893*4bdc9457SAndroid Build Coastguard Worker .k(k) 894*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 895*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 896*4bdc9457SAndroid Build Coastguard Worker } 897*4bdc9457SAndroid Build Coastguard Worker } 898*4bdc9457SAndroid Build Coastguard Worker } 899*4bdc9457SAndroid Build Coastguard Worker } 900*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,output_stride)901*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, output_stride) { 902*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 903*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 904*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 905*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 906*4bdc9457SAndroid Build Coastguard Worker .mr(24) 907*4bdc9457SAndroid Build Coastguard Worker .nr(1) 908*4bdc9457SAndroid Build Coastguard Worker .m(48) 909*4bdc9457SAndroid Build Coastguard Worker .n(n) 910*4bdc9457SAndroid Build Coastguard Worker .k(k) 911*4bdc9457SAndroid Build Coastguard Worker .output_stride(53) 912*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 913*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 914*4bdc9457SAndroid Build Coastguard Worker } 915*4bdc9457SAndroid Build Coastguard Worker } 916*4bdc9457SAndroid Build Coastguard Worker } 917*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,qmin)918*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, qmin) { 919*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 920*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 921*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 922*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 923*4bdc9457SAndroid Build Coastguard Worker .mr(24) 924*4bdc9457SAndroid Build Coastguard Worker .nr(1) 925*4bdc9457SAndroid Build Coastguard Worker .m(48) 926*4bdc9457SAndroid Build Coastguard Worker .n(n) 927*4bdc9457SAndroid Build Coastguard Worker .k(k) 928*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 929*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 930*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 931*4bdc9457SAndroid Build Coastguard Worker } 932*4bdc9457SAndroid Build Coastguard Worker } 933*4bdc9457SAndroid Build Coastguard Worker } 934*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,qmax)935*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, qmax) { 936*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 937*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 938*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 939*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 940*4bdc9457SAndroid Build Coastguard Worker .mr(24) 941*4bdc9457SAndroid Build Coastguard Worker .nr(1) 942*4bdc9457SAndroid Build Coastguard Worker .m(48) 943*4bdc9457SAndroid Build Coastguard Worker .n(n) 944*4bdc9457SAndroid Build Coastguard Worker .k(k) 945*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 946*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 947*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 948*4bdc9457SAndroid Build Coastguard Worker } 949*4bdc9457SAndroid Build Coastguard Worker } 950*4bdc9457SAndroid Build Coastguard Worker } 951*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,half_sparse)952*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, half_sparse) { 953*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 954*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 955*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 956*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 957*4bdc9457SAndroid Build Coastguard Worker .mr(24) 958*4bdc9457SAndroid Build Coastguard Worker .nr(1) 959*4bdc9457SAndroid Build Coastguard Worker .m(48) 960*4bdc9457SAndroid Build Coastguard Worker .n(n) 961*4bdc9457SAndroid Build Coastguard Worker .k(k) 962*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.5f) 963*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 964*4bdc9457SAndroid Build Coastguard Worker } 965*4bdc9457SAndroid Build Coastguard Worker } 966*4bdc9457SAndroid Build Coastguard Worker } 967*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH,zero_weights)968*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH, zero_weights) { 969*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 970*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 971*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 972*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 973*4bdc9457SAndroid Build Coastguard Worker .mr(24) 974*4bdc9457SAndroid Build Coastguard Worker .nr(1) 975*4bdc9457SAndroid Build Coastguard Worker .m(48) 976*4bdc9457SAndroid Build Coastguard Worker .n(n) 977*4bdc9457SAndroid Build Coastguard Worker .k(k) 978*4bdc9457SAndroid Build Coastguard Worker .sparsity(1.0f) 979*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 980*4bdc9457SAndroid Build Coastguard Worker } 981*4bdc9457SAndroid Build Coastguard Worker } 982*4bdc9457SAndroid Build Coastguard Worker } 983*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 984*4bdc9457SAndroid Build Coastguard Worker 985*4bdc9457SAndroid Build Coastguard Worker 986*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,k_eq_2)987*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, k_eq_2) { 988*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 989*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 990*4bdc9457SAndroid Build Coastguard Worker .mr(24) 991*4bdc9457SAndroid Build Coastguard Worker .nr(1) 992*4bdc9457SAndroid Build Coastguard Worker .m(24) 993*4bdc9457SAndroid Build Coastguard Worker .n(1) 994*4bdc9457SAndroid Build Coastguard Worker .k(2) 995*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 996*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 997*4bdc9457SAndroid Build Coastguard Worker } 998*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,k_lt_2)999*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, k_lt_2) { 1000*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1001*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k < 2; k++) { 1002*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1003*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1004*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1005*4bdc9457SAndroid Build Coastguard Worker .m(24) 1006*4bdc9457SAndroid Build Coastguard Worker .n(1) 1007*4bdc9457SAndroid Build Coastguard Worker .k(k) 1008*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1009*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1010*4bdc9457SAndroid Build Coastguard Worker } 1011*4bdc9457SAndroid Build Coastguard Worker } 1012*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,k_gt_2)1013*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, k_gt_2) { 1014*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1015*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 3; k < 4; k++) { 1016*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1017*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1018*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1019*4bdc9457SAndroid Build Coastguard Worker .m(24) 1020*4bdc9457SAndroid Build Coastguard Worker .n(1) 1021*4bdc9457SAndroid Build Coastguard Worker .k(k) 1022*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1023*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1024*4bdc9457SAndroid Build Coastguard Worker } 1025*4bdc9457SAndroid Build Coastguard Worker } 1026*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,k_div_2)1027*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, k_div_2) { 1028*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1029*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 4; k <= 20; k += 2) { 1030*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1031*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1032*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1033*4bdc9457SAndroid Build Coastguard Worker .m(24) 1034*4bdc9457SAndroid Build Coastguard Worker .n(1) 1035*4bdc9457SAndroid Build Coastguard Worker .k(k) 1036*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1037*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1038*4bdc9457SAndroid Build Coastguard Worker } 1039*4bdc9457SAndroid Build Coastguard Worker } 1040*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,n_gt_1)1041*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, n_gt_1) { 1042*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1043*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 2; n < 10; n++) { 1044*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1045*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1046*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1047*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1048*4bdc9457SAndroid Build Coastguard Worker .m(24) 1049*4bdc9457SAndroid Build Coastguard Worker .n(n) 1050*4bdc9457SAndroid Build Coastguard Worker .k(k) 1051*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1052*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1053*4bdc9457SAndroid Build Coastguard Worker } 1054*4bdc9457SAndroid Build Coastguard Worker } 1055*4bdc9457SAndroid Build Coastguard Worker } 1056*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,m_lt_24)1057*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, m_lt_24) { 1058*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1059*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 1; m < 24; m++) { 1060*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1061*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1062*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1063*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1064*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1065*4bdc9457SAndroid Build Coastguard Worker .m(m) 1066*4bdc9457SAndroid Build Coastguard Worker .n(n) 1067*4bdc9457SAndroid Build Coastguard Worker .k(k) 1068*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1069*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1070*4bdc9457SAndroid Build Coastguard Worker } 1071*4bdc9457SAndroid Build Coastguard Worker } 1072*4bdc9457SAndroid Build Coastguard Worker } 1073*4bdc9457SAndroid Build Coastguard Worker } 1074*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,m_div_24)1075*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, m_div_24) { 1076*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1077*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 48; m <= 72; m += 24) { 1078*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1079*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1080*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1081*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1082*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1083*4bdc9457SAndroid Build Coastguard Worker .m(m) 1084*4bdc9457SAndroid Build Coastguard Worker .n(n) 1085*4bdc9457SAndroid Build Coastguard Worker .k(k) 1086*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1087*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1088*4bdc9457SAndroid Build Coastguard Worker } 1089*4bdc9457SAndroid Build Coastguard Worker } 1090*4bdc9457SAndroid Build Coastguard Worker } 1091*4bdc9457SAndroid Build Coastguard Worker } 1092*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,m_gt_24)1093*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, m_gt_24) { 1094*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1095*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 25; m < 48; m++) { 1096*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1097*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1098*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1099*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1100*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1101*4bdc9457SAndroid Build Coastguard Worker .m(m) 1102*4bdc9457SAndroid Build Coastguard Worker .n(n) 1103*4bdc9457SAndroid Build Coastguard Worker .k(k) 1104*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1105*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1106*4bdc9457SAndroid Build Coastguard Worker } 1107*4bdc9457SAndroid Build Coastguard Worker } 1108*4bdc9457SAndroid Build Coastguard Worker } 1109*4bdc9457SAndroid Build Coastguard Worker } 1110*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,output_stride)1111*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, output_stride) { 1112*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1113*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1114*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1115*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1116*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1117*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1118*4bdc9457SAndroid Build Coastguard Worker .m(48) 1119*4bdc9457SAndroid Build Coastguard Worker .n(n) 1120*4bdc9457SAndroid Build Coastguard Worker .k(k) 1121*4bdc9457SAndroid Build Coastguard Worker .output_stride(53) 1122*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1123*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1124*4bdc9457SAndroid Build Coastguard Worker } 1125*4bdc9457SAndroid Build Coastguard Worker } 1126*4bdc9457SAndroid Build Coastguard Worker } 1127*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,qmin)1128*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, qmin) { 1129*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1130*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1131*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1132*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1133*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1134*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1135*4bdc9457SAndroid Build Coastguard Worker .m(48) 1136*4bdc9457SAndroid Build Coastguard Worker .n(n) 1137*4bdc9457SAndroid Build Coastguard Worker .k(k) 1138*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1139*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 1140*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1141*4bdc9457SAndroid Build Coastguard Worker } 1142*4bdc9457SAndroid Build Coastguard Worker } 1143*4bdc9457SAndroid Build Coastguard Worker } 1144*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,qmax)1145*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, qmax) { 1146*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1147*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1148*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1149*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1150*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1151*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1152*4bdc9457SAndroid Build Coastguard Worker .m(48) 1153*4bdc9457SAndroid Build Coastguard Worker .n(n) 1154*4bdc9457SAndroid Build Coastguard Worker .k(k) 1155*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1156*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 1157*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1158*4bdc9457SAndroid Build Coastguard Worker } 1159*4bdc9457SAndroid Build Coastguard Worker } 1160*4bdc9457SAndroid Build Coastguard Worker } 1161*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,half_sparse)1162*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, half_sparse) { 1163*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1164*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1165*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1166*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1167*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1168*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1169*4bdc9457SAndroid Build Coastguard Worker .m(48) 1170*4bdc9457SAndroid Build Coastguard Worker .n(n) 1171*4bdc9457SAndroid Build Coastguard Worker .k(k) 1172*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.5f) 1173*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1174*4bdc9457SAndroid Build Coastguard Worker } 1175*4bdc9457SAndroid Build Coastguard Worker } 1176*4bdc9457SAndroid Build Coastguard Worker } 1177*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2,zero_weights)1178*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_24X1__NEONFP16ARITH_X2, zero_weights) { 1179*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1180*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1181*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1182*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1183*4bdc9457SAndroid Build Coastguard Worker .mr(24) 1184*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1185*4bdc9457SAndroid Build Coastguard Worker .m(48) 1186*4bdc9457SAndroid Build Coastguard Worker .n(n) 1187*4bdc9457SAndroid Build Coastguard Worker .k(k) 1188*4bdc9457SAndroid Build Coastguard Worker .sparsity(1.0f) 1189*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_24x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1190*4bdc9457SAndroid Build Coastguard Worker } 1191*4bdc9457SAndroid Build Coastguard Worker } 1192*4bdc9457SAndroid Build Coastguard Worker } 1193*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 1194*4bdc9457SAndroid Build Coastguard Worker 1195*4bdc9457SAndroid Build Coastguard Worker 1196*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,k_eq_1)1197*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, k_eq_1) { 1198*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1199*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1200*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1201*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1202*4bdc9457SAndroid Build Coastguard Worker .m(32) 1203*4bdc9457SAndroid Build Coastguard Worker .n(1) 1204*4bdc9457SAndroid Build Coastguard Worker .k(1) 1205*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1206*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1207*4bdc9457SAndroid Build Coastguard Worker } 1208*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,k_gt_1)1209*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, k_gt_1) { 1210*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1211*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 2; k < 10; k++) { 1212*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1213*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1214*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1215*4bdc9457SAndroid Build Coastguard Worker .m(32) 1216*4bdc9457SAndroid Build Coastguard Worker .n(1) 1217*4bdc9457SAndroid Build Coastguard Worker .k(k) 1218*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1219*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1220*4bdc9457SAndroid Build Coastguard Worker } 1221*4bdc9457SAndroid Build Coastguard Worker } 1222*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,n_gt_1)1223*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, n_gt_1) { 1224*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1225*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 2; n < 10; n++) { 1226*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 1227*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1228*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1229*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1230*4bdc9457SAndroid Build Coastguard Worker .m(32) 1231*4bdc9457SAndroid Build Coastguard Worker .n(n) 1232*4bdc9457SAndroid Build Coastguard Worker .k(k) 1233*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1234*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1235*4bdc9457SAndroid Build Coastguard Worker } 1236*4bdc9457SAndroid Build Coastguard Worker } 1237*4bdc9457SAndroid Build Coastguard Worker } 1238*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,m_lt_32)1239*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, m_lt_32) { 1240*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1241*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 1; m < 32; m++) { 1242*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1243*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 1244*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1245*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1246*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1247*4bdc9457SAndroid Build Coastguard Worker .m(m) 1248*4bdc9457SAndroid Build Coastguard Worker .n(n) 1249*4bdc9457SAndroid Build Coastguard Worker .k(k) 1250*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1251*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1252*4bdc9457SAndroid Build Coastguard Worker } 1253*4bdc9457SAndroid Build Coastguard Worker } 1254*4bdc9457SAndroid Build Coastguard Worker } 1255*4bdc9457SAndroid Build Coastguard Worker } 1256*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,m_div_32)1257*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, m_div_32) { 1258*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1259*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 64; m <= 96; m += 32) { 1260*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1261*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 1262*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1263*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1264*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1265*4bdc9457SAndroid Build Coastguard Worker .m(m) 1266*4bdc9457SAndroid Build Coastguard Worker .n(n) 1267*4bdc9457SAndroid Build Coastguard Worker .k(k) 1268*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1269*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1270*4bdc9457SAndroid Build Coastguard Worker } 1271*4bdc9457SAndroid Build Coastguard Worker } 1272*4bdc9457SAndroid Build Coastguard Worker } 1273*4bdc9457SAndroid Build Coastguard Worker } 1274*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,m_gt_32)1275*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, m_gt_32) { 1276*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1277*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 33; m < 64; m++) { 1278*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1279*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 1280*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1281*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1282*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1283*4bdc9457SAndroid Build Coastguard Worker .m(m) 1284*4bdc9457SAndroid Build Coastguard Worker .n(n) 1285*4bdc9457SAndroid Build Coastguard Worker .k(k) 1286*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1287*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1288*4bdc9457SAndroid Build Coastguard Worker } 1289*4bdc9457SAndroid Build Coastguard Worker } 1290*4bdc9457SAndroid Build Coastguard Worker } 1291*4bdc9457SAndroid Build Coastguard Worker } 1292*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,output_stride)1293*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, output_stride) { 1294*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1295*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1296*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 1297*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1298*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1299*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1300*4bdc9457SAndroid Build Coastguard Worker .m(64) 1301*4bdc9457SAndroid Build Coastguard Worker .n(n) 1302*4bdc9457SAndroid Build Coastguard Worker .k(k) 1303*4bdc9457SAndroid Build Coastguard Worker .output_stride(67) 1304*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1305*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1306*4bdc9457SAndroid Build Coastguard Worker } 1307*4bdc9457SAndroid Build Coastguard Worker } 1308*4bdc9457SAndroid Build Coastguard Worker } 1309*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,qmin)1310*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, qmin) { 1311*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1312*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1313*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 1314*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1315*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1316*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1317*4bdc9457SAndroid Build Coastguard Worker .m(64) 1318*4bdc9457SAndroid Build Coastguard Worker .n(n) 1319*4bdc9457SAndroid Build Coastguard Worker .k(k) 1320*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1321*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 1322*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1323*4bdc9457SAndroid Build Coastguard Worker } 1324*4bdc9457SAndroid Build Coastguard Worker } 1325*4bdc9457SAndroid Build Coastguard Worker } 1326*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,qmax)1327*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, qmax) { 1328*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1329*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1330*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 1331*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1332*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1333*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1334*4bdc9457SAndroid Build Coastguard Worker .m(64) 1335*4bdc9457SAndroid Build Coastguard Worker .n(n) 1336*4bdc9457SAndroid Build Coastguard Worker .k(k) 1337*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1338*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 1339*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1340*4bdc9457SAndroid Build Coastguard Worker } 1341*4bdc9457SAndroid Build Coastguard Worker } 1342*4bdc9457SAndroid Build Coastguard Worker } 1343*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,half_sparse)1344*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, half_sparse) { 1345*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1346*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1347*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 1348*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1349*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1350*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1351*4bdc9457SAndroid Build Coastguard Worker .m(64) 1352*4bdc9457SAndroid Build Coastguard Worker .n(n) 1353*4bdc9457SAndroid Build Coastguard Worker .k(k) 1354*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.5f) 1355*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1356*4bdc9457SAndroid Build Coastguard Worker } 1357*4bdc9457SAndroid Build Coastguard Worker } 1358*4bdc9457SAndroid Build Coastguard Worker } 1359*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH,zero_weights)1360*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH, zero_weights) { 1361*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1362*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1363*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 5; k += 2) { 1364*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1365*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1366*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1367*4bdc9457SAndroid Build Coastguard Worker .m(64) 1368*4bdc9457SAndroid Build Coastguard Worker .n(n) 1369*4bdc9457SAndroid Build Coastguard Worker .k(k) 1370*4bdc9457SAndroid Build Coastguard Worker .sparsity(1.0f) 1371*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith, xnn_init_f16_minmax_neon_params); 1372*4bdc9457SAndroid Build Coastguard Worker } 1373*4bdc9457SAndroid Build Coastguard Worker } 1374*4bdc9457SAndroid Build Coastguard Worker } 1375*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 1376*4bdc9457SAndroid Build Coastguard Worker 1377*4bdc9457SAndroid Build Coastguard Worker 1378*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,k_eq_2)1379*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, k_eq_2) { 1380*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1381*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1382*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1383*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1384*4bdc9457SAndroid Build Coastguard Worker .m(32) 1385*4bdc9457SAndroid Build Coastguard Worker .n(1) 1386*4bdc9457SAndroid Build Coastguard Worker .k(2) 1387*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1388*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1389*4bdc9457SAndroid Build Coastguard Worker } 1390*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,k_lt_2)1391*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, k_lt_2) { 1392*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1393*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k < 2; k++) { 1394*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1395*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1396*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1397*4bdc9457SAndroid Build Coastguard Worker .m(32) 1398*4bdc9457SAndroid Build Coastguard Worker .n(1) 1399*4bdc9457SAndroid Build Coastguard Worker .k(k) 1400*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1401*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1402*4bdc9457SAndroid Build Coastguard Worker } 1403*4bdc9457SAndroid Build Coastguard Worker } 1404*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,k_gt_2)1405*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, k_gt_2) { 1406*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1407*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 3; k < 4; k++) { 1408*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1409*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1410*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1411*4bdc9457SAndroid Build Coastguard Worker .m(32) 1412*4bdc9457SAndroid Build Coastguard Worker .n(1) 1413*4bdc9457SAndroid Build Coastguard Worker .k(k) 1414*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1415*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1416*4bdc9457SAndroid Build Coastguard Worker } 1417*4bdc9457SAndroid Build Coastguard Worker } 1418*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,k_div_2)1419*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, k_div_2) { 1420*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1421*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 4; k <= 20; k += 2) { 1422*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1423*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1424*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1425*4bdc9457SAndroid Build Coastguard Worker .m(32) 1426*4bdc9457SAndroid Build Coastguard Worker .n(1) 1427*4bdc9457SAndroid Build Coastguard Worker .k(k) 1428*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1429*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1430*4bdc9457SAndroid Build Coastguard Worker } 1431*4bdc9457SAndroid Build Coastguard Worker } 1432*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,n_gt_1)1433*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, n_gt_1) { 1434*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1435*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 2; n < 10; n++) { 1436*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1437*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1438*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1439*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1440*4bdc9457SAndroid Build Coastguard Worker .m(32) 1441*4bdc9457SAndroid Build Coastguard Worker .n(n) 1442*4bdc9457SAndroid Build Coastguard Worker .k(k) 1443*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1444*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1445*4bdc9457SAndroid Build Coastguard Worker } 1446*4bdc9457SAndroid Build Coastguard Worker } 1447*4bdc9457SAndroid Build Coastguard Worker } 1448*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,m_lt_32)1449*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, m_lt_32) { 1450*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1451*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 1; m < 32; m++) { 1452*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1453*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1454*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1455*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1456*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1457*4bdc9457SAndroid Build Coastguard Worker .m(m) 1458*4bdc9457SAndroid Build Coastguard Worker .n(n) 1459*4bdc9457SAndroid Build Coastguard Worker .k(k) 1460*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1461*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1462*4bdc9457SAndroid Build Coastguard Worker } 1463*4bdc9457SAndroid Build Coastguard Worker } 1464*4bdc9457SAndroid Build Coastguard Worker } 1465*4bdc9457SAndroid Build Coastguard Worker } 1466*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,m_div_32)1467*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, m_div_32) { 1468*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1469*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 64; m <= 96; m += 32) { 1470*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1471*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1472*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1473*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1474*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1475*4bdc9457SAndroid Build Coastguard Worker .m(m) 1476*4bdc9457SAndroid Build Coastguard Worker .n(n) 1477*4bdc9457SAndroid Build Coastguard Worker .k(k) 1478*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1479*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1480*4bdc9457SAndroid Build Coastguard Worker } 1481*4bdc9457SAndroid Build Coastguard Worker } 1482*4bdc9457SAndroid Build Coastguard Worker } 1483*4bdc9457SAndroid Build Coastguard Worker } 1484*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,m_gt_32)1485*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, m_gt_32) { 1486*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1487*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 33; m < 64; m++) { 1488*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1489*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1490*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1491*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1492*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1493*4bdc9457SAndroid Build Coastguard Worker .m(m) 1494*4bdc9457SAndroid Build Coastguard Worker .n(n) 1495*4bdc9457SAndroid Build Coastguard Worker .k(k) 1496*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1497*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1498*4bdc9457SAndroid Build Coastguard Worker } 1499*4bdc9457SAndroid Build Coastguard Worker } 1500*4bdc9457SAndroid Build Coastguard Worker } 1501*4bdc9457SAndroid Build Coastguard Worker } 1502*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,output_stride)1503*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, output_stride) { 1504*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1505*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1506*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1507*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1508*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1509*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1510*4bdc9457SAndroid Build Coastguard Worker .m(64) 1511*4bdc9457SAndroid Build Coastguard Worker .n(n) 1512*4bdc9457SAndroid Build Coastguard Worker .k(k) 1513*4bdc9457SAndroid Build Coastguard Worker .output_stride(67) 1514*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1515*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1516*4bdc9457SAndroid Build Coastguard Worker } 1517*4bdc9457SAndroid Build Coastguard Worker } 1518*4bdc9457SAndroid Build Coastguard Worker } 1519*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,qmin)1520*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, qmin) { 1521*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1522*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1523*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1524*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1525*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1526*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1527*4bdc9457SAndroid Build Coastguard Worker .m(64) 1528*4bdc9457SAndroid Build Coastguard Worker .n(n) 1529*4bdc9457SAndroid Build Coastguard Worker .k(k) 1530*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1531*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 1532*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1533*4bdc9457SAndroid Build Coastguard Worker } 1534*4bdc9457SAndroid Build Coastguard Worker } 1535*4bdc9457SAndroid Build Coastguard Worker } 1536*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,qmax)1537*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, qmax) { 1538*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1539*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1540*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1541*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1542*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1543*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1544*4bdc9457SAndroid Build Coastguard Worker .m(64) 1545*4bdc9457SAndroid Build Coastguard Worker .n(n) 1546*4bdc9457SAndroid Build Coastguard Worker .k(k) 1547*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.0f) 1548*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 1549*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1550*4bdc9457SAndroid Build Coastguard Worker } 1551*4bdc9457SAndroid Build Coastguard Worker } 1552*4bdc9457SAndroid Build Coastguard Worker } 1553*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,half_sparse)1554*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, half_sparse) { 1555*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1556*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1557*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1558*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1559*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1560*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1561*4bdc9457SAndroid Build Coastguard Worker .m(64) 1562*4bdc9457SAndroid Build Coastguard Worker .n(n) 1563*4bdc9457SAndroid Build Coastguard Worker .k(k) 1564*4bdc9457SAndroid Build Coastguard Worker .sparsity(0.5f) 1565*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1566*4bdc9457SAndroid Build Coastguard Worker } 1567*4bdc9457SAndroid Build Coastguard Worker } 1568*4bdc9457SAndroid Build Coastguard Worker } 1569*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2,zero_weights)1570*4bdc9457SAndroid Build Coastguard Worker TEST(F16_SPMM_MINMAX_32X1__NEONFP16ARITH_X2, zero_weights) { 1571*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 1572*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 1; n < 10; n += 2) { 1573*4bdc9457SAndroid Build Coastguard Worker for (size_t k = 1; k <= 10; k += 3) { 1574*4bdc9457SAndroid Build Coastguard Worker SpMMMicrokernelTester() 1575*4bdc9457SAndroid Build Coastguard Worker .mr(32) 1576*4bdc9457SAndroid Build Coastguard Worker .nr(1) 1577*4bdc9457SAndroid Build Coastguard Worker .m(64) 1578*4bdc9457SAndroid Build Coastguard Worker .n(n) 1579*4bdc9457SAndroid Build Coastguard Worker .k(k) 1580*4bdc9457SAndroid Build Coastguard Worker .sparsity(1.0f) 1581*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_spmm_minmax_ukernel_32x1__neonfp16arith_x2, xnn_init_f16_minmax_neon_params); 1582*4bdc9457SAndroid Build Coastguard Worker } 1583*4bdc9457SAndroid Build Coastguard Worker } 1584*4bdc9457SAndroid Build Coastguard Worker } 1585*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 1586