1*4bdc9457SAndroid Build Coastguard Worker#!/usr/bin/env python 2*4bdc9457SAndroid Build Coastguard Worker# Copyright 2019 Google LLC 3*4bdc9457SAndroid Build Coastguard Worker# 4*4bdc9457SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 5*4bdc9457SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 6*4bdc9457SAndroid Build Coastguard Worker 7*4bdc9457SAndroid Build Coastguard Workerimport argparse 8*4bdc9457SAndroid Build Coastguard Workerimport codecs 9*4bdc9457SAndroid Build Coastguard Workerimport math 10*4bdc9457SAndroid Build Coastguard Workerimport os 11*4bdc9457SAndroid Build Coastguard Workerimport re 12*4bdc9457SAndroid Build Coastguard Workerimport sys 13*4bdc9457SAndroid Build Coastguard Workerimport yaml 14*4bdc9457SAndroid Build Coastguard Worker 15*4bdc9457SAndroid Build Coastguard Workersys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) 16*4bdc9457SAndroid Build Coastguard Workerfrom primes import next_prime 17*4bdc9457SAndroid Build Coastguard Workerimport xngen 18*4bdc9457SAndroid Build Coastguard Workerimport xnncommon 19*4bdc9457SAndroid Build Coastguard Worker 20*4bdc9457SAndroid Build Coastguard Worker 21*4bdc9457SAndroid Build Coastguard Workerparser = argparse.ArgumentParser(description='MaxPool microkernel test generator') 22*4bdc9457SAndroid Build Coastguard Workerparser.add_argument("-s", "--spec", metavar="FILE", required=True, 23*4bdc9457SAndroid Build Coastguard Worker help="Specification (YAML) file") 24*4bdc9457SAndroid Build Coastguard Workerparser.add_argument("-o", "--output", metavar="FILE", required=True, 25*4bdc9457SAndroid Build Coastguard Worker help='Output (C++ source) file') 26*4bdc9457SAndroid Build Coastguard Workerparser.set_defaults(defines=list()) 27*4bdc9457SAndroid Build Coastguard Worker 28*4bdc9457SAndroid Build Coastguard Worker 29*4bdc9457SAndroid Build Coastguard Workerdef split_ukernel_name(name): 30*4bdc9457SAndroid Build Coastguard Worker match = re.fullmatch(r"xnn_(s8|u8|s16|f16|f32)_maxpool(_(minmax))?_ukernel_(\d+)p(\d+)x__(.+)_c(\d+)", name) 31*4bdc9457SAndroid Build Coastguard Worker if match is None: 32*4bdc9457SAndroid Build Coastguard Worker raise ValueError("Unexpected microkernel name: " + name) 33*4bdc9457SAndroid Build Coastguard Worker 34*4bdc9457SAndroid Build Coastguard Worker primary_tile = int(match.group(4)) 35*4bdc9457SAndroid Build Coastguard Worker incremental_tile = int(match.group(5)) 36*4bdc9457SAndroid Build Coastguard Worker channel_tile = int(match.group(7)) 37*4bdc9457SAndroid Build Coastguard Worker 38*4bdc9457SAndroid Build Coastguard Worker arch, isa = xnncommon.parse_target_name(target_name=match.group(6)) 39*4bdc9457SAndroid Build Coastguard Worker return primary_tile, incremental_tile, channel_tile, arch, isa 40*4bdc9457SAndroid Build Coastguard Worker 41*4bdc9457SAndroid Build Coastguard Worker 42*4bdc9457SAndroid Build Coastguard WorkerMAXPOOL_TEST_TEMPLATE = """\ 43*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile) { 44*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 45*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 46*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 47*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 48*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 49*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 50*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 51*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 52*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 53*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 54*4bdc9457SAndroid Build Coastguard Worker} 55*4bdc9457SAndroid Build Coastguard Worker 56*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 57*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 58*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 59*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 60*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 61*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 62*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 63*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 64*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 65*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 66*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 67*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 68*4bdc9457SAndroid Build Coastguard Worker} 69*4bdc9457SAndroid Build Coastguard Worker 70*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_qmin) { 71*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 72*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 73*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 74*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 75*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 76*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 77*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 78*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 79*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 80*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 81*4bdc9457SAndroid Build Coastguard Worker} 82*4bdc9457SAndroid Build Coastguard Worker 83*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_qmax) { 84*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 85*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 86*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 87*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 88*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 89*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 90*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 91*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 92*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 93*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 94*4bdc9457SAndroid Build Coastguard Worker} 95*4bdc9457SAndroid Build Coastguard Worker 96*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile) { 97*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 98*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 99*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 100*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 101*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 102*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 103*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 104*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 105*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 106*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 107*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 108*4bdc9457SAndroid Build Coastguard Worker } 109*4bdc9457SAndroid Build Coastguard Worker} 110*4bdc9457SAndroid Build Coastguard Worker 111*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 112*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 113*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 114*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 115*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 116*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 117*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 118*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 119*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 120*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 121*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 122*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 123*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 124*4bdc9457SAndroid Build Coastguard Worker } 125*4bdc9457SAndroid Build Coastguard Worker} 126*4bdc9457SAndroid Build Coastguard Worker 127*4bdc9457SAndroid Build Coastguard Worker$if CHANNEL_TILE > 1: 128*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile) { 129*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 130*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 131*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 132*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 133*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 134*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 135*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 136*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 137*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 138*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 139*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 140*4bdc9457SAndroid Build Coastguard Worker } 141*4bdc9457SAndroid Build Coastguard Worker } 142*4bdc9457SAndroid Build Coastguard Worker 143*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 144*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 145*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 146*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 147*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 148*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 149*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 150*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 151*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*8)}) 152*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 153*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 154*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 155*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 156*4bdc9457SAndroid Build Coastguard Worker } 157*4bdc9457SAndroid Build Coastguard Worker } 158*4bdc9457SAndroid Build Coastguard Worker 159*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_qmin) { 160*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 161*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 162*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 163*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 164*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 165*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 166*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 167*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 168*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 169*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 170*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 171*4bdc9457SAndroid Build Coastguard Worker } 172*4bdc9457SAndroid Build Coastguard Worker } 173*4bdc9457SAndroid Build Coastguard Worker 174*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_qmax) { 175*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 176*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 177*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 178*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 179*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 180*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 181*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 182*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 183*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 184*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 185*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 186*4bdc9457SAndroid Build Coastguard Worker } 187*4bdc9457SAndroid Build Coastguard Worker } 188*4bdc9457SAndroid Build Coastguard Worker 189*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile) { 190*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 191*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 192*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 193*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 194*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 195*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 196*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 197*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 198*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 199*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 200*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 201*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 202*4bdc9457SAndroid Build Coastguard Worker } 203*4bdc9457SAndroid Build Coastguard Worker } 204*4bdc9457SAndroid Build Coastguard Worker } 205*4bdc9457SAndroid Build Coastguard Worker 206*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 207*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 208*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 209*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 210*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 211*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 212*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 213*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 214*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 215*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*8)}) 216*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 217*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 218*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 219*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 220*4bdc9457SAndroid Build Coastguard Worker } 221*4bdc9457SAndroid Build Coastguard Worker } 222*4bdc9457SAndroid Build Coastguard Worker } 223*4bdc9457SAndroid Build Coastguard Worker 224*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile) { 225*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 226*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 227*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 228*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 229*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 230*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 231*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 232*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 233*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 234*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 235*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 236*4bdc9457SAndroid Build Coastguard Worker } 237*4bdc9457SAndroid Build Coastguard Worker } 238*4bdc9457SAndroid Build Coastguard Worker 239*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 240*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 241*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 242*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 243*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 244*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 245*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 246*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 247*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE)}) 248*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 249*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 250*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 251*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 252*4bdc9457SAndroid Build Coastguard Worker } 253*4bdc9457SAndroid Build Coastguard Worker } 254*4bdc9457SAndroid Build Coastguard Worker 255*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_qmin) { 256*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 257*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 258*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 259*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 260*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 261*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 262*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 263*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 264*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 265*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 266*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 267*4bdc9457SAndroid Build Coastguard Worker } 268*4bdc9457SAndroid Build Coastguard Worker } 269*4bdc9457SAndroid Build Coastguard Worker 270*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_qmax) { 271*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 272*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 273*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 274*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 275*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 276*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 277*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 278*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 279*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 280*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 281*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 282*4bdc9457SAndroid Build Coastguard Worker } 283*4bdc9457SAndroid Build Coastguard Worker } 284*4bdc9457SAndroid Build Coastguard Worker 285*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile) { 286*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 287*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 288*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 289*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 290*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 291*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 292*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 293*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 294*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 295*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 296*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 297*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 298*4bdc9457SAndroid Build Coastguard Worker } 299*4bdc9457SAndroid Build Coastguard Worker } 300*4bdc9457SAndroid Build Coastguard Worker } 301*4bdc9457SAndroid Build Coastguard Worker 302*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 303*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 304*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 305*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 306*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 307*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 308*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 309*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 310*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 311*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE)}) 312*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 313*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 314*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 315*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 316*4bdc9457SAndroid Build Coastguard Worker } 317*4bdc9457SAndroid Build Coastguard Worker } 318*4bdc9457SAndroid Build Coastguard Worker } 319*4bdc9457SAndroid Build Coastguard Worker 320*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile) { 321*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 322*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 323*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 324*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 325*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 326*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 327*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 328*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 329*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 330*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 331*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 332*4bdc9457SAndroid Build Coastguard Worker } 333*4bdc9457SAndroid Build Coastguard Worker} 334*4bdc9457SAndroid Build Coastguard Worker 335*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 336*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 337*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 338*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 339*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 340*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 341*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 342*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 343*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 344*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 345*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 346*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 347*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 348*4bdc9457SAndroid Build Coastguard Worker } 349*4bdc9457SAndroid Build Coastguard Worker} 350*4bdc9457SAndroid Build Coastguard Worker 351*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_qmin) { 352*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 353*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 354*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 355*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 356*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 357*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 358*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 359*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 360*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 361*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 362*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 363*4bdc9457SAndroid Build Coastguard Worker } 364*4bdc9457SAndroid Build Coastguard Worker} 365*4bdc9457SAndroid Build Coastguard Worker 366*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_qmax) { 367*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 368*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 369*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 370*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 371*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 372*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 373*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 374*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 375*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 376*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 377*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 378*4bdc9457SAndroid Build Coastguard Worker } 379*4bdc9457SAndroid Build Coastguard Worker} 380*4bdc9457SAndroid Build Coastguard Worker 381*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile) { 382*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 383*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 384*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 385*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 386*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 387*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 388*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 389*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 390*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 391*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 392*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 393*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 394*4bdc9457SAndroid Build Coastguard Worker } 395*4bdc9457SAndroid Build Coastguard Worker } 396*4bdc9457SAndroid Build Coastguard Worker} 397*4bdc9457SAndroid Build Coastguard Worker 398*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 399*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 400*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 401*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 402*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 403*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 404*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 405*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 406*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 407*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 408*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 409*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 410*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 411*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 412*4bdc9457SAndroid Build Coastguard Worker } 413*4bdc9457SAndroid Build Coastguard Worker } 414*4bdc9457SAndroid Build Coastguard Worker} 415*4bdc9457SAndroid Build Coastguard Worker 416*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile) { 417*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 418*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 419*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 420*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 421*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 422*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 423*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 424*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 425*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 426*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 427*4bdc9457SAndroid Build Coastguard Worker} 428*4bdc9457SAndroid Build Coastguard Worker 429*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 430*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 431*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 432*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 433*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 434*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 435*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 436*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 437*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 438*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 439*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 440*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 441*4bdc9457SAndroid Build Coastguard Worker} 442*4bdc9457SAndroid Build Coastguard Worker 443*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_qmin) { 444*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 445*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 446*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 447*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 448*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 449*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 450*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 451*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 452*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 453*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 454*4bdc9457SAndroid Build Coastguard Worker} 455*4bdc9457SAndroid Build Coastguard Worker 456*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_qmax) { 457*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 458*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 459*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 460*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 461*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 462*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 463*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 464*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 465*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 466*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 467*4bdc9457SAndroid Build Coastguard Worker} 468*4bdc9457SAndroid Build Coastguard Worker 469*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile) { 470*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 471*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 472*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 473*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 474*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 475*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 476*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 477*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 478*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 479*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 480*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 481*4bdc9457SAndroid Build Coastguard Worker } 482*4bdc9457SAndroid Build Coastguard Worker} 483*4bdc9457SAndroid Build Coastguard Worker 484*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 485*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 486*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 487*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 488*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 489*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 490*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 491*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 492*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 493*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 494*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 495*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 496*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 497*4bdc9457SAndroid Build Coastguard Worker } 498*4bdc9457SAndroid Build Coastguard Worker} 499*4bdc9457SAndroid Build Coastguard Worker 500*4bdc9457SAndroid Build Coastguard Worker$if CHANNEL_TILE > 1: 501*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile) { 502*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 503*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 504*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 505*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 506*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 507*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 508*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 509*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 510*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 511*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 512*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 513*4bdc9457SAndroid Build Coastguard Worker } 514*4bdc9457SAndroid Build Coastguard Worker } 515*4bdc9457SAndroid Build Coastguard Worker 516*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 517*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 518*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 519*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 520*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 521*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 522*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 523*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 524*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*5)}) 525*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 526*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 527*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 528*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 529*4bdc9457SAndroid Build Coastguard Worker } 530*4bdc9457SAndroid Build Coastguard Worker } 531*4bdc9457SAndroid Build Coastguard Worker 532*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_qmin) { 533*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 534*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 535*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 536*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 537*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 538*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 539*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 540*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 541*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 542*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 543*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 544*4bdc9457SAndroid Build Coastguard Worker } 545*4bdc9457SAndroid Build Coastguard Worker } 546*4bdc9457SAndroid Build Coastguard Worker 547*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_qmax) { 548*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 549*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 550*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 551*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 552*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 553*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 554*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 555*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 556*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 557*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 558*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 559*4bdc9457SAndroid Build Coastguard Worker } 560*4bdc9457SAndroid Build Coastguard Worker } 561*4bdc9457SAndroid Build Coastguard Worker 562*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile) { 563*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 564*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 565*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 566*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 567*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 568*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 569*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 570*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 571*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 572*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 573*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 574*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 575*4bdc9457SAndroid Build Coastguard Worker } 576*4bdc9457SAndroid Build Coastguard Worker } 577*4bdc9457SAndroid Build Coastguard Worker } 578*4bdc9457SAndroid Build Coastguard Worker 579*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 580*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 581*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 582*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 583*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 584*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 585*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 586*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 587*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 588*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*8)}) 589*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 590*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 591*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 592*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 593*4bdc9457SAndroid Build Coastguard Worker } 594*4bdc9457SAndroid Build Coastguard Worker } 595*4bdc9457SAndroid Build Coastguard Worker } 596*4bdc9457SAndroid Build Coastguard Worker 597*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile) { 598*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 599*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 600*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 601*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 602*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 603*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 604*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 605*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 606*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 607*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 608*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 609*4bdc9457SAndroid Build Coastguard Worker } 610*4bdc9457SAndroid Build Coastguard Worker } 611*4bdc9457SAndroid Build Coastguard Worker 612*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 613*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 614*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 615*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 616*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 617*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 618*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 619*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 620*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE)}) 621*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 622*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 623*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 624*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 625*4bdc9457SAndroid Build Coastguard Worker } 626*4bdc9457SAndroid Build Coastguard Worker } 627*4bdc9457SAndroid Build Coastguard Worker 628*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_qmin) { 629*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 630*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 631*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 632*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 633*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 634*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 635*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 636*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 637*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 638*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 639*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 640*4bdc9457SAndroid Build Coastguard Worker } 641*4bdc9457SAndroid Build Coastguard Worker } 642*4bdc9457SAndroid Build Coastguard Worker 643*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_qmax) { 644*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 645*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 646*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 647*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 648*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 649*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 650*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 651*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 652*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 653*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 654*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 655*4bdc9457SAndroid Build Coastguard Worker } 656*4bdc9457SAndroid Build Coastguard Worker } 657*4bdc9457SAndroid Build Coastguard Worker 658*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile) { 659*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 660*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 661*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 662*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 663*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 664*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 665*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 666*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 667*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 668*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 669*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 670*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 671*4bdc9457SAndroid Build Coastguard Worker } 672*4bdc9457SAndroid Build Coastguard Worker } 673*4bdc9457SAndroid Build Coastguard Worker } 674*4bdc9457SAndroid Build Coastguard Worker 675*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 676*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 677*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 678*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 679*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 680*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 681*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 682*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 683*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 684*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE)}) 685*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 686*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 687*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 688*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 689*4bdc9457SAndroid Build Coastguard Worker } 690*4bdc9457SAndroid Build Coastguard Worker } 691*4bdc9457SAndroid Build Coastguard Worker } 692*4bdc9457SAndroid Build Coastguard Worker 693*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile) { 694*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 695*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 696*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 697*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 698*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 699*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 700*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 701*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 702*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 703*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 704*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 705*4bdc9457SAndroid Build Coastguard Worker } 706*4bdc9457SAndroid Build Coastguard Worker} 707*4bdc9457SAndroid Build Coastguard Worker 708*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 709*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 710*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 711*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 712*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 713*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 714*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 715*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 716*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 717*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 718*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 719*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 720*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 721*4bdc9457SAndroid Build Coastguard Worker } 722*4bdc9457SAndroid Build Coastguard Worker} 723*4bdc9457SAndroid Build Coastguard Worker 724*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_qmin) { 725*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 726*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 727*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 728*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 729*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 730*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 731*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 732*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 733*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 734*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 735*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 736*4bdc9457SAndroid Build Coastguard Worker } 737*4bdc9457SAndroid Build Coastguard Worker} 738*4bdc9457SAndroid Build Coastguard Worker 739*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_qmax) { 740*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 741*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 742*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 743*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 744*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 745*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 746*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 747*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 748*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 749*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 750*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 751*4bdc9457SAndroid Build Coastguard Worker } 752*4bdc9457SAndroid Build Coastguard Worker} 753*4bdc9457SAndroid Build Coastguard Worker 754*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile) { 755*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 756*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 757*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 758*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 759*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 760*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 761*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 762*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 763*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 764*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 765*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 766*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 767*4bdc9457SAndroid Build Coastguard Worker } 768*4bdc9457SAndroid Build Coastguard Worker } 769*4bdc9457SAndroid Build Coastguard Worker} 770*4bdc9457SAndroid Build Coastguard Worker 771*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 772*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 773*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 774*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 775*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 776*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 777*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 778*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 779*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 780*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 781*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 782*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 783*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 784*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 785*4bdc9457SAndroid Build Coastguard Worker } 786*4bdc9457SAndroid Build Coastguard Worker } 787*4bdc9457SAndroid Build Coastguard Worker} 788*4bdc9457SAndroid Build Coastguard Worker 789*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass) { 790*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 791*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 792*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 793*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 794*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 795*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 796*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 797*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 798*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 799*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 800*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 801*4bdc9457SAndroid Build Coastguard Worker } 802*4bdc9457SAndroid Build Coastguard Worker} 803*4bdc9457SAndroid Build Coastguard Worker 804*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_input_offset) { 805*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 806*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 807*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 808*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 809*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 810*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 811*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 812*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 813*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 814*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 815*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 816*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 817*4bdc9457SAndroid Build Coastguard Worker } 818*4bdc9457SAndroid Build Coastguard Worker} 819*4bdc9457SAndroid Build Coastguard Worker 820*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_qmin) { 821*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 822*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 823*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 824*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 825*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 826*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 827*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 828*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 829*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 830*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 831*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 832*4bdc9457SAndroid Build Coastguard Worker } 833*4bdc9457SAndroid Build Coastguard Worker} 834*4bdc9457SAndroid Build Coastguard Worker 835*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_qmax) { 836*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 837*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 838*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 839*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 840*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 841*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 842*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 843*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 844*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 845*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 846*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 847*4bdc9457SAndroid Build Coastguard Worker } 848*4bdc9457SAndroid Build Coastguard Worker} 849*4bdc9457SAndroid Build Coastguard Worker 850*4bdc9457SAndroid Build Coastguard Worker$if CHANNEL_TILE > 1: 851*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass) { 852*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 853*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 854*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 855*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 856*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 857*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 858*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 859*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 860*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 861*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 862*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 863*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 864*4bdc9457SAndroid Build Coastguard Worker } 865*4bdc9457SAndroid Build Coastguard Worker } 866*4bdc9457SAndroid Build Coastguard Worker } 867*4bdc9457SAndroid Build Coastguard Worker 868*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_input_offset) { 869*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 870*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 871*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 872*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 873*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 874*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 875*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 876*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 877*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*8)}) 878*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 879*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 880*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 881*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 882*4bdc9457SAndroid Build Coastguard Worker } 883*4bdc9457SAndroid Build Coastguard Worker } 884*4bdc9457SAndroid Build Coastguard Worker } 885*4bdc9457SAndroid Build Coastguard Worker 886*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_qmin) { 887*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 888*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 889*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 890*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 891*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 892*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 893*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 894*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 895*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 896*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 897*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 898*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 899*4bdc9457SAndroid Build Coastguard Worker } 900*4bdc9457SAndroid Build Coastguard Worker } 901*4bdc9457SAndroid Build Coastguard Worker } 902*4bdc9457SAndroid Build Coastguard Worker 903*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_qmax) { 904*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 905*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 906*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 907*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 908*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 909*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 910*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 911*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 912*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 913*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 914*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 915*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 916*4bdc9457SAndroid Build Coastguard Worker } 917*4bdc9457SAndroid Build Coastguard Worker } 918*4bdc9457SAndroid Build Coastguard Worker } 919*4bdc9457SAndroid Build Coastguard Worker 920*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass) { 921*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 922*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 923*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 924*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 925*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 926*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 927*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 928*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 929*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 930*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 931*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 932*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 933*4bdc9457SAndroid Build Coastguard Worker } 934*4bdc9457SAndroid Build Coastguard Worker } 935*4bdc9457SAndroid Build Coastguard Worker } 936*4bdc9457SAndroid Build Coastguard Worker 937*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_input_offset) { 938*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 939*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 940*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 941*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 942*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 943*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 944*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 945*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 946*4bdc9457SAndroid Build Coastguard Worker .input_offset(${CHANNEL_TILE}) 947*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 948*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 949*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 950*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 951*4bdc9457SAndroid Build Coastguard Worker } 952*4bdc9457SAndroid Build Coastguard Worker } 953*4bdc9457SAndroid Build Coastguard Worker } 954*4bdc9457SAndroid Build Coastguard Worker 955*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_qmin) { 956*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 957*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 958*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 959*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 960*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 961*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 962*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 963*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 964*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 965*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 966*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 967*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 968*4bdc9457SAndroid Build Coastguard Worker } 969*4bdc9457SAndroid Build Coastguard Worker } 970*4bdc9457SAndroid Build Coastguard Worker } 971*4bdc9457SAndroid Build Coastguard Worker 972*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_qmax) { 973*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 974*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 975*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 976*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 977*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 978*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 979*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 980*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 981*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 982*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 983*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 984*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 985*4bdc9457SAndroid Build Coastguard Worker } 986*4bdc9457SAndroid Build Coastguard Worker } 987*4bdc9457SAndroid Build Coastguard Worker } 988*4bdc9457SAndroid Build Coastguard Worker 989*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass) { 990*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 991*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 992*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 993*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 994*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 995*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 996*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 997*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 998*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 999*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 1000*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 1001*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1002*4bdc9457SAndroid Build Coastguard Worker } 1003*4bdc9457SAndroid Build Coastguard Worker } 1004*4bdc9457SAndroid Build Coastguard Worker} 1005*4bdc9457SAndroid Build Coastguard Worker 1006*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_input_offset) { 1007*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 1008*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 1009*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1010*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1011*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 1012*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 1013*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1014*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 1015*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 1016*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 1017*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 1018*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 1019*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1020*4bdc9457SAndroid Build Coastguard Worker } 1021*4bdc9457SAndroid Build Coastguard Worker } 1022*4bdc9457SAndroid Build Coastguard Worker} 1023*4bdc9457SAndroid Build Coastguard Worker 1024*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_qmin) { 1025*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 1026*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 1027*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1028*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1029*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 1030*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 1031*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1032*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 1033*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 1034*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 1035*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 1036*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1037*4bdc9457SAndroid Build Coastguard Worker } 1038*4bdc9457SAndroid Build Coastguard Worker } 1039*4bdc9457SAndroid Build Coastguard Worker} 1040*4bdc9457SAndroid Build Coastguard Worker 1041*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_qmax) { 1042*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 1043*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 1044*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1045*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1046*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 1047*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 1048*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1049*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 1050*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 1051*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 1052*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 1053*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1054*4bdc9457SAndroid Build Coastguard Worker } 1055*4bdc9457SAndroid Build Coastguard Worker } 1056*4bdc9457SAndroid Build Coastguard Worker} 1057*4bdc9457SAndroid Build Coastguard Worker 1058*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels) { 1059*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 1060*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 1061*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 1062*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}}}) { 1063*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 1064*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 1065*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 1066*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 1067*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1068*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 1069*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 1070*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 1071*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 1072*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1073*4bdc9457SAndroid Build Coastguard Worker } 1074*4bdc9457SAndroid Build Coastguard Worker } 1075*4bdc9457SAndroid Build Coastguard Worker } 1076*4bdc9457SAndroid Build Coastguard Worker} 1077*4bdc9457SAndroid Build Coastguard Worker 1078*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels_with_input_offset) { 1079*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 1080*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 1081*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 1082*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}}}) { 1083*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 1084*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 1085*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 1086*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 1087*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1088*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 1089*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*5+1)}) 1090*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 1091*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 1092*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 1093*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1094*4bdc9457SAndroid Build Coastguard Worker } 1095*4bdc9457SAndroid Build Coastguard Worker } 1096*4bdc9457SAndroid Build Coastguard Worker } 1097*4bdc9457SAndroid Build Coastguard Worker} 1098*4bdc9457SAndroid Build Coastguard Worker 1099*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels_with_qmin) { 1100*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 1101*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 1102*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 1103*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}}}) { 1104*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 1105*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 1106*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 1107*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 1108*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1109*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 1110*4bdc9457SAndroid Build Coastguard Worker .qmin(${QMIN}) 1111*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 1112*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 1113*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1114*4bdc9457SAndroid Build Coastguard Worker } 1115*4bdc9457SAndroid Build Coastguard Worker } 1116*4bdc9457SAndroid Build Coastguard Worker } 1117*4bdc9457SAndroid Build Coastguard Worker} 1118*4bdc9457SAndroid Build Coastguard Worker 1119*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels_with_qmax) { 1120*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 1121*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 1122*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 1123*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}}}) { 1124*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 1125*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 1126*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 1127*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 1128*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1129*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 1130*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 1131*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 1132*4bdc9457SAndroid Build Coastguard Worker .qmax(${QMAX}) 1133*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1134*4bdc9457SAndroid Build Coastguard Worker } 1135*4bdc9457SAndroid Build Coastguard Worker } 1136*4bdc9457SAndroid Build Coastguard Worker } 1137*4bdc9457SAndroid Build Coastguard Worker} 1138*4bdc9457SAndroid Build Coastguard Worker 1139*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels_with_output_stride) { 1140*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 1141*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 1142*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 1143*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}}}) { 1144*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 1145*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 1146*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 1147*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 1148*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1149*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 1150*4bdc9457SAndroid Build Coastguard Worker .output_stride(${next_prime(CHANNEL_TILE*5+1)}) 1151*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 1152*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 1153*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 1154*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1155*4bdc9457SAndroid Build Coastguard Worker } 1156*4bdc9457SAndroid Build Coastguard Worker } 1157*4bdc9457SAndroid Build Coastguard Worker } 1158*4bdc9457SAndroid Build Coastguard Worker} 1159*4bdc9457SAndroid Build Coastguard Worker 1160*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels_with_step) { 1161*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 1162*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 1163*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 1164*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}}}) { 1165*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 1166*4bdc9457SAndroid Build Coastguard Worker for (size_t step = 2; step <= pooling_elements; step++) { 1167*4bdc9457SAndroid Build Coastguard Worker MaxPoolMicrokernelTester() 1168*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 1169*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 1170*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1171*4bdc9457SAndroid Build Coastguard Worker .step(step) 1172*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 1173*4bdc9457SAndroid Build Coastguard Worker .output_stride(${next_prime(CHANNEL_TILE*5+1)}) 1174*4bdc9457SAndroid Build Coastguard Worker $if DATATYPE in ["s8", "u8"]: 1175*4bdc9457SAndroid Build Coastguard Worker .qmin(std::numeric_limits<${CTYPE}>::min()) 1176*4bdc9457SAndroid Build Coastguard Worker .qmax(std::numeric_limits<${CTYPE}>::max()) 1177*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 1178*4bdc9457SAndroid Build Coastguard Worker } 1179*4bdc9457SAndroid Build Coastguard Worker } 1180*4bdc9457SAndroid Build Coastguard Worker } 1181*4bdc9457SAndroid Build Coastguard Worker } 1182*4bdc9457SAndroid Build Coastguard Worker} 1183*4bdc9457SAndroid Build Coastguard Worker""" 1184*4bdc9457SAndroid Build Coastguard Worker 1185*4bdc9457SAndroid Build Coastguard Worker 1186*4bdc9457SAndroid Build Coastguard Workerdef generate_test_cases(ukernel, init_fn, primary_tile, incremental_tile, 1187*4bdc9457SAndroid Build Coastguard Worker channel_tile, isa): 1188*4bdc9457SAndroid Build Coastguard Worker """Generates all tests cases for a MAXPOOL micro-kernel. 1189*4bdc9457SAndroid Build Coastguard Worker 1190*4bdc9457SAndroid Build Coastguard Worker Args: 1191*4bdc9457SAndroid Build Coastguard Worker ukernel: C name of the micro-kernel function. 1192*4bdc9457SAndroid Build Coastguard Worker init_fn: C name of the function to initialize microkernel parameters. 1193*4bdc9457SAndroid Build Coastguard Worker primary_tile: Number of rows (pixels) processed per one iteration of the 1194*4bdc9457SAndroid Build Coastguard Worker primary outer loop of the micro-kernel. 1195*4bdc9457SAndroid Build Coastguard Worker incremental_tile: Number of rows (pixels) processed per one iteration of 1196*4bdc9457SAndroid Build Coastguard Worker the incremental outer loop of the micro-kernel. 1197*4bdc9457SAndroid Build Coastguard Worker channel_tile: Number of channels processed per one iteration of the inner 1198*4bdc9457SAndroid Build Coastguard Worker loops of the micro-kernel. 1199*4bdc9457SAndroid Build Coastguard Worker isa: instruction set required to run the micro-kernel. Generated unit test 1200*4bdc9457SAndroid Build Coastguard Worker will skip execution if the host processor doesn't support this ISA. 1201*4bdc9457SAndroid Build Coastguard Worker 1202*4bdc9457SAndroid Build Coastguard Worker Returns: 1203*4bdc9457SAndroid Build Coastguard Worker Code for the test case. 1204*4bdc9457SAndroid Build Coastguard Worker """ 1205*4bdc9457SAndroid Build Coastguard Worker _, test_name = ukernel.split("_", 1) 1206*4bdc9457SAndroid Build Coastguard Worker _, datatype, ukernel_type, _ = ukernel.split("_", 3) 1207*4bdc9457SAndroid Build Coastguard Worker test_args = [ukernel, init_fn] 1208*4bdc9457SAndroid Build Coastguard Worker return xngen.preprocess(MAXPOOL_TEST_TEMPLATE, { 1209*4bdc9457SAndroid Build Coastguard Worker "TEST_NAME": test_name.upper().replace("UKERNEL_", ""), 1210*4bdc9457SAndroid Build Coastguard Worker "TEST_ARGS": test_args, 1211*4bdc9457SAndroid Build Coastguard Worker "DATATYPE": datatype, 1212*4bdc9457SAndroid Build Coastguard Worker "CTYPE": {"s8": "int8_t", "u8": "uint8_t", "f16": "uint16_t", "f32": "int16_t"}[datatype], 1213*4bdc9457SAndroid Build Coastguard Worker "QMIN": {"s8": -64, "u8": 64}.get(datatype, -16384), 1214*4bdc9457SAndroid Build Coastguard Worker "QMAX": {"s8": 64, "u8": 192}.get(datatype, 16384), 1215*4bdc9457SAndroid Build Coastguard Worker "PRIMARY_TILE": primary_tile, 1216*4bdc9457SAndroid Build Coastguard Worker "INCREMENTAL_TILE": incremental_tile, 1217*4bdc9457SAndroid Build Coastguard Worker "CHANNEL_TILE": channel_tile, 1218*4bdc9457SAndroid Build Coastguard Worker "ISA_CHECK": xnncommon.generate_isa_check_macro(isa), 1219*4bdc9457SAndroid Build Coastguard Worker "next_prime": next_prime, 1220*4bdc9457SAndroid Build Coastguard Worker }) 1221*4bdc9457SAndroid Build Coastguard Worker 1222*4bdc9457SAndroid Build Coastguard Worker 1223*4bdc9457SAndroid Build Coastguard Workerdef main(args): 1224*4bdc9457SAndroid Build Coastguard Worker options = parser.parse_args(args) 1225*4bdc9457SAndroid Build Coastguard Worker 1226*4bdc9457SAndroid Build Coastguard Worker with codecs.open(options.spec, "r", encoding="utf-8") as spec_file: 1227*4bdc9457SAndroid Build Coastguard Worker spec_yaml = yaml.safe_load(spec_file) 1228*4bdc9457SAndroid Build Coastguard Worker if not isinstance(spec_yaml, list): 1229*4bdc9457SAndroid Build Coastguard Worker raise ValueError("expected a list of micro-kernels in the spec") 1230*4bdc9457SAndroid Build Coastguard Worker 1231*4bdc9457SAndroid Build Coastguard Worker tests = """\ 1232*4bdc9457SAndroid Build Coastguard Worker// Copyright (c) Facebook, Inc. and its affiliates. 1233*4bdc9457SAndroid Build Coastguard Worker// All rights reserved. 1234*4bdc9457SAndroid Build Coastguard Worker// 1235*4bdc9457SAndroid Build Coastguard Worker// Copyright 2019 Google LLC 1236*4bdc9457SAndroid Build Coastguard Worker// 1237*4bdc9457SAndroid Build Coastguard Worker// This source code is licensed under the BSD-style license found in the 1238*4bdc9457SAndroid Build Coastguard Worker// LICENSE file in the root directory of this source tree. 1239*4bdc9457SAndroid Build Coastguard Worker// 1240*4bdc9457SAndroid Build Coastguard Worker// Auto-generated file. Do not edit! 1241*4bdc9457SAndroid Build Coastguard Worker// Specification: {specification} 1242*4bdc9457SAndroid Build Coastguard Worker// Generator: {generator} 1243*4bdc9457SAndroid Build Coastguard Worker 1244*4bdc9457SAndroid Build Coastguard Worker 1245*4bdc9457SAndroid Build Coastguard Worker#include <gtest/gtest.h> 1246*4bdc9457SAndroid Build Coastguard Worker 1247*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/common.h> 1248*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/isa-checks.h> 1249*4bdc9457SAndroid Build Coastguard Worker 1250*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/maxpool.h> 1251*4bdc9457SAndroid Build Coastguard Worker#include "maxpool-microkernel-tester.h" 1252*4bdc9457SAndroid Build Coastguard Worker""".format(specification=options.spec, generator=sys.argv[0]) 1253*4bdc9457SAndroid Build Coastguard Worker 1254*4bdc9457SAndroid Build Coastguard Worker for ukernel_spec in spec_yaml: 1255*4bdc9457SAndroid Build Coastguard Worker name = ukernel_spec["name"] 1256*4bdc9457SAndroid Build Coastguard Worker init_fn = ukernel_spec["init"] 1257*4bdc9457SAndroid Build Coastguard Worker primary_tile, incremental_tile, channel_tile, arch, isa = \ 1258*4bdc9457SAndroid Build Coastguard Worker split_ukernel_name(name) 1259*4bdc9457SAndroid Build Coastguard Worker 1260*4bdc9457SAndroid Build Coastguard Worker # specification can override architecture 1261*4bdc9457SAndroid Build Coastguard Worker arch = ukernel_spec.get("arch", arch) 1262*4bdc9457SAndroid Build Coastguard Worker 1263*4bdc9457SAndroid Build Coastguard Worker test_case = generate_test_cases(name, init_fn, primary_tile, 1264*4bdc9457SAndroid Build Coastguard Worker incremental_tile, channel_tile, isa) 1265*4bdc9457SAndroid Build Coastguard Worker tests += "\n\n" + xnncommon.postprocess_test_case(test_case, arch, isa) 1266*4bdc9457SAndroid Build Coastguard Worker 1267*4bdc9457SAndroid Build Coastguard Worker txt_changed = True 1268*4bdc9457SAndroid Build Coastguard Worker if os.path.exists(options.output): 1269*4bdc9457SAndroid Build Coastguard Worker with codecs.open(options.output, "r", encoding="utf-8") as output_file: 1270*4bdc9457SAndroid Build Coastguard Worker txt_changed = output_file.read() != tests 1271*4bdc9457SAndroid Build Coastguard Worker 1272*4bdc9457SAndroid Build Coastguard Worker if txt_changed: 1273*4bdc9457SAndroid Build Coastguard Worker with codecs.open(options.output, "w", encoding="utf-8") as output_file: 1274*4bdc9457SAndroid Build Coastguard Worker output_file.write(tests) 1275*4bdc9457SAndroid Build Coastguard Worker 1276*4bdc9457SAndroid Build Coastguard Worker 1277*4bdc9457SAndroid Build Coastguard Workerif __name__ == "__main__": 1278*4bdc9457SAndroid Build Coastguard Worker main(sys.argv[1:]) 1279