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( 22*4bdc9457SAndroid Build Coastguard Worker description='ArgMaxPool microkernel test generator') 23*4bdc9457SAndroid Build Coastguard Workerparser.add_argument("-s", "--spec", metavar="FILE", required=True, 24*4bdc9457SAndroid Build Coastguard Worker help="Specification (YAML) file") 25*4bdc9457SAndroid Build Coastguard Workerparser.add_argument("-o", "--output", metavar="FILE", required=True, 26*4bdc9457SAndroid Build Coastguard Worker help='Output (C++ source) file') 27*4bdc9457SAndroid Build Coastguard Workerparser.set_defaults(defines=list()) 28*4bdc9457SAndroid Build Coastguard Worker 29*4bdc9457SAndroid Build Coastguard Worker 30*4bdc9457SAndroid Build Coastguard Workerdef split_ukernel_name(name): 31*4bdc9457SAndroid Build Coastguard Worker match = re.fullmatch(r"xnn_(f16|f32)_argmaxpool_ukernel_((\d+)p)?(\d+)x__(.+)_c(\d+)", name) 32*4bdc9457SAndroid Build Coastguard Worker if match is None: 33*4bdc9457SAndroid Build Coastguard Worker raise ValueError("Unexpected microkernel name: " + name) 34*4bdc9457SAndroid Build Coastguard Worker 35*4bdc9457SAndroid Build Coastguard Worker if match.group(2): 36*4bdc9457SAndroid Build Coastguard Worker primary_tile = int(match.group(3)) 37*4bdc9457SAndroid Build Coastguard Worker incremental_tile = int(match.group(4)) 38*4bdc9457SAndroid Build Coastguard Worker else: 39*4bdc9457SAndroid Build Coastguard Worker primary_tile = int(match.group(4)) 40*4bdc9457SAndroid Build Coastguard Worker incremental_tile = 0 41*4bdc9457SAndroid Build Coastguard Worker 42*4bdc9457SAndroid Build Coastguard Worker channel_tile = int(match.group(6)) 43*4bdc9457SAndroid Build Coastguard Worker 44*4bdc9457SAndroid Build Coastguard Worker arch, isa = xnncommon.parse_target_name(target_name=match.group(5)) 45*4bdc9457SAndroid Build Coastguard Worker return primary_tile, incremental_tile, channel_tile, arch, isa 46*4bdc9457SAndroid Build Coastguard Worker 47*4bdc9457SAndroid Build Coastguard Worker 48*4bdc9457SAndroid Build Coastguard WorkerARGMAXPOOL_TEST_TEMPLATE = """\ 49*4bdc9457SAndroid Build Coastguard Worker$if INCREMENTAL_TILE == 0: 50*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile) { 51*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 52*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 53*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 54*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 55*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 56*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 57*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 58*4bdc9457SAndroid Build Coastguard Worker } 59*4bdc9457SAndroid Build Coastguard Worker 60*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 61*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 62*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 63*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 64*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 65*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 66*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 67*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 68*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 69*4bdc9457SAndroid Build Coastguard Worker } 70*4bdc9457SAndroid Build Coastguard Worker 71*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile) { 72*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 73*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 74*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 75*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 76*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 77*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 78*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 79*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 80*4bdc9457SAndroid Build Coastguard Worker } 81*4bdc9457SAndroid Build Coastguard Worker } 82*4bdc9457SAndroid Build Coastguard Worker 83*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 84*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 85*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 86*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 87*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 88*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 89*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 90*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 91*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 92*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 93*4bdc9457SAndroid Build Coastguard Worker } 94*4bdc9457SAndroid Build Coastguard Worker } 95*4bdc9457SAndroid Build Coastguard Worker 96*4bdc9457SAndroid Build Coastguard Worker $if CHANNEL_TILE > 1: 97*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile) { 98*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 99*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 100*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 101*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 102*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 103*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 104*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 105*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 106*4bdc9457SAndroid Build Coastguard Worker } 107*4bdc9457SAndroid Build Coastguard Worker } 108*4bdc9457SAndroid Build Coastguard Worker 109*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 110*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 111*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 112*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 113*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 114*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 115*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 116*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 117*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*8)}) 118*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 119*4bdc9457SAndroid Build Coastguard Worker } 120*4bdc9457SAndroid Build Coastguard Worker } 121*4bdc9457SAndroid Build Coastguard Worker 122*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile) { 123*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 124*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 125*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 126*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 127*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 128*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 129*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 130*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 131*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 132*4bdc9457SAndroid Build Coastguard Worker } 133*4bdc9457SAndroid Build Coastguard Worker } 134*4bdc9457SAndroid Build Coastguard Worker } 135*4bdc9457SAndroid Build Coastguard Worker 136*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 137*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 138*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 139*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 140*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 141*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 142*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 143*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 144*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 145*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*8)}) 146*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 147*4bdc9457SAndroid Build Coastguard Worker } 148*4bdc9457SAndroid Build Coastguard Worker } 149*4bdc9457SAndroid Build Coastguard Worker } 150*4bdc9457SAndroid Build Coastguard Worker 151*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile) { 152*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 153*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 154*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 155*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 156*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 157*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 158*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 159*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 160*4bdc9457SAndroid Build Coastguard Worker } 161*4bdc9457SAndroid Build Coastguard Worker } 162*4bdc9457SAndroid Build Coastguard Worker 163*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 164*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 165*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 166*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 167*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 168*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 169*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 170*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 171*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE)}) 172*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 173*4bdc9457SAndroid Build Coastguard Worker } 174*4bdc9457SAndroid Build Coastguard Worker } 175*4bdc9457SAndroid Build Coastguard Worker 176*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile) { 177*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 178*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 179*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 180*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 181*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 182*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 183*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 184*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 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 190*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 191*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 192*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 193*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 194*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 195*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 196*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 197*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 198*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 199*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE)}) 200*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 201*4bdc9457SAndroid Build Coastguard Worker } 202*4bdc9457SAndroid Build Coastguard Worker } 203*4bdc9457SAndroid Build Coastguard Worker } 204*4bdc9457SAndroid Build Coastguard Worker 205*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile) { 206*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 207*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 208*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 209*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 210*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 211*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 212*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 213*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 214*4bdc9457SAndroid Build Coastguard Worker } 215*4bdc9457SAndroid Build Coastguard Worker } 216*4bdc9457SAndroid Build Coastguard Worker 217*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 218*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 219*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 220*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 221*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 222*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE}) 223*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 224*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 225*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 226*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 227*4bdc9457SAndroid Build Coastguard Worker } 228*4bdc9457SAndroid Build Coastguard Worker } 229*4bdc9457SAndroid Build Coastguard Worker 230*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile) { 231*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 232*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 233*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 234*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 235*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 236*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 237*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 238*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 239*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 240*4bdc9457SAndroid Build Coastguard Worker } 241*4bdc9457SAndroid Build Coastguard Worker } 242*4bdc9457SAndroid Build Coastguard Worker } 243*4bdc9457SAndroid Build Coastguard Worker 244*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 245*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 246*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 247*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 248*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 249*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 250*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 251*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 252*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 253*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 254*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 255*4bdc9457SAndroid Build Coastguard Worker } 256*4bdc9457SAndroid Build Coastguard Worker } 257*4bdc9457SAndroid Build Coastguard Worker } 258*4bdc9457SAndroid Build Coastguard Worker 259*4bdc9457SAndroid Build Coastguard Worker$if INCREMENTAL_TILE != 0: 260*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile) { 261*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 262*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 263*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 264*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 265*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 266*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 267*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 268*4bdc9457SAndroid Build Coastguard Worker } 269*4bdc9457SAndroid Build Coastguard Worker 270*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 271*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 272*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 273*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 274*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 275*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 276*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 277*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 278*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 279*4bdc9457SAndroid Build Coastguard Worker } 280*4bdc9457SAndroid Build Coastguard Worker 281*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile) { 282*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 283*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 284*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 285*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 286*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 287*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 288*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 289*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 290*4bdc9457SAndroid Build Coastguard Worker } 291*4bdc9457SAndroid Build Coastguard Worker } 292*4bdc9457SAndroid Build Coastguard Worker 293*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 294*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 295*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 296*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 297*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 298*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 299*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 300*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 301*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 302*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 303*4bdc9457SAndroid Build Coastguard Worker } 304*4bdc9457SAndroid Build Coastguard Worker } 305*4bdc9457SAndroid Build Coastguard Worker 306*4bdc9457SAndroid Build Coastguard Worker $if CHANNEL_TILE > 1: 307*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile) { 308*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 309*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 310*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 311*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 312*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 313*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 314*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 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 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 320*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 321*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 322*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 323*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 324*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 325*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 326*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 327*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*5)}) 328*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 329*4bdc9457SAndroid Build Coastguard Worker } 330*4bdc9457SAndroid Build Coastguard Worker } 331*4bdc9457SAndroid Build Coastguard Worker 332*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile) { 333*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 334*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 335*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 336*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 337*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 338*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 339*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 340*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 341*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 342*4bdc9457SAndroid Build Coastguard Worker } 343*4bdc9457SAndroid Build Coastguard Worker } 344*4bdc9457SAndroid Build Coastguard Worker } 345*4bdc9457SAndroid Build Coastguard Worker 346*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 347*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 348*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 349*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 350*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 351*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 352*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 353*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 354*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 355*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*8)}) 356*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 357*4bdc9457SAndroid Build Coastguard Worker } 358*4bdc9457SAndroid Build Coastguard Worker } 359*4bdc9457SAndroid Build Coastguard Worker } 360*4bdc9457SAndroid Build Coastguard Worker 361*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile) { 362*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 363*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 364*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 365*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 366*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 367*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 368*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 369*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 370*4bdc9457SAndroid Build Coastguard Worker } 371*4bdc9457SAndroid Build Coastguard Worker } 372*4bdc9457SAndroid Build Coastguard Worker 373*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 374*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 375*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 376*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 377*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 378*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 379*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 380*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 381*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE)}) 382*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 383*4bdc9457SAndroid Build Coastguard Worker } 384*4bdc9457SAndroid Build Coastguard Worker } 385*4bdc9457SAndroid Build Coastguard Worker 386*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile) { 387*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 388*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 389*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 390*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 391*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 392*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 393*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 394*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 395*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 396*4bdc9457SAndroid Build Coastguard Worker } 397*4bdc9457SAndroid Build Coastguard Worker } 398*4bdc9457SAndroid Build Coastguard Worker } 399*4bdc9457SAndroid Build Coastguard Worker 400*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 401*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 402*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 403*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 404*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 405*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 406*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 407*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 408*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 409*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE)}) 410*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 411*4bdc9457SAndroid Build Coastguard Worker } 412*4bdc9457SAndroid Build Coastguard Worker } 413*4bdc9457SAndroid Build Coastguard Worker } 414*4bdc9457SAndroid Build Coastguard Worker 415*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile) { 416*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 417*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 418*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 419*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 420*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 421*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 422*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 423*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 424*4bdc9457SAndroid Build Coastguard Worker } 425*4bdc9457SAndroid Build Coastguard Worker } 426*4bdc9457SAndroid Build Coastguard Worker 427*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 428*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 429*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 430*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 431*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 432*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 433*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 434*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 435*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 436*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 437*4bdc9457SAndroid Build Coastguard Worker } 438*4bdc9457SAndroid Build Coastguard Worker } 439*4bdc9457SAndroid Build Coastguard Worker 440*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile) { 441*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 442*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 443*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 444*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 445*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 446*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 447*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 448*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 449*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 450*4bdc9457SAndroid Build Coastguard Worker } 451*4bdc9457SAndroid Build Coastguard Worker } 452*4bdc9457SAndroid Build Coastguard Worker } 453*4bdc9457SAndroid Build Coastguard Worker 454*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 455*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 456*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 457*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 458*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 459*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 460*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 461*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 462*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 463*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 464*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 465*4bdc9457SAndroid Build Coastguard Worker } 466*4bdc9457SAndroid Build Coastguard Worker } 467*4bdc9457SAndroid Build Coastguard Worker } 468*4bdc9457SAndroid Build Coastguard Worker 469*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass) { 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+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 473*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 474*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 475*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 476*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 477*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 478*4bdc9457SAndroid Build Coastguard Worker } 479*4bdc9457SAndroid Build Coastguard Worker } 480*4bdc9457SAndroid Build Coastguard Worker 481*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_input_offset) { 482*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 483*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 484*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 485*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 486*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 487*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 488*4bdc9457SAndroid Build Coastguard Worker .channels(${CHANNEL_TILE}) 489*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE+1)}) 490*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 491*4bdc9457SAndroid Build Coastguard Worker } 492*4bdc9457SAndroid Build Coastguard Worker } 493*4bdc9457SAndroid Build Coastguard Worker 494*4bdc9457SAndroid Build Coastguard Worker $if CHANNEL_TILE > 1: 495*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass) { 496*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 497*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 498*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 499*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 500*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 501*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 502*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 503*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 504*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 505*4bdc9457SAndroid Build Coastguard Worker } 506*4bdc9457SAndroid Build Coastguard Worker } 507*4bdc9457SAndroid Build Coastguard Worker } 508*4bdc9457SAndroid Build Coastguard Worker 509*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_input_offset) { 510*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 511*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 512*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 513*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 514*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 515*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 516*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 517*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 518*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*8)}) 519*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 520*4bdc9457SAndroid Build Coastguard Worker } 521*4bdc9457SAndroid Build Coastguard Worker } 522*4bdc9457SAndroid Build Coastguard Worker } 523*4bdc9457SAndroid Build Coastguard Worker 524*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass) { 525*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 526*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 527*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 528*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 529*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 530*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 531*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 532*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 533*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 534*4bdc9457SAndroid Build Coastguard Worker } 535*4bdc9457SAndroid Build Coastguard Worker } 536*4bdc9457SAndroid Build Coastguard Worker } 537*4bdc9457SAndroid Build Coastguard Worker 538*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_input_offset) { 539*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 540*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 541*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 542*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 543*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 544*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 545*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 546*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 547*4bdc9457SAndroid Build Coastguard Worker .input_offset(${CHANNEL_TILE}) 548*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 549*4bdc9457SAndroid Build Coastguard Worker } 550*4bdc9457SAndroid Build Coastguard Worker } 551*4bdc9457SAndroid Build Coastguard Worker } 552*4bdc9457SAndroid Build Coastguard Worker 553*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass) { 554*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 555*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 556*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 557*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 558*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 559*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 560*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 561*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 562*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 563*4bdc9457SAndroid Build Coastguard Worker } 564*4bdc9457SAndroid Build Coastguard Worker } 565*4bdc9457SAndroid Build Coastguard Worker } 566*4bdc9457SAndroid Build Coastguard Worker 567*4bdc9457SAndroid Build Coastguard Worker TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_input_offset) { 568*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 569*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 570*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 571*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 572*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 573*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 574*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 575*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 576*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*2)}) 577*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 578*4bdc9457SAndroid Build Coastguard Worker } 579*4bdc9457SAndroid Build Coastguard Worker } 580*4bdc9457SAndroid Build Coastguard Worker } 581*4bdc9457SAndroid Build Coastguard Worker 582*4bdc9457SAndroid Build Coastguard Worker$if INCREMENTAL_TILE == 0: 583*4bdc9457SAndroid Build Coastguard Worker $MIN_POOLING, MAX_POOLING = 2, PRIMARY_TILE 584*4bdc9457SAndroid Build Coastguard Worker$else: 585*4bdc9457SAndroid Build Coastguard Worker $MIN_POOLING, MAX_POOLING = PRIMARY_TILE + 1, PRIMARY_TILE + INCREMENTAL_TILE 586*4bdc9457SAndroid Build Coastguard Worker 587*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels) { 588*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 589*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 590*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 591*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${MIN_POOLING}; pooling_elements <= ${MAX_POOLING}; pooling_elements++) { 592*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 593*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 594*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 595*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 596*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 597*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 598*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 599*4bdc9457SAndroid Build Coastguard Worker } 600*4bdc9457SAndroid Build Coastguard Worker } 601*4bdc9457SAndroid Build Coastguard Worker } 602*4bdc9457SAndroid Build Coastguard Worker} 603*4bdc9457SAndroid Build Coastguard Worker 604*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels_with_input_offset) { 605*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 606*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 607*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 608*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${MIN_POOLING}; pooling_elements <= ${MAX_POOLING}; pooling_elements++) { 609*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 610*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 611*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 612*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 613*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 614*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 615*4bdc9457SAndroid Build Coastguard Worker .input_offset(${next_prime(CHANNEL_TILE*5+1)}) 616*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 617*4bdc9457SAndroid Build Coastguard Worker } 618*4bdc9457SAndroid Build Coastguard Worker } 619*4bdc9457SAndroid Build Coastguard Worker } 620*4bdc9457SAndroid Build Coastguard Worker} 621*4bdc9457SAndroid Build Coastguard Worker 622*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels_with_output_stride) { 623*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 624*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 625*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 626*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${MIN_POOLING}; pooling_elements <= ${MAX_POOLING}; pooling_elements++) { 627*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 628*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 629*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 630*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 631*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 632*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 633*4bdc9457SAndroid Build Coastguard Worker .output_stride(${next_prime(CHANNEL_TILE*5+1)}) 634*4bdc9457SAndroid Build Coastguard Worker .Test(${", ".join(TEST_ARGS)}); 635*4bdc9457SAndroid Build Coastguard Worker } 636*4bdc9457SAndroid Build Coastguard Worker } 637*4bdc9457SAndroid Build Coastguard Worker } 638*4bdc9457SAndroid Build Coastguard Worker} 639*4bdc9457SAndroid Build Coastguard Worker 640*4bdc9457SAndroid Build Coastguard WorkerTEST(${TEST_NAME}, few_output_pixels_with_step) { 641*4bdc9457SAndroid Build Coastguard Worker $if ISA_CHECK: 642*4bdc9457SAndroid Build Coastguard Worker ${ISA_CHECK}; 643*4bdc9457SAndroid Build Coastguard Worker for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 644*4bdc9457SAndroid Build Coastguard Worker for (size_t pooling_elements = ${MIN_POOLING}; pooling_elements <= ${MAX_POOLING}; pooling_elements++) { 645*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 646*4bdc9457SAndroid Build Coastguard Worker for (size_t step = 2; step <= pooling_elements; step++) { 647*4bdc9457SAndroid Build Coastguard Worker ArgMaxPoolMicrokernelTester() 648*4bdc9457SAndroid Build Coastguard Worker .output_pixels(output_pixels) 649*4bdc9457SAndroid Build Coastguard Worker .pooling_elements(pooling_elements) 650*4bdc9457SAndroid Build Coastguard Worker .pooling_tile(${", ".join(map(str, filter(bool, [PRIMARY_TILE, INCREMENTAL_TILE])))}) 651*4bdc9457SAndroid Build Coastguard Worker .step(step) 652*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 653*4bdc9457SAndroid Build Coastguard Worker .output_stride(${next_prime(CHANNEL_TILE*5+1)}) 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 } 659*4bdc9457SAndroid Build Coastguard Worker} 660*4bdc9457SAndroid Build Coastguard Worker""" 661*4bdc9457SAndroid Build Coastguard Worker 662*4bdc9457SAndroid Build Coastguard Worker 663*4bdc9457SAndroid Build Coastguard Workerdef generate_test_cases(ukernel, primary_tile, incremental_tile, channel_tile, 664*4bdc9457SAndroid Build Coastguard Worker isa): 665*4bdc9457SAndroid Build Coastguard Worker """Generates all tests cases for a ARGMAXPOOL micro-kernel. 666*4bdc9457SAndroid Build Coastguard Worker 667*4bdc9457SAndroid Build Coastguard Worker Args: 668*4bdc9457SAndroid Build Coastguard Worker ukernel: C name of the micro-kernel function. 669*4bdc9457SAndroid Build Coastguard Worker primary_tile: Number of rows (pixels) processed per one iteration of the 670*4bdc9457SAndroid Build Coastguard Worker primary outer loop of the micro-kernel. 671*4bdc9457SAndroid Build Coastguard Worker incremental_tile: Number of rows (pixels) processed per one iteration of 672*4bdc9457SAndroid Build Coastguard Worker the incremental outer loop of the micro-kernel. 673*4bdc9457SAndroid Build Coastguard Worker channel_tile: Number of channels processed per one iteration of the inner 674*4bdc9457SAndroid Build Coastguard Worker loops of the micro-kernel. 675*4bdc9457SAndroid Build Coastguard Worker isa: instruction set required to run the micro-kernel. Generated unit test 676*4bdc9457SAndroid Build Coastguard Worker will skip execution if the host processor doesn't support this ISA. 677*4bdc9457SAndroid Build Coastguard Worker 678*4bdc9457SAndroid Build Coastguard Worker Returns: 679*4bdc9457SAndroid Build Coastguard Worker Code for the test case. 680*4bdc9457SAndroid Build Coastguard Worker """ 681*4bdc9457SAndroid Build Coastguard Worker _, test_name = ukernel.split("_", 1) 682*4bdc9457SAndroid Build Coastguard Worker _, datatype, ukernel_type, _ = ukernel.split("_", 3) 683*4bdc9457SAndroid Build Coastguard Worker test_args = [ukernel] 684*4bdc9457SAndroid Build Coastguard Worker if not isa: 685*4bdc9457SAndroid Build Coastguard Worker test_args.append("ArgMaxPoolMicrokernelTester::Variant::Scalar") 686*4bdc9457SAndroid Build Coastguard Worker return xngen.preprocess(ARGMAXPOOL_TEST_TEMPLATE, { 687*4bdc9457SAndroid Build Coastguard Worker "TEST_NAME": test_name.upper().replace("UKERNEL_", ""), 688*4bdc9457SAndroid Build Coastguard Worker "TEST_ARGS": test_args, 689*4bdc9457SAndroid Build Coastguard Worker "DATATYPE": datatype, 690*4bdc9457SAndroid Build Coastguard Worker "PRIMARY_TILE": primary_tile, 691*4bdc9457SAndroid Build Coastguard Worker "INCREMENTAL_TILE": incremental_tile, 692*4bdc9457SAndroid Build Coastguard Worker "CHANNEL_TILE": channel_tile, 693*4bdc9457SAndroid Build Coastguard Worker "ISA_CHECK": xnncommon.generate_isa_check_macro(isa), 694*4bdc9457SAndroid Build Coastguard Worker "next_prime": next_prime, 695*4bdc9457SAndroid Build Coastguard Worker }) 696*4bdc9457SAndroid Build Coastguard Worker 697*4bdc9457SAndroid Build Coastguard Worker 698*4bdc9457SAndroid Build Coastguard Workerdef main(args): 699*4bdc9457SAndroid Build Coastguard Worker options = parser.parse_args(args) 700*4bdc9457SAndroid Build Coastguard Worker 701*4bdc9457SAndroid Build Coastguard Worker with codecs.open(options.spec, "r", encoding="utf-8") as spec_file: 702*4bdc9457SAndroid Build Coastguard Worker spec_yaml = yaml.safe_load(spec_file) 703*4bdc9457SAndroid Build Coastguard Worker if not isinstance(spec_yaml, list): 704*4bdc9457SAndroid Build Coastguard Worker raise ValueError("expected a list of micro-kernels in the spec") 705*4bdc9457SAndroid Build Coastguard Worker 706*4bdc9457SAndroid Build Coastguard Worker tests = """\ 707*4bdc9457SAndroid Build Coastguard Worker// Copyright 2019 Google LLC 708*4bdc9457SAndroid Build Coastguard Worker// 709*4bdc9457SAndroid Build Coastguard Worker// This source code is licensed under the BSD-style license found in the 710*4bdc9457SAndroid Build Coastguard Worker// LICENSE file in the root directory of this source tree. 711*4bdc9457SAndroid Build Coastguard Worker// 712*4bdc9457SAndroid Build Coastguard Worker// Auto-generated file. Do not edit! 713*4bdc9457SAndroid Build Coastguard Worker// Specification: {specification} 714*4bdc9457SAndroid Build Coastguard Worker// Generator: {generator} 715*4bdc9457SAndroid Build Coastguard Worker 716*4bdc9457SAndroid Build Coastguard Worker 717*4bdc9457SAndroid Build Coastguard Worker#include <gtest/gtest.h> 718*4bdc9457SAndroid Build Coastguard Worker 719*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/common.h> 720*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/isa-checks.h> 721*4bdc9457SAndroid Build Coastguard Worker 722*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/argmaxpool.h> 723*4bdc9457SAndroid Build Coastguard Worker#include "argmaxpool-microkernel-tester.h" 724*4bdc9457SAndroid Build Coastguard Worker""".format(specification=options.spec, generator=sys.argv[0]) 725*4bdc9457SAndroid Build Coastguard Worker 726*4bdc9457SAndroid Build Coastguard Worker for ukernel_spec in spec_yaml: 727*4bdc9457SAndroid Build Coastguard Worker name = ukernel_spec["name"] 728*4bdc9457SAndroid Build Coastguard Worker primary_tile, incremental_tile, channel_tile, arch, isa = \ 729*4bdc9457SAndroid Build Coastguard Worker split_ukernel_name(name) 730*4bdc9457SAndroid Build Coastguard Worker 731*4bdc9457SAndroid Build Coastguard Worker # specification can override architecture 732*4bdc9457SAndroid Build Coastguard Worker arch = ukernel_spec.get("arch", arch) 733*4bdc9457SAndroid Build Coastguard Worker 734*4bdc9457SAndroid Build Coastguard Worker test_case = generate_test_cases(name, primary_tile, incremental_tile, 735*4bdc9457SAndroid Build Coastguard Worker channel_tile, isa) 736*4bdc9457SAndroid Build Coastguard Worker tests += "\n\n" + xnncommon.postprocess_test_case(test_case, arch, isa) 737*4bdc9457SAndroid Build Coastguard Worker 738*4bdc9457SAndroid Build Coastguard Worker txt_changed = True 739*4bdc9457SAndroid Build Coastguard Worker if os.path.exists(options.output): 740*4bdc9457SAndroid Build Coastguard Worker with codecs.open(options.output, "r", encoding="utf-8") as output_file: 741*4bdc9457SAndroid Build Coastguard Worker txt_changed = output_file.read() != tests 742*4bdc9457SAndroid Build Coastguard Worker 743*4bdc9457SAndroid Build Coastguard Worker if txt_changed: 744*4bdc9457SAndroid Build Coastguard Worker with codecs.open(options.output, "w", encoding="utf-8") as output_file: 745*4bdc9457SAndroid Build Coastguard Worker output_file.write(tests) 746*4bdc9457SAndroid Build Coastguard Worker 747*4bdc9457SAndroid Build Coastguard Worker 748*4bdc9457SAndroid Build Coastguard Workerif __name__ == "__main__": 749*4bdc9457SAndroid Build Coastguard Worker main(sys.argv[1:]) 750