1#!/usr/bin/env python 2# Copyright 2020 Google LLC 3# 4# This source code is licensed under the BSD-style license found in the 5# LICENSE file in the root directory of this source tree. 6 7import argparse 8import codecs 9import math 10import os 11import re 12import sys 13import yaml 14 15sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) 16from primes import next_prime 17import xngen 18import xnncommon 19 20 21parser = argparse.ArgumentParser(description='AvgPool microkernel test generator') 22parser.add_argument("-s", "--spec", metavar="FILE", required=True, 23 help="Specification (YAML) file") 24parser.add_argument("-o", "--output", metavar="FILE", required=True, 25 help='Output (C++ source) file') 26parser.set_defaults(defines=list()) 27 28 29def split_ukernel_name(name): 30 match = re.match(r"^xnn_(qu8|f16|f32)_[p]?avgpool(_(minmax))?_ukernel_((\d+)p)?(\d+)x__(.+)_c(\d+)$", name) 31 if match is None: 32 raise ValueError("Unexpected microkernel name: " + name) 33 34 if match.group(4): 35 primary_tile = int(match.group(5)) 36 incremental_tile = int(match.group(6)) 37 else: 38 primary_tile = int(match.group(6)) 39 incremental_tile = 0 40 channel_tile = int(match.group(8)) 41 42 arch, isa = xnncommon.parse_target_name(target_name=match.group(7)) 43 return primary_tile, incremental_tile, channel_tile, arch, isa 44 45 46AVGPOOL_TEST_TEMPLATE = """\ 47$if INCREMENTAL_TILE == 0: 48 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile) { 49 $if ISA_CHECK: 50 ${ISA_CHECK}; 51 AvgPoolMicrokernelTester() 52 .pooling_elements(${PRIMARY_TILE}) 53 .pooling_tile(${PRIMARY_TILE}) 54 .channels(${CHANNEL_TILE}) 55 .Test(${", ".join(TEST_ARGS)}); 56 } 57 58 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 59 $if ISA_CHECK: 60 ${ISA_CHECK}; 61 AvgPoolMicrokernelTester() 62 .pooling_elements(${PRIMARY_TILE}) 63 .pooling_tile(${PRIMARY_TILE}) 64 .channels(${CHANNEL_TILE}) 65 .input_offset(${next_prime(CHANNEL_TILE+1)}) 66 .Test(${", ".join(TEST_ARGS)}); 67 } 68 69 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_zero) { 70 $if ISA_CHECK: 71 ${ISA_CHECK}; 72 for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE}; zero_index++) { 73 AvgPoolMicrokernelTester() 74 .pooling_elements(${PRIMARY_TILE}) 75 .pooling_tile(${PRIMARY_TILE}) 76 .channels(${CHANNEL_TILE}) 77 .input_offset(${next_prime(CHANNEL_TILE+1)}) 78 .zero_index(zero_index) 79 .Test(${", ".join(TEST_ARGS)}); 80 } 81 } 82 83 $if DATATYPE == "qu8": 84 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_input_scale) { 85 $if ISA_CHECK: 86 ${ISA_CHECK}; 87 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 88 AvgPoolMicrokernelTester() 89 .pooling_elements(${PRIMARY_TILE}) 90 .pooling_tile(${PRIMARY_TILE}) 91 .channels(${CHANNEL_TILE}) 92 .input_scale(scale) 93 .Test(${", ".join(TEST_ARGS)}); 94 } 95 } 96 97 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_input_zero_point) { 98 $if ISA_CHECK: 99 ${ISA_CHECK}; 100 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 101 AvgPoolMicrokernelTester() 102 .pooling_elements(${PRIMARY_TILE}) 103 .pooling_tile(${PRIMARY_TILE}) 104 .channels(${CHANNEL_TILE}) 105 .input_zero_point(zero_point) 106 .Test(${", ".join(TEST_ARGS)}); 107 } 108 } 109 110 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_output_scale) { 111 $if ISA_CHECK: 112 ${ISA_CHECK}; 113 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 114 AvgPoolMicrokernelTester() 115 .pooling_elements(${PRIMARY_TILE}) 116 .pooling_tile(${PRIMARY_TILE}) 117 .channels(${CHANNEL_TILE}) 118 .output_scale(scale) 119 .Test(${", ".join(TEST_ARGS)}); 120 } 121 } 122 123 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_output_zero_point) { 124 $if ISA_CHECK: 125 ${ISA_CHECK}; 126 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 127 AvgPoolMicrokernelTester() 128 .pooling_elements(${PRIMARY_TILE}) 129 .pooling_tile(${PRIMARY_TILE}) 130 .channels(${CHANNEL_TILE}) 131 .output_zero_point(zero_point) 132 .Test(${", ".join(TEST_ARGS)}); 133 } 134 } 135 136 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_qmin) { 137 $if ISA_CHECK: 138 ${ISA_CHECK}; 139 AvgPoolMicrokernelTester() 140 .pooling_elements(${PRIMARY_TILE}) 141 .pooling_tile(${PRIMARY_TILE}) 142 .channels(${CHANNEL_TILE}) 143 .qmin(128) 144 .Test(${", ".join(TEST_ARGS)}); 145 } 146 147 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_qmax) { 148 $if ISA_CHECK: 149 ${ISA_CHECK}; 150 AvgPoolMicrokernelTester() 151 .pooling_elements(${PRIMARY_TILE}) 152 .pooling_tile(${PRIMARY_TILE}) 153 .channels(${CHANNEL_TILE}) 154 .qmax(128) 155 .Test(${", ".join(TEST_ARGS)}); 156 } 157 158 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile) { 159 $if ISA_CHECK: 160 ${ISA_CHECK}; 161 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 162 AvgPoolMicrokernelTester() 163 .pooling_elements(pooling_elements) 164 .pooling_tile(${PRIMARY_TILE}) 165 .channels(${CHANNEL_TILE}) 166 .Test(${", ".join(TEST_ARGS)}); 167 } 168 } 169 170 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 171 $if ISA_CHECK: 172 ${ISA_CHECK}; 173 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 174 AvgPoolMicrokernelTester() 175 .pooling_elements(pooling_elements) 176 .pooling_tile(${PRIMARY_TILE}) 177 .channels(${CHANNEL_TILE}) 178 .input_offset(${next_prime(CHANNEL_TILE+1)}) 179 .Test(${", ".join(TEST_ARGS)}); 180 } 181 } 182 183 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile_with_zero) { 184 $if ISA_CHECK: 185 ${ISA_CHECK}; 186 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 187 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 188 AvgPoolMicrokernelTester() 189 .pooling_elements(pooling_elements) 190 .pooling_tile(${PRIMARY_TILE}) 191 .channels(${CHANNEL_TILE}) 192 .input_offset(${next_prime(CHANNEL_TILE+1)}) 193 .zero_index(zero_index) 194 .Test(${", ".join(TEST_ARGS)}); 195 } 196 } 197 } 198 199 $if CHANNEL_TILE > 1: 200 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile) { 201 $if ISA_CHECK: 202 ${ISA_CHECK}; 203 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 204 AvgPoolMicrokernelTester() 205 .pooling_elements(${PRIMARY_TILE}) 206 .pooling_tile(${PRIMARY_TILE}) 207 .channels(channels) 208 .Test(${", ".join(TEST_ARGS)}); 209 } 210 } 211 212 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 213 $if ISA_CHECK: 214 ${ISA_CHECK}; 215 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 216 AvgPoolMicrokernelTester() 217 .pooling_elements(${PRIMARY_TILE}) 218 .pooling_tile(${PRIMARY_TILE}) 219 .channels(channels) 220 .input_offset(${next_prime(CHANNEL_TILE*8)}) 221 .Test(${", ".join(TEST_ARGS)}); 222 } 223 } 224 225 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_zero) { 226 $if ISA_CHECK: 227 ${ISA_CHECK}; 228 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 229 for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE}; zero_index++) { 230 AvgPoolMicrokernelTester() 231 .pooling_elements(${PRIMARY_TILE}) 232 .pooling_tile(${PRIMARY_TILE}) 233 .channels(channels) 234 .input_offset(${next_prime(CHANNEL_TILE*8)}) 235 .zero_index(zero_index) 236 .Test(${", ".join(TEST_ARGS)}); 237 } 238 } 239 } 240 241 $if DATATYPE == "qu8": 242 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_input_scale) { 243 $if ISA_CHECK: 244 ${ISA_CHECK}; 245 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 246 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 247 AvgPoolMicrokernelTester() 248 .pooling_elements(${PRIMARY_TILE}) 249 .pooling_tile(${PRIMARY_TILE}) 250 .channels(channels) 251 .input_scale(scale) 252 .Test(${", ".join(TEST_ARGS)}); 253 } 254 } 255 } 256 257 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_input_zero_point) { 258 $if ISA_CHECK: 259 ${ISA_CHECK}; 260 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 261 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 262 AvgPoolMicrokernelTester() 263 .pooling_elements(${PRIMARY_TILE}) 264 .pooling_tile(${PRIMARY_TILE}) 265 .channels(channels) 266 .input_zero_point(zero_point) 267 .Test(${", ".join(TEST_ARGS)}); 268 } 269 } 270 } 271 272 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_output_scale) { 273 $if ISA_CHECK: 274 ${ISA_CHECK}; 275 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 276 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 277 AvgPoolMicrokernelTester() 278 .pooling_elements(${PRIMARY_TILE}) 279 .pooling_tile(${PRIMARY_TILE}) 280 .channels(channels) 281 .output_scale(scale) 282 .Test(${", ".join(TEST_ARGS)}); 283 } 284 } 285 } 286 287 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_output_zero_point) { 288 $if ISA_CHECK: 289 ${ISA_CHECK}; 290 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 291 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 292 AvgPoolMicrokernelTester() 293 .pooling_elements(${PRIMARY_TILE}) 294 .pooling_tile(${PRIMARY_TILE}) 295 .channels(channels) 296 .output_zero_point(zero_point) 297 .Test(${", ".join(TEST_ARGS)}); 298 } 299 } 300 } 301 302 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_qmin) { 303 $if ISA_CHECK: 304 ${ISA_CHECK}; 305 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 306 AvgPoolMicrokernelTester() 307 .pooling_elements(${PRIMARY_TILE}) 308 .pooling_tile(${PRIMARY_TILE}) 309 .channels(channels) 310 .qmin(128) 311 .Test(${", ".join(TEST_ARGS)}); 312 } 313 } 314 315 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_qmax) { 316 $if ISA_CHECK: 317 ${ISA_CHECK}; 318 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 319 AvgPoolMicrokernelTester() 320 .pooling_elements(${PRIMARY_TILE}) 321 .pooling_tile(${PRIMARY_TILE}) 322 .channels(channels) 323 .qmax(128) 324 .Test(${", ".join(TEST_ARGS)}); 325 } 326 } 327 328 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile) { 329 $if ISA_CHECK: 330 ${ISA_CHECK}; 331 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 332 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 333 AvgPoolMicrokernelTester() 334 .pooling_elements(pooling_elements) 335 .pooling_tile(${PRIMARY_TILE}) 336 .channels(channels) 337 .Test(${", ".join(TEST_ARGS)}); 338 } 339 } 340 } 341 342 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 343 $if ISA_CHECK: 344 ${ISA_CHECK}; 345 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 346 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 347 AvgPoolMicrokernelTester() 348 .pooling_elements(pooling_elements) 349 .pooling_tile(${PRIMARY_TILE}) 350 .channels(channels) 351 .input_offset(${next_prime(CHANNEL_TILE*8)}) 352 .Test(${", ".join(TEST_ARGS)}); 353 } 354 } 355 } 356 357 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile_with_zero) { 358 $if ISA_CHECK: 359 ${ISA_CHECK}; 360 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 361 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 362 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 363 AvgPoolMicrokernelTester() 364 .pooling_elements(pooling_elements) 365 .pooling_tile(${PRIMARY_TILE}) 366 .channels(channels) 367 .input_offset(${next_prime(CHANNEL_TILE*8)}) 368 .zero_index(zero_index) 369 .Test(${", ".join(TEST_ARGS)}); 370 } 371 } 372 } 373 } 374 375 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile) { 376 $if ISA_CHECK: 377 ${ISA_CHECK}; 378 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 379 AvgPoolMicrokernelTester() 380 .pooling_elements(${PRIMARY_TILE}) 381 .pooling_tile(${PRIMARY_TILE}) 382 .channels(channels) 383 .Test(${", ".join(TEST_ARGS)}); 384 } 385 } 386 387 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 388 $if ISA_CHECK: 389 ${ISA_CHECK}; 390 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 391 AvgPoolMicrokernelTester() 392 .pooling_elements(${PRIMARY_TILE}) 393 .pooling_tile(${PRIMARY_TILE}) 394 .channels(channels) 395 .input_offset(${next_prime(CHANNEL_TILE)}) 396 .Test(${", ".join(TEST_ARGS)}); 397 } 398 } 399 400 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_zero) { 401 $if ISA_CHECK: 402 ${ISA_CHECK}; 403 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 404 for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE}; zero_index++) { 405 AvgPoolMicrokernelTester() 406 .pooling_elements(${PRIMARY_TILE}) 407 .pooling_tile(${PRIMARY_TILE}) 408 .channels(channels) 409 .input_offset(${next_prime(CHANNEL_TILE)}) 410 .zero_index(zero_index) 411 .Test(${", ".join(TEST_ARGS)}); 412 } 413 } 414 } 415 416 $if DATATYPE == "qu8": 417 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_input_scale) { 418 $if ISA_CHECK: 419 ${ISA_CHECK}; 420 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 421 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 422 AvgPoolMicrokernelTester() 423 .pooling_elements(${PRIMARY_TILE}) 424 .pooling_tile(${PRIMARY_TILE}) 425 .channels(channels) 426 .input_scale(scale) 427 .Test(${", ".join(TEST_ARGS)}); 428 } 429 } 430 } 431 432 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_input_zero_point) { 433 $if ISA_CHECK: 434 ${ISA_CHECK}; 435 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 436 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 437 AvgPoolMicrokernelTester() 438 .pooling_elements(${PRIMARY_TILE}) 439 .pooling_tile(${PRIMARY_TILE}) 440 .channels(channels) 441 .input_zero_point(zero_point) 442 .Test(${", ".join(TEST_ARGS)}); 443 } 444 } 445 } 446 447 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_output_scale) { 448 $if ISA_CHECK: 449 ${ISA_CHECK}; 450 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 451 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 452 AvgPoolMicrokernelTester() 453 .pooling_elements(${PRIMARY_TILE}) 454 .pooling_tile(${PRIMARY_TILE}) 455 .channels(channels) 456 .output_scale(scale) 457 .Test(${", ".join(TEST_ARGS)}); 458 } 459 } 460 } 461 462 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_output_zero_point) { 463 $if ISA_CHECK: 464 ${ISA_CHECK}; 465 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 466 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 467 AvgPoolMicrokernelTester() 468 .pooling_elements(${PRIMARY_TILE}) 469 .pooling_tile(${PRIMARY_TILE}) 470 .channels(channels) 471 .output_zero_point(zero_point) 472 .Test(${", ".join(TEST_ARGS)}); 473 } 474 } 475 } 476 477 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_qmin) { 478 $if ISA_CHECK: 479 ${ISA_CHECK}; 480 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 481 AvgPoolMicrokernelTester() 482 .pooling_elements(${PRIMARY_TILE}) 483 .pooling_tile(${PRIMARY_TILE}) 484 .channels(channels) 485 .qmin(128) 486 .Test(${", ".join(TEST_ARGS)}); 487 } 488 } 489 490 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_qmax) { 491 $if ISA_CHECK: 492 ${ISA_CHECK}; 493 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 494 AvgPoolMicrokernelTester() 495 .pooling_elements(${PRIMARY_TILE}) 496 .pooling_tile(${PRIMARY_TILE}) 497 .channels(channels) 498 .qmax(128) 499 .Test(${", ".join(TEST_ARGS)}); 500 } 501 } 502 503 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile) { 504 $if ISA_CHECK: 505 ${ISA_CHECK}; 506 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 507 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 508 AvgPoolMicrokernelTester() 509 .pooling_elements(pooling_elements) 510 .pooling_tile(${PRIMARY_TILE}) 511 .channels(channels) 512 .Test(${", ".join(TEST_ARGS)}); 513 } 514 } 515 } 516 517 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 518 $if ISA_CHECK: 519 ${ISA_CHECK}; 520 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 521 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 522 AvgPoolMicrokernelTester() 523 .pooling_elements(pooling_elements) 524 .pooling_tile(${PRIMARY_TILE}) 525 .channels(channels) 526 .input_offset(${next_prime(CHANNEL_TILE)}) 527 .Test(${", ".join(TEST_ARGS)}); 528 } 529 } 530 } 531 532 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile_with_zero) { 533 $if ISA_CHECK: 534 ${ISA_CHECK}; 535 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 536 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 537 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 538 AvgPoolMicrokernelTester() 539 .pooling_elements(pooling_elements) 540 .pooling_tile(${PRIMARY_TILE}) 541 .channels(channels) 542 .input_offset(${next_prime(CHANNEL_TILE)}) 543 .zero_index(zero_index) 544 .Test(${", ".join(TEST_ARGS)}); 545 } 546 } 547 } 548 } 549 550 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile) { 551 $if ISA_CHECK: 552 ${ISA_CHECK}; 553 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 554 AvgPoolMicrokernelTester() 555 .pooling_elements(${PRIMARY_TILE}) 556 .pooling_tile(${PRIMARY_TILE}) 557 .channels(channels) 558 .Test(${", ".join(TEST_ARGS)}); 559 } 560 } 561 562 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) { 563 $if ISA_CHECK: 564 ${ISA_CHECK}; 565 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 566 AvgPoolMicrokernelTester() 567 .pooling_elements(${PRIMARY_TILE}) 568 .pooling_tile(${PRIMARY_TILE}) 569 .channels(channels) 570 .input_offset(${next_prime(CHANNEL_TILE*2)}) 571 .Test(${", ".join(TEST_ARGS)}); 572 } 573 } 574 575 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_zero) { 576 $if ISA_CHECK: 577 ${ISA_CHECK}; 578 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 579 for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE}; zero_index++) { 580 AvgPoolMicrokernelTester() 581 .pooling_elements(${PRIMARY_TILE}) 582 .pooling_tile(${PRIMARY_TILE}) 583 .channels(channels) 584 .input_offset(${next_prime(CHANNEL_TILE*2)}) 585 .zero_index(zero_index) 586 .Test(${", ".join(TEST_ARGS)}); 587 } 588 } 589 } 590 591 $if DATATYPE == "qu8": 592 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_input_scale) { 593 $if ISA_CHECK: 594 ${ISA_CHECK}; 595 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 596 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 597 AvgPoolMicrokernelTester() 598 .pooling_elements(${PRIMARY_TILE}) 599 .pooling_tile(${PRIMARY_TILE}) 600 .channels(channels) 601 .input_scale(scale) 602 .Test(${", ".join(TEST_ARGS)}); 603 } 604 } 605 } 606 607 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_input_zero_point) { 608 $if ISA_CHECK: 609 ${ISA_CHECK}; 610 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 611 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 612 AvgPoolMicrokernelTester() 613 .pooling_elements(${PRIMARY_TILE}) 614 .pooling_tile(${PRIMARY_TILE}) 615 .channels(channels) 616 .input_zero_point(zero_point) 617 .Test(${", ".join(TEST_ARGS)}); 618 } 619 } 620 } 621 622 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_output_scale) { 623 $if ISA_CHECK: 624 ${ISA_CHECK}; 625 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 626 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 627 AvgPoolMicrokernelTester() 628 .pooling_elements(${PRIMARY_TILE}) 629 .pooling_tile(${PRIMARY_TILE}) 630 .channels(channels) 631 .output_scale(scale) 632 .Test(${", ".join(TEST_ARGS)}); 633 } 634 } 635 } 636 637 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_output_zero_point) { 638 $if ISA_CHECK: 639 ${ISA_CHECK}; 640 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 641 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 642 AvgPoolMicrokernelTester() 643 .pooling_elements(${PRIMARY_TILE}) 644 .pooling_tile(${PRIMARY_TILE}) 645 .channels(channels) 646 .output_zero_point(zero_point) 647 .Test(${", ".join(TEST_ARGS)}); 648 } 649 } 650 } 651 652 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_qmin) { 653 $if ISA_CHECK: 654 ${ISA_CHECK}; 655 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 656 AvgPoolMicrokernelTester() 657 .pooling_elements(${PRIMARY_TILE}) 658 .pooling_tile(${PRIMARY_TILE}) 659 .channels(channels) 660 .qmin(128) 661 .Test(${", ".join(TEST_ARGS)}); 662 } 663 } 664 665 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_qmax) { 666 $if ISA_CHECK: 667 ${ISA_CHECK}; 668 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 669 AvgPoolMicrokernelTester() 670 .pooling_elements(${PRIMARY_TILE}) 671 .pooling_tile(${PRIMARY_TILE}) 672 .channels(channels) 673 .qmax(128) 674 .Test(${", ".join(TEST_ARGS)}); 675 } 676 } 677 678 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile) { 679 $if ISA_CHECK: 680 ${ISA_CHECK}; 681 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 682 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 683 AvgPoolMicrokernelTester() 684 .pooling_elements(pooling_elements) 685 .pooling_tile(${PRIMARY_TILE}) 686 .channels(channels) 687 .Test(${", ".join(TEST_ARGS)}); 688 } 689 } 690 } 691 692 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile_with_input_offset) { 693 $if ISA_CHECK: 694 ${ISA_CHECK}; 695 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 696 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 697 AvgPoolMicrokernelTester() 698 .pooling_elements(pooling_elements) 699 .pooling_tile(${PRIMARY_TILE}) 700 .channels(channels) 701 .input_offset(${next_prime(CHANNEL_TILE*2)}) 702 .Test(${", ".join(TEST_ARGS)}); 703 } 704 } 705 } 706 707 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile_with_zero) { 708 $if ISA_CHECK: 709 ${ISA_CHECK}; 710 for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) { 711 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 712 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 713 AvgPoolMicrokernelTester() 714 .pooling_elements(pooling_elements) 715 .pooling_tile(${PRIMARY_TILE}) 716 .channels(channels) 717 .input_offset(${next_prime(CHANNEL_TILE*2)}) 718 .zero_index(zero_index) 719 .Test(${", ".join(TEST_ARGS)}); 720 } 721 } 722 } 723 } 724 725 TEST(${TEST_NAME}, few_output_pixels) { 726 $if ISA_CHECK: 727 ${ISA_CHECK}; 728 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 729 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 730 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 731 AvgPoolMicrokernelTester() 732 .output_pixels(output_pixels) 733 .pooling_elements(pooling_elements) 734 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 735 .channels(channels) 736 .Test(${", ".join(TEST_ARGS)}); 737 } 738 } 739 } 740 } 741 742 TEST(${TEST_NAME}, few_output_pixels_with_input_offset) { 743 $if ISA_CHECK: 744 ${ISA_CHECK}; 745 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 746 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 747 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 748 AvgPoolMicrokernelTester() 749 .output_pixels(output_pixels) 750 .pooling_elements(pooling_elements) 751 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 752 .channels(channels) 753 .input_offset(${next_prime(CHANNEL_TILE*5+1)}) 754 .Test(${", ".join(TEST_ARGS)}); 755 } 756 } 757 } 758 } 759 760 TEST(${TEST_NAME}, few_output_pixels_with_zero) { 761 $if ISA_CHECK: 762 ${ISA_CHECK}; 763 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 764 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 765 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 766 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 767 AvgPoolMicrokernelTester() 768 .output_pixels(output_pixels) 769 .pooling_elements(pooling_elements) 770 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 771 .channels(channels) 772 .input_offset(${next_prime(CHANNEL_TILE*5+1)}) 773 .zero_index(zero_index) 774 .Test(${", ".join(TEST_ARGS)}); 775 } 776 } 777 } 778 } 779 } 780 781 $if DATATYPE == "qu8": 782 TEST(${TEST_NAME}, few_output_pixels_with_input_scale) { 783 $if ISA_CHECK: 784 ${ISA_CHECK}; 785 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 786 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 787 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 788 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 789 AvgPoolMicrokernelTester() 790 .output_pixels(output_pixels) 791 .pooling_elements(pooling_elements) 792 .pooling_tile(${PRIMARY_TILE}) 793 .channels(channels) 794 .input_scale(scale) 795 .Test(${", ".join(TEST_ARGS)}); 796 } 797 } 798 } 799 } 800 } 801 802 TEST(${TEST_NAME}, few_output_pixels_with_input_zero_point) { 803 $if ISA_CHECK: 804 ${ISA_CHECK}; 805 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 806 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 807 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 808 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 809 AvgPoolMicrokernelTester() 810 .output_pixels(output_pixels) 811 .pooling_elements(pooling_elements) 812 .pooling_tile(${PRIMARY_TILE}) 813 .channels(channels) 814 .input_zero_point(zero_point) 815 .Test(${", ".join(TEST_ARGS)}); 816 } 817 } 818 } 819 } 820 } 821 822 TEST(${TEST_NAME}, few_output_pixels_with_output_scale) { 823 $if ISA_CHECK: 824 ${ISA_CHECK}; 825 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 826 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 827 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 828 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 829 AvgPoolMicrokernelTester() 830 .output_pixels(output_pixels) 831 .pooling_elements(pooling_elements) 832 .pooling_tile(${PRIMARY_TILE}) 833 .channels(channels) 834 .output_scale(scale) 835 .Test(${", ".join(TEST_ARGS)}); 836 } 837 } 838 } 839 } 840 } 841 842 TEST(${TEST_NAME}, few_output_pixels_with_output_zero_point) { 843 $if ISA_CHECK: 844 ${ISA_CHECK}; 845 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 846 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 847 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 848 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 849 AvgPoolMicrokernelTester() 850 .output_pixels(output_pixels) 851 .pooling_elements(pooling_elements) 852 .pooling_tile(${PRIMARY_TILE}) 853 .channels(channels) 854 .output_zero_point(zero_point) 855 .Test(${", ".join(TEST_ARGS)}); 856 } 857 } 858 } 859 } 860 } 861 862 TEST(${TEST_NAME}, few_output_pixels_with_qmin) { 863 $if ISA_CHECK: 864 ${ISA_CHECK}; 865 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 866 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 867 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 868 AvgPoolMicrokernelTester() 869 .output_pixels(output_pixels) 870 .pooling_elements(pooling_elements) 871 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 872 .channels(channels) 873 .qmin(128) 874 .Test(${", ".join(TEST_ARGS)}); 875 } 876 } 877 } 878 } 879 880 TEST(${TEST_NAME}, few_output_pixels_with_qmax) { 881 $if ISA_CHECK: 882 ${ISA_CHECK}; 883 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 884 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 885 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 886 AvgPoolMicrokernelTester() 887 .output_pixels(output_pixels) 888 .pooling_elements(pooling_elements) 889 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 890 .channels(channels) 891 .qmax(128) 892 .Test(${", ".join(TEST_ARGS)}); 893 } 894 } 895 } 896 } 897 898 TEST(${TEST_NAME}, few_output_pixels_with_output_stride) { 899 $if ISA_CHECK: 900 ${ISA_CHECK}; 901 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 902 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 903 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 904 AvgPoolMicrokernelTester() 905 .output_pixels(output_pixels) 906 .pooling_elements(pooling_elements) 907 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 908 .channels(channels) 909 .output_stride(${next_prime(CHANNEL_TILE*5+1)}) 910 .Test(${", ".join(TEST_ARGS)}); 911 } 912 } 913 } 914 } 915 916 TEST(${TEST_NAME}, few_output_pixels_with_step) { 917 $if ISA_CHECK: 918 ${ISA_CHECK}; 919 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 920 for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) { 921 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 922 for (size_t step = 2; step <= pooling_elements; step++) { 923 AvgPoolMicrokernelTester() 924 .output_pixels(output_pixels) 925 .pooling_elements(pooling_elements) 926 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 927 .step(step) 928 .channels(channels) 929 .output_stride(${next_prime(CHANNEL_TILE*5+1)}) 930 .Test(${", ".join(TEST_ARGS)}); 931 } 932 } 933 } 934 } 935 } 936$else: 937 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile) { 938 $if ISA_CHECK: 939 ${ISA_CHECK}; 940 AvgPoolMicrokernelTester() 941 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 942 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 943 .channels(${CHANNEL_TILE}) 944 .Test(${", ".join(TEST_ARGS)}); 945 } 946 947 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 948 $if ISA_CHECK: 949 ${ISA_CHECK}; 950 AvgPoolMicrokernelTester() 951 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 952 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 953 .channels(${CHANNEL_TILE}) 954 .input_offset(${next_prime(CHANNEL_TILE+1)}) 955 .Test(${", ".join(TEST_ARGS)}); 956 } 957 958 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_zero) { 959 $if ISA_CHECK: 960 ${ISA_CHECK}; 961 for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE+INCREMENTAL_TILE}; zero_index++) { 962 AvgPoolMicrokernelTester() 963 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 964 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 965 .channels(${CHANNEL_TILE}) 966 .input_offset(${next_prime(CHANNEL_TILE+1)}) 967 .zero_index(zero_index) 968 .Test(${", ".join(TEST_ARGS)}); 969 } 970 } 971 972 $if DATATYPE == "qu8": 973 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_input_scale) { 974 $if ISA_CHECK: 975 ${ISA_CHECK}; 976 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 977 AvgPoolMicrokernelTester() 978 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 979 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 980 .channels(${CHANNEL_TILE}) 981 .input_scale(scale) 982 .Test(${", ".join(TEST_ARGS)}); 983 } 984 } 985 986 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_input_zero_point) { 987 $if ISA_CHECK: 988 ${ISA_CHECK}; 989 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 990 AvgPoolMicrokernelTester() 991 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 992 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 993 .channels(${CHANNEL_TILE}) 994 .input_zero_point(zero_point) 995 .Test(${", ".join(TEST_ARGS)}); 996 } 997 } 998 999 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_output_scale) { 1000 $if ISA_CHECK: 1001 ${ISA_CHECK}; 1002 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1003 AvgPoolMicrokernelTester() 1004 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1005 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1006 .channels(${CHANNEL_TILE}) 1007 .output_scale(scale) 1008 .Test(${", ".join(TEST_ARGS)}); 1009 } 1010 } 1011 1012 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_output_zero_point) { 1013 $if ISA_CHECK: 1014 ${ISA_CHECK}; 1015 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1016 AvgPoolMicrokernelTester() 1017 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1018 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1019 .channels(${CHANNEL_TILE}) 1020 .output_zero_point(zero_point) 1021 .Test(${", ".join(TEST_ARGS)}); 1022 } 1023 } 1024 1025 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_qmin) { 1026 $if ISA_CHECK: 1027 ${ISA_CHECK}; 1028 AvgPoolMicrokernelTester() 1029 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1030 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1031 .channels(${CHANNEL_TILE}) 1032 .qmin(128) 1033 .Test(${", ".join(TEST_ARGS)}); 1034 } 1035 1036 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_qmax) { 1037 $if ISA_CHECK: 1038 ${ISA_CHECK}; 1039 AvgPoolMicrokernelTester() 1040 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1041 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1042 .channels(${CHANNEL_TILE}) 1043 .qmax(128) 1044 .Test(${", ".join(TEST_ARGS)}); 1045 } 1046 1047 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile) { 1048 $if ISA_CHECK: 1049 ${ISA_CHECK}; 1050 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1051 AvgPoolMicrokernelTester() 1052 .pooling_elements(pooling_elements) 1053 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1054 .channels(${CHANNEL_TILE}) 1055 .Test(${", ".join(TEST_ARGS)}); 1056 } 1057 } 1058 1059 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 1060 $if ISA_CHECK: 1061 ${ISA_CHECK}; 1062 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1063 AvgPoolMicrokernelTester() 1064 .pooling_elements(pooling_elements) 1065 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1066 .channels(${CHANNEL_TILE}) 1067 .input_offset(${next_prime(CHANNEL_TILE+1)}) 1068 .Test(${", ".join(TEST_ARGS)}); 1069 } 1070 } 1071 1072 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile_with_zero) { 1073 $if ISA_CHECK: 1074 ${ISA_CHECK}; 1075 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1076 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 1077 AvgPoolMicrokernelTester() 1078 .pooling_elements(pooling_elements) 1079 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1080 .channels(${CHANNEL_TILE}) 1081 .input_offset(${next_prime(CHANNEL_TILE+1)}) 1082 .zero_index(zero_index) 1083 .Test(${", ".join(TEST_ARGS)}); 1084 } 1085 } 1086 } 1087 1088 $if CHANNEL_TILE > 1: 1089 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile) { 1090 $if ISA_CHECK: 1091 ${ISA_CHECK}; 1092 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1093 AvgPoolMicrokernelTester() 1094 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1095 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1096 .channels(channels) 1097 .Test(${", ".join(TEST_ARGS)}); 1098 } 1099 } 1100 1101 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 1102 $if ISA_CHECK: 1103 ${ISA_CHECK}; 1104 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1105 AvgPoolMicrokernelTester() 1106 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1107 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1108 .channels(channels) 1109 .input_offset(${next_prime(CHANNEL_TILE*5)}) 1110 .Test(${", ".join(TEST_ARGS)}); 1111 } 1112 } 1113 1114 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_zero) { 1115 $if ISA_CHECK: 1116 ${ISA_CHECK}; 1117 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1118 for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE+INCREMENTAL_TILE}; zero_index++) { 1119 AvgPoolMicrokernelTester() 1120 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1121 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1122 .channels(channels) 1123 .input_offset(${next_prime(CHANNEL_TILE*5)}) 1124 .zero_index(zero_index) 1125 .Test(${", ".join(TEST_ARGS)}); 1126 } 1127 } 1128 } 1129 1130 $if DATATYPE == "qu8": 1131 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_input_scale) { 1132 $if ISA_CHECK: 1133 ${ISA_CHECK}; 1134 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1135 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1136 AvgPoolMicrokernelTester() 1137 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1138 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1139 .channels(channels) 1140 .input_scale(scale) 1141 .Test(${", ".join(TEST_ARGS)}); 1142 } 1143 } 1144 } 1145 1146 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_input_zero_point) { 1147 $if ISA_CHECK: 1148 ${ISA_CHECK}; 1149 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1150 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1151 AvgPoolMicrokernelTester() 1152 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1153 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1154 .channels(channels) 1155 .input_zero_point(zero_point) 1156 .Test(${", ".join(TEST_ARGS)}); 1157 } 1158 } 1159 } 1160 1161 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_output_scale) { 1162 $if ISA_CHECK: 1163 ${ISA_CHECK}; 1164 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1165 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1166 AvgPoolMicrokernelTester() 1167 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1168 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1169 .channels(channels) 1170 .output_scale(scale) 1171 .Test(${", ".join(TEST_ARGS)}); 1172 } 1173 } 1174 } 1175 1176 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_output_zero_point) { 1177 $if ISA_CHECK: 1178 ${ISA_CHECK}; 1179 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1180 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1181 AvgPoolMicrokernelTester() 1182 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1183 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1184 .channels(channels) 1185 .output_zero_point(zero_point) 1186 .Test(${", ".join(TEST_ARGS)}); 1187 } 1188 } 1189 } 1190 1191 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_qmin) { 1192 $if ISA_CHECK: 1193 ${ISA_CHECK}; 1194 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1195 AvgPoolMicrokernelTester() 1196 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1197 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1198 .channels(channels) 1199 .qmin(128) 1200 .Test(${", ".join(TEST_ARGS)}); 1201 } 1202 } 1203 1204 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_qmax) { 1205 $if ISA_CHECK: 1206 ${ISA_CHECK}; 1207 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1208 AvgPoolMicrokernelTester() 1209 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1210 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1211 .channels(channels) 1212 .qmax(128) 1213 .Test(${", ".join(TEST_ARGS)}); 1214 } 1215 } 1216 1217 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile) { 1218 $if ISA_CHECK: 1219 ${ISA_CHECK}; 1220 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1221 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1222 AvgPoolMicrokernelTester() 1223 .pooling_elements(pooling_elements) 1224 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1225 .channels(channels) 1226 .Test(${", ".join(TEST_ARGS)}); 1227 } 1228 } 1229 } 1230 1231 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 1232 $if ISA_CHECK: 1233 ${ISA_CHECK}; 1234 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1235 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1236 AvgPoolMicrokernelTester() 1237 .pooling_elements(pooling_elements) 1238 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1239 .channels(channels) 1240 .input_offset(${next_prime(CHANNEL_TILE*8)}) 1241 .Test(${", ".join(TEST_ARGS)}); 1242 } 1243 } 1244 } 1245 1246 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile_with_zero) { 1247 $if ISA_CHECK: 1248 ${ISA_CHECK}; 1249 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1250 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1251 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 1252 AvgPoolMicrokernelTester() 1253 .pooling_elements(pooling_elements) 1254 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1255 .channels(channels) 1256 .input_offset(${next_prime(CHANNEL_TILE*8)}) 1257 .zero_index(zero_index) 1258 .Test(${", ".join(TEST_ARGS)}); 1259 } 1260 } 1261 } 1262 } 1263 1264 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile) { 1265 $if ISA_CHECK: 1266 ${ISA_CHECK}; 1267 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1268 AvgPoolMicrokernelTester() 1269 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1270 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1271 .channels(channels) 1272 .Test(${", ".join(TEST_ARGS)}); 1273 } 1274 } 1275 1276 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 1277 $if ISA_CHECK: 1278 ${ISA_CHECK}; 1279 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1280 AvgPoolMicrokernelTester() 1281 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1282 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1283 .channels(channels) 1284 .input_offset(${next_prime(CHANNEL_TILE)}) 1285 .Test(${", ".join(TEST_ARGS)}); 1286 } 1287 } 1288 1289 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_zero_index) { 1290 $if ISA_CHECK: 1291 ${ISA_CHECK}; 1292 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1293 for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE+INCREMENTAL_TILE}; zero_index++) { 1294 AvgPoolMicrokernelTester() 1295 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1296 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1297 .channels(channels) 1298 .input_offset(${next_prime(CHANNEL_TILE)}) 1299 .zero_index(zero_index) 1300 .Test(${", ".join(TEST_ARGS)}); 1301 } 1302 } 1303 } 1304 1305 $if DATATYPE == "qu8": 1306 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_input_scale) { 1307 $if ISA_CHECK: 1308 ${ISA_CHECK}; 1309 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1310 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1311 AvgPoolMicrokernelTester() 1312 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1313 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1314 .channels(channels) 1315 .input_scale(scale) 1316 .Test(${", ".join(TEST_ARGS)}); 1317 } 1318 } 1319 } 1320 1321 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_input_zero_point) { 1322 $if ISA_CHECK: 1323 ${ISA_CHECK}; 1324 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1325 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1326 AvgPoolMicrokernelTester() 1327 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1328 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1329 .channels(channels) 1330 .input_zero_point(zero_point) 1331 .Test(${", ".join(TEST_ARGS)}); 1332 } 1333 } 1334 } 1335 1336 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_output_scale) { 1337 $if ISA_CHECK: 1338 ${ISA_CHECK}; 1339 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1340 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1341 AvgPoolMicrokernelTester() 1342 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1343 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1344 .channels(channels) 1345 .output_scale(scale) 1346 .Test(${", ".join(TEST_ARGS)}); 1347 } 1348 } 1349 } 1350 1351 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_output_zero_point) { 1352 $if ISA_CHECK: 1353 ${ISA_CHECK}; 1354 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1355 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1356 AvgPoolMicrokernelTester() 1357 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1358 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1359 .channels(channels) 1360 .output_zero_point(zero_point) 1361 .Test(${", ".join(TEST_ARGS)}); 1362 } 1363 } 1364 } 1365 1366 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_qmin) { 1367 $if ISA_CHECK: 1368 ${ISA_CHECK}; 1369 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1370 AvgPoolMicrokernelTester() 1371 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1372 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1373 .channels(channels) 1374 .qmin(128) 1375 .Test(${", ".join(TEST_ARGS)}); 1376 } 1377 } 1378 1379 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_qmax) { 1380 $if ISA_CHECK: 1381 ${ISA_CHECK}; 1382 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1383 AvgPoolMicrokernelTester() 1384 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1385 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1386 .channels(channels) 1387 .qmax(128) 1388 .Test(${", ".join(TEST_ARGS)}); 1389 } 1390 } 1391 1392 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile) { 1393 $if ISA_CHECK: 1394 ${ISA_CHECK}; 1395 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1396 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1397 AvgPoolMicrokernelTester() 1398 .pooling_elements(pooling_elements) 1399 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1400 .channels(channels) 1401 .Test(${", ".join(TEST_ARGS)}); 1402 } 1403 } 1404 } 1405 1406 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 1407 $if ISA_CHECK: 1408 ${ISA_CHECK}; 1409 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1410 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1411 AvgPoolMicrokernelTester() 1412 .pooling_elements(pooling_elements) 1413 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1414 .channels(channels) 1415 .input_offset(${next_prime(CHANNEL_TILE)}) 1416 .Test(${", ".join(TEST_ARGS)}); 1417 } 1418 } 1419 } 1420 1421 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile_with_zero) { 1422 $if ISA_CHECK: 1423 ${ISA_CHECK}; 1424 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1425 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1426 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 1427 AvgPoolMicrokernelTester() 1428 .pooling_elements(pooling_elements) 1429 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1430 .channels(channels) 1431 .input_offset(${next_prime(CHANNEL_TILE)}) 1432 .zero_index(zero_index) 1433 .Test(${", ".join(TEST_ARGS)}); 1434 } 1435 } 1436 } 1437 } 1438 1439 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile) { 1440 $if ISA_CHECK: 1441 ${ISA_CHECK}; 1442 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1443 AvgPoolMicrokernelTester() 1444 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1445 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1446 .channels(channels) 1447 .Test(${", ".join(TEST_ARGS)}); 1448 } 1449 } 1450 1451 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) { 1452 $if ISA_CHECK: 1453 ${ISA_CHECK}; 1454 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1455 AvgPoolMicrokernelTester() 1456 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1457 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1458 .channels(channels) 1459 .input_offset(${next_prime(CHANNEL_TILE*2)}) 1460 .Test(${", ".join(TEST_ARGS)}); 1461 } 1462 } 1463 1464 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_zero) { 1465 $if ISA_CHECK: 1466 ${ISA_CHECK}; 1467 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1468 for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE+INCREMENTAL_TILE}; zero_index++) { 1469 AvgPoolMicrokernelTester() 1470 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1471 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1472 .channels(channels) 1473 .input_offset(${next_prime(CHANNEL_TILE*2)}) 1474 .zero_index(zero_index) 1475 .Test(${", ".join(TEST_ARGS)}); 1476 } 1477 } 1478 } 1479 1480 $if DATATYPE == "qu8": 1481 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_input_scale) { 1482 $if ISA_CHECK: 1483 ${ISA_CHECK}; 1484 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1485 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1486 AvgPoolMicrokernelTester() 1487 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1488 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1489 .channels(channels) 1490 .input_scale(scale) 1491 .Test(${", ".join(TEST_ARGS)}); 1492 } 1493 } 1494 } 1495 1496 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_input_zero_point) { 1497 $if ISA_CHECK: 1498 ${ISA_CHECK}; 1499 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1500 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1501 AvgPoolMicrokernelTester() 1502 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1503 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1504 .channels(channels) 1505 .input_zero_point(zero_point) 1506 .Test(${", ".join(TEST_ARGS)}); 1507 } 1508 } 1509 } 1510 1511 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_output_scale) { 1512 $if ISA_CHECK: 1513 ${ISA_CHECK}; 1514 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1515 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1516 AvgPoolMicrokernelTester() 1517 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1518 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1519 .channels(channels) 1520 .output_scale(scale) 1521 .Test(${", ".join(TEST_ARGS)}); 1522 } 1523 } 1524 } 1525 1526 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_output_zero_point) { 1527 $if ISA_CHECK: 1528 ${ISA_CHECK}; 1529 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1530 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1531 AvgPoolMicrokernelTester() 1532 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1533 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1534 .channels(channels) 1535 .output_zero_point(zero_point) 1536 .Test(${", ".join(TEST_ARGS)}); 1537 } 1538 } 1539 } 1540 1541 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_qmin) { 1542 $if ISA_CHECK: 1543 ${ISA_CHECK}; 1544 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1545 AvgPoolMicrokernelTester() 1546 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1547 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1548 .channels(channels) 1549 .qmin(128) 1550 .Test(${", ".join(TEST_ARGS)}); 1551 } 1552 } 1553 1554 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_qmax) { 1555 $if ISA_CHECK: 1556 ${ISA_CHECK}; 1557 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1558 AvgPoolMicrokernelTester() 1559 .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE}) 1560 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1561 .channels(channels) 1562 .qmax(128) 1563 .Test(${", ".join(TEST_ARGS)}); 1564 } 1565 } 1566 1567 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile) { 1568 $if ISA_CHECK: 1569 ${ISA_CHECK}; 1570 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1571 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1572 AvgPoolMicrokernelTester() 1573 .pooling_elements(pooling_elements) 1574 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1575 .channels(channels) 1576 .Test(${", ".join(TEST_ARGS)}); 1577 } 1578 } 1579 } 1580 1581 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile_with_input_offset) { 1582 $if ISA_CHECK: 1583 ${ISA_CHECK}; 1584 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1585 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1586 AvgPoolMicrokernelTester() 1587 .pooling_elements(pooling_elements) 1588 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1589 .channels(channels) 1590 .input_offset(${next_prime(CHANNEL_TILE*2)}) 1591 .Test(${", ".join(TEST_ARGS)}); 1592 } 1593 } 1594 } 1595 1596 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile_with_zero) { 1597 $if ISA_CHECK: 1598 ${ISA_CHECK}; 1599 for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) { 1600 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 1601 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 1602 AvgPoolMicrokernelTester() 1603 .pooling_elements(pooling_elements) 1604 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1605 .channels(channels) 1606 .input_offset(${next_prime(CHANNEL_TILE*2)}) 1607 .zero_index(zero_index) 1608 .Test(${", ".join(TEST_ARGS)}); 1609 } 1610 } 1611 } 1612 } 1613 1614 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass) { 1615 $if ISA_CHECK: 1616 ${ISA_CHECK}; 1617 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1618 AvgPoolMicrokernelTester() 1619 .pooling_elements(pooling_elements) 1620 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1621 .channels(${CHANNEL_TILE}) 1622 .Test(${", ".join(TEST_ARGS)}); 1623 } 1624 } 1625 1626 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_input_offset) { 1627 $if ISA_CHECK: 1628 ${ISA_CHECK}; 1629 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1630 AvgPoolMicrokernelTester() 1631 .pooling_elements(pooling_elements) 1632 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1633 .channels(${CHANNEL_TILE}) 1634 .input_offset(${next_prime(CHANNEL_TILE+1)}) 1635 .Test(${", ".join(TEST_ARGS)}); 1636 } 1637 } 1638 1639 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_zero) { 1640 $if ISA_CHECK: 1641 ${ISA_CHECK}; 1642 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1643 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 1644 AvgPoolMicrokernelTester() 1645 .pooling_elements(pooling_elements) 1646 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1647 .channels(${CHANNEL_TILE}) 1648 .input_offset(${next_prime(CHANNEL_TILE+1)}) 1649 .zero_index(zero_index) 1650 .Test(${", ".join(TEST_ARGS)}); 1651 } 1652 } 1653 } 1654 1655 $if DATATYPE == "qu8": 1656 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_input_scale) { 1657 $if ISA_CHECK: 1658 ${ISA_CHECK}; 1659 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1660 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1661 AvgPoolMicrokernelTester() 1662 .pooling_elements(pooling_elements) 1663 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1664 .channels(${CHANNEL_TILE}) 1665 .input_scale(scale) 1666 .Test(${", ".join(TEST_ARGS)}); 1667 } 1668 } 1669 } 1670 1671 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_input_zero_point) { 1672 $if ISA_CHECK: 1673 ${ISA_CHECK}; 1674 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1675 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1676 AvgPoolMicrokernelTester() 1677 .pooling_elements(pooling_elements) 1678 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1679 .channels(${CHANNEL_TILE}) 1680 .input_zero_point(zero_point) 1681 .Test(${", ".join(TEST_ARGS)}); 1682 } 1683 } 1684 } 1685 1686 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_output_scale) { 1687 $if ISA_CHECK: 1688 ${ISA_CHECK}; 1689 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1690 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1691 AvgPoolMicrokernelTester() 1692 .pooling_elements(pooling_elements) 1693 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1694 .channels(${CHANNEL_TILE}) 1695 .output_scale(scale) 1696 .Test(${", ".join(TEST_ARGS)}); 1697 } 1698 } 1699 } 1700 1701 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_output_zero_point) { 1702 $if ISA_CHECK: 1703 ${ISA_CHECK}; 1704 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1705 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1706 AvgPoolMicrokernelTester() 1707 .pooling_elements(pooling_elements) 1708 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1709 .channels(${CHANNEL_TILE}) 1710 .output_zero_point(zero_point) 1711 .Test(${", ".join(TEST_ARGS)}); 1712 } 1713 } 1714 } 1715 1716 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_qmin) { 1717 $if ISA_CHECK: 1718 ${ISA_CHECK}; 1719 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1720 AvgPoolMicrokernelTester() 1721 .pooling_elements(pooling_elements) 1722 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1723 .channels(${CHANNEL_TILE}) 1724 .qmin(128) 1725 .Test(${", ".join(TEST_ARGS)}); 1726 } 1727 } 1728 1729 TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_qmax) { 1730 $if ISA_CHECK: 1731 ${ISA_CHECK}; 1732 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1733 AvgPoolMicrokernelTester() 1734 .pooling_elements(pooling_elements) 1735 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1736 .channels(${CHANNEL_TILE}) 1737 .qmax(128) 1738 .Test(${", ".join(TEST_ARGS)}); 1739 } 1740 } 1741 1742 $if CHANNEL_TILE > 1: 1743 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass) { 1744 $if ISA_CHECK: 1745 ${ISA_CHECK}; 1746 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1747 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1748 AvgPoolMicrokernelTester() 1749 .pooling_elements(pooling_elements) 1750 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1751 .channels(channels) 1752 .Test(${", ".join(TEST_ARGS)}); 1753 } 1754 } 1755 } 1756 1757 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_input_offset) { 1758 $if ISA_CHECK: 1759 ${ISA_CHECK}; 1760 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1761 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1762 AvgPoolMicrokernelTester() 1763 .pooling_elements(pooling_elements) 1764 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1765 .channels(channels) 1766 .input_offset(${next_prime(CHANNEL_TILE*8)}) 1767 .Test(${", ".join(TEST_ARGS)}); 1768 } 1769 } 1770 } 1771 1772 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_zero) { 1773 $if ISA_CHECK: 1774 ${ISA_CHECK}; 1775 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1776 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1777 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 1778 AvgPoolMicrokernelTester() 1779 .pooling_elements(pooling_elements) 1780 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1781 .channels(channels) 1782 .input_offset(${next_prime(CHANNEL_TILE*8)}) 1783 .zero_index(zero_index) 1784 .Test(${", ".join(TEST_ARGS)}); 1785 } 1786 } 1787 } 1788 } 1789 1790 $if DATATYPE == "qu8": 1791 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_input_scale) { 1792 $if ISA_CHECK: 1793 ${ISA_CHECK}; 1794 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1795 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1796 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1797 AvgPoolMicrokernelTester() 1798 .pooling_elements(pooling_elements) 1799 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1800 .channels(channels) 1801 .input_scale(scale) 1802 .Test(${", ".join(TEST_ARGS)}); 1803 } 1804 } 1805 } 1806 } 1807 1808 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_input_zero_point) { 1809 $if ISA_CHECK: 1810 ${ISA_CHECK}; 1811 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1812 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1813 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1814 AvgPoolMicrokernelTester() 1815 .pooling_elements(pooling_elements) 1816 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1817 .channels(channels) 1818 .input_zero_point(zero_point) 1819 .Test(${", ".join(TEST_ARGS)}); 1820 } 1821 } 1822 } 1823 } 1824 1825 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_output_scale) { 1826 $if ISA_CHECK: 1827 ${ISA_CHECK}; 1828 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1829 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1830 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1831 AvgPoolMicrokernelTester() 1832 .pooling_elements(pooling_elements) 1833 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1834 .channels(channels) 1835 .output_scale(scale) 1836 .Test(${", ".join(TEST_ARGS)}); 1837 } 1838 } 1839 } 1840 } 1841 1842 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_output_zero_point) { 1843 $if ISA_CHECK: 1844 ${ISA_CHECK}; 1845 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1846 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1847 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1848 AvgPoolMicrokernelTester() 1849 .pooling_elements(pooling_elements) 1850 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1851 .channels(channels) 1852 .output_zero_point(zero_point) 1853 .Test(${", ".join(TEST_ARGS)}); 1854 } 1855 } 1856 } 1857 } 1858 1859 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_qmin) { 1860 $if ISA_CHECK: 1861 ${ISA_CHECK}; 1862 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1863 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1864 AvgPoolMicrokernelTester() 1865 .pooling_elements(pooling_elements) 1866 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1867 .channels(channels) 1868 .qmin(128) 1869 .Test(${", ".join(TEST_ARGS)}); 1870 } 1871 } 1872 } 1873 1874 TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_qmax) { 1875 $if ISA_CHECK: 1876 ${ISA_CHECK}; 1877 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1878 for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) { 1879 AvgPoolMicrokernelTester() 1880 .pooling_elements(pooling_elements) 1881 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1882 .channels(channels) 1883 .qmax(128) 1884 .Test(${", ".join(TEST_ARGS)}); 1885 } 1886 } 1887 } 1888 1889 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass) { 1890 $if ISA_CHECK: 1891 ${ISA_CHECK}; 1892 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1893 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1894 AvgPoolMicrokernelTester() 1895 .pooling_elements(pooling_elements) 1896 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1897 .channels(channels) 1898 .Test(${", ".join(TEST_ARGS)}); 1899 } 1900 } 1901 } 1902 1903 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_input_offset) { 1904 $if ISA_CHECK: 1905 ${ISA_CHECK}; 1906 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1907 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1908 AvgPoolMicrokernelTester() 1909 .pooling_elements(pooling_elements) 1910 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1911 .channels(channels) 1912 .input_offset(${CHANNEL_TILE}) 1913 .Test(${", ".join(TEST_ARGS)}); 1914 } 1915 } 1916 } 1917 1918 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_zero) { 1919 $if ISA_CHECK: 1920 ${ISA_CHECK}; 1921 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1922 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1923 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 1924 AvgPoolMicrokernelTester() 1925 .pooling_elements(pooling_elements) 1926 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1927 .channels(channels) 1928 .input_offset(${CHANNEL_TILE}) 1929 .zero_index(zero_index) 1930 .Test(${", ".join(TEST_ARGS)}); 1931 } 1932 } 1933 } 1934 } 1935 1936 $if DATATYPE == "qu8": 1937 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_input_scale) { 1938 $if ISA_CHECK: 1939 ${ISA_CHECK}; 1940 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1941 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1942 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1943 AvgPoolMicrokernelTester() 1944 .pooling_elements(pooling_elements) 1945 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1946 .channels(channels) 1947 .input_scale(scale) 1948 .Test(${", ".join(TEST_ARGS)}); 1949 } 1950 } 1951 } 1952 } 1953 1954 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_input_zero_point) { 1955 $if ISA_CHECK: 1956 ${ISA_CHECK}; 1957 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1958 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1959 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1960 AvgPoolMicrokernelTester() 1961 .pooling_elements(pooling_elements) 1962 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1963 .channels(channels) 1964 .input_zero_point(zero_point) 1965 .Test(${", ".join(TEST_ARGS)}); 1966 } 1967 } 1968 } 1969 } 1970 1971 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_output_scale) { 1972 $if ISA_CHECK: 1973 ${ISA_CHECK}; 1974 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1975 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1976 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 1977 AvgPoolMicrokernelTester() 1978 .pooling_elements(pooling_elements) 1979 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1980 .channels(channels) 1981 .output_scale(scale) 1982 .Test(${", ".join(TEST_ARGS)}); 1983 } 1984 } 1985 } 1986 } 1987 1988 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_output_zero_point) { 1989 $if ISA_CHECK: 1990 ${ISA_CHECK}; 1991 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 1992 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 1993 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 1994 AvgPoolMicrokernelTester() 1995 .pooling_elements(pooling_elements) 1996 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 1997 .channels(channels) 1998 .output_zero_point(zero_point) 1999 .Test(${", ".join(TEST_ARGS)}); 2000 } 2001 } 2002 } 2003 } 2004 2005 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_qmin) { 2006 $if ISA_CHECK: 2007 ${ISA_CHECK}; 2008 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2009 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 2010 AvgPoolMicrokernelTester() 2011 .pooling_elements(pooling_elements) 2012 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2013 .channels(channels) 2014 .qmin(128) 2015 .Test(${", ".join(TEST_ARGS)}); 2016 } 2017 } 2018 } 2019 2020 TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_qmax) { 2021 $if ISA_CHECK: 2022 ${ISA_CHECK}; 2023 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2024 for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) { 2025 AvgPoolMicrokernelTester() 2026 .pooling_elements(pooling_elements) 2027 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2028 .channels(channels) 2029 .qmax(128) 2030 .Test(${", ".join(TEST_ARGS)}); 2031 } 2032 } 2033 } 2034 2035 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass) { 2036 $if ISA_CHECK: 2037 ${ISA_CHECK}; 2038 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2039 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 2040 AvgPoolMicrokernelTester() 2041 .pooling_elements(pooling_elements) 2042 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2043 .channels(channels) 2044 .Test(${", ".join(TEST_ARGS)}); 2045 } 2046 } 2047 } 2048 2049 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_input_offset) { 2050 $if ISA_CHECK: 2051 ${ISA_CHECK}; 2052 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2053 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 2054 AvgPoolMicrokernelTester() 2055 .pooling_elements(pooling_elements) 2056 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2057 .channels(channels) 2058 .input_offset(${next_prime(CHANNEL_TILE*2)}) 2059 .Test(${", ".join(TEST_ARGS)}); 2060 } 2061 } 2062 } 2063 2064 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_zero) { 2065 $if ISA_CHECK: 2066 ${ISA_CHECK}; 2067 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2068 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 2069 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 2070 AvgPoolMicrokernelTester() 2071 .pooling_elements(pooling_elements) 2072 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2073 .channels(channels) 2074 .input_offset(${next_prime(CHANNEL_TILE*2)}) 2075 .zero_index(zero_index) 2076 .Test(${", ".join(TEST_ARGS)}); 2077 } 2078 } 2079 } 2080 } 2081 2082 $if DATATYPE == "qu8": 2083 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_input_scale) { 2084 $if ISA_CHECK: 2085 ${ISA_CHECK}; 2086 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2087 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 2088 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 2089 AvgPoolMicrokernelTester() 2090 .pooling_elements(pooling_elements) 2091 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2092 .channels(channels) 2093 .input_scale(scale) 2094 .Test(${", ".join(TEST_ARGS)}); 2095 } 2096 } 2097 } 2098 } 2099 2100 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_input_zero_point) { 2101 $if ISA_CHECK: 2102 ${ISA_CHECK}; 2103 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2104 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 2105 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 2106 AvgPoolMicrokernelTester() 2107 .pooling_elements(pooling_elements) 2108 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2109 .channels(channels) 2110 .input_zero_point(zero_point) 2111 .Test(${", ".join(TEST_ARGS)}); 2112 } 2113 } 2114 } 2115 } 2116 2117 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_output_scale) { 2118 $if ISA_CHECK: 2119 ${ISA_CHECK}; 2120 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2121 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 2122 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 2123 AvgPoolMicrokernelTester() 2124 .pooling_elements(pooling_elements) 2125 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2126 .channels(channels) 2127 .output_scale(scale) 2128 .Test(${", ".join(TEST_ARGS)}); 2129 } 2130 } 2131 } 2132 } 2133 2134 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_output_zero_point) { 2135 $if ISA_CHECK: 2136 ${ISA_CHECK}; 2137 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2138 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 2139 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 2140 AvgPoolMicrokernelTester() 2141 .pooling_elements(pooling_elements) 2142 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2143 .channels(channels) 2144 .output_zero_point(zero_point) 2145 .Test(${", ".join(TEST_ARGS)}); 2146 } 2147 } 2148 } 2149 } 2150 2151 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_qmin) { 2152 $if ISA_CHECK: 2153 ${ISA_CHECK}; 2154 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2155 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 2156 AvgPoolMicrokernelTester() 2157 .pooling_elements(pooling_elements) 2158 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2159 .channels(channels) 2160 .qmin(128) 2161 .Test(${", ".join(TEST_ARGS)}); 2162 } 2163 } 2164 } 2165 2166 TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_qmax) { 2167 $if ISA_CHECK: 2168 ${ISA_CHECK}; 2169 for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) { 2170 for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) { 2171 AvgPoolMicrokernelTester() 2172 .pooling_elements(pooling_elements) 2173 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2174 .channels(channels) 2175 .qmax(128) 2176 .Test(${", ".join(TEST_ARGS)}); 2177 } 2178 } 2179 } 2180 2181 TEST(${TEST_NAME}, few_output_pixels) { 2182 $if ISA_CHECK: 2183 ${ISA_CHECK}; 2184 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2185 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2186 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2187 AvgPoolMicrokernelTester() 2188 .output_pixels(output_pixels) 2189 .pooling_elements(pooling_elements) 2190 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2191 .channels(channels) 2192 .Test(${", ".join(TEST_ARGS)}); 2193 } 2194 } 2195 } 2196 } 2197 2198 TEST(${TEST_NAME}, few_output_pixels_with_input_offset) { 2199 $if ISA_CHECK: 2200 ${ISA_CHECK}; 2201 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2202 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2203 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2204 AvgPoolMicrokernelTester() 2205 .output_pixels(output_pixels) 2206 .pooling_elements(pooling_elements) 2207 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2208 .channels(channels) 2209 .input_offset(${next_prime(CHANNEL_TILE*5+1)}) 2210 .Test(${", ".join(TEST_ARGS)}); 2211 } 2212 } 2213 } 2214 } 2215 2216 TEST(${TEST_NAME}, few_output_pixels_with_zero) { 2217 $if ISA_CHECK: 2218 ${ISA_CHECK}; 2219 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2220 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2221 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2222 for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) { 2223 AvgPoolMicrokernelTester() 2224 .output_pixels(output_pixels) 2225 .pooling_elements(pooling_elements) 2226 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2227 .channels(channels) 2228 .input_offset(${next_prime(CHANNEL_TILE*5+1)}) 2229 .zero_index(zero_index) 2230 .Test(${", ".join(TEST_ARGS)}); 2231 } 2232 } 2233 } 2234 } 2235 } 2236 2237 $if DATATYPE == "qu8": 2238 TEST(${TEST_NAME}, few_output_pixels_with_input_scale) { 2239 $if ISA_CHECK: 2240 ${ISA_CHECK}; 2241 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2242 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2243 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2244 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 2245 AvgPoolMicrokernelTester() 2246 .output_pixels(output_pixels) 2247 .pooling_elements(pooling_elements) 2248 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2249 .channels(channels) 2250 .input_scale(scale) 2251 .Test(${", ".join(TEST_ARGS)}); 2252 } 2253 } 2254 } 2255 } 2256 } 2257 2258 TEST(${TEST_NAME}, few_output_pixels_with_input_zero_point) { 2259 $if ISA_CHECK: 2260 ${ISA_CHECK}; 2261 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2262 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2263 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2264 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 2265 AvgPoolMicrokernelTester() 2266 .output_pixels(output_pixels) 2267 .pooling_elements(pooling_elements) 2268 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2269 .channels(channels) 2270 .input_zero_point(zero_point) 2271 .Test(${", ".join(TEST_ARGS)}); 2272 } 2273 } 2274 } 2275 } 2276 } 2277 2278 TEST(${TEST_NAME}, few_output_pixels_with_output_scale) { 2279 $if ISA_CHECK: 2280 ${ISA_CHECK}; 2281 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2282 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2283 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2284 for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) { 2285 AvgPoolMicrokernelTester() 2286 .output_pixels(output_pixels) 2287 .pooling_elements(pooling_elements) 2288 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2289 .channels(channels) 2290 .output_scale(scale) 2291 .Test(${", ".join(TEST_ARGS)}); 2292 } 2293 } 2294 } 2295 } 2296 } 2297 2298 TEST(${TEST_NAME}, few_output_pixels_with_output_zero_point) { 2299 $if ISA_CHECK: 2300 ${ISA_CHECK}; 2301 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2302 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2303 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2304 for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) { 2305 AvgPoolMicrokernelTester() 2306 .output_pixels(output_pixels) 2307 .pooling_elements(pooling_elements) 2308 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2309 .channels(channels) 2310 .output_zero_point(zero_point) 2311 .Test(${", ".join(TEST_ARGS)}); 2312 } 2313 } 2314 } 2315 } 2316 } 2317 2318 TEST(${TEST_NAME}, few_output_pixels_with_qmin) { 2319 $if ISA_CHECK: 2320 ${ISA_CHECK}; 2321 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2322 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2323 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2324 AvgPoolMicrokernelTester() 2325 .output_pixels(output_pixels) 2326 .pooling_elements(pooling_elements) 2327 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2328 .channels(channels) 2329 .qmin(128) 2330 .Test(${", ".join(TEST_ARGS)}); 2331 } 2332 } 2333 } 2334 } 2335 2336 TEST(${TEST_NAME}, few_output_pixels_with_qmax) { 2337 $if ISA_CHECK: 2338 ${ISA_CHECK}; 2339 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2340 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2341 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2342 AvgPoolMicrokernelTester() 2343 .output_pixels(output_pixels) 2344 .pooling_elements(pooling_elements) 2345 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2346 .channels(channels) 2347 .qmax(128) 2348 .Test(${", ".join(TEST_ARGS)}); 2349 } 2350 } 2351 } 2352 } 2353 2354 TEST(${TEST_NAME}, few_output_pixels_with_output_stride) { 2355 $if ISA_CHECK: 2356 ${ISA_CHECK}; 2357 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2358 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2359 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2360 AvgPoolMicrokernelTester() 2361 .output_pixels(output_pixels) 2362 .pooling_elements(pooling_elements) 2363 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2364 .channels(channels) 2365 .output_stride(${next_prime(CHANNEL_TILE*5+1)}) 2366 .Test(${", ".join(TEST_ARGS)}); 2367 } 2368 } 2369 } 2370 } 2371 2372 TEST(${TEST_NAME}, few_output_pixels_with_step) { 2373 $if ISA_CHECK: 2374 ${ISA_CHECK}; 2375 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) { 2376 for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) { 2377 for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) { 2378 for (size_t step = 2; step <= pooling_elements; step++) { 2379 AvgPoolMicrokernelTester() 2380 .output_pixels(output_pixels) 2381 .pooling_elements(pooling_elements) 2382 .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE}) 2383 .step(step) 2384 .channels(channels) 2385 .output_stride(${next_prime(CHANNEL_TILE*5+1)}) 2386 .Test(${", ".join(TEST_ARGS)}); 2387 } 2388 } 2389 } 2390 } 2391 } 2392""" 2393 2394 2395def generate_test_cases(ukernel, primary_tile, incremental_tile, channel_tile, 2396 isa): 2397 """Generates all tests cases for a AVGPOOL micro-kernel. 2398 2399 Args: 2400 ukernel: C name of the micro-kernel function. 2401 primary_tile: Number of rows (pixels) processed per one iteration of the 2402 primary outer loop of the micro-kernel. 2403 incremental_tile: Number of rows (pixels) processed per one iteration of 2404 the incremental outer loop of the micro-kernel. 2405 channel_tile: Number of channels processed per one iteration of the inner 2406 loops of the micro-kernel. 2407 isa: instruction set required to run the micro-kernel. Generated unit test 2408 will skip execution if the host processor doesn't support this ISA. 2409 2410 Returns: 2411 Code for the test case. 2412 """ 2413 _, test_name = ukernel.split("_", 1) 2414 _, datatype, ukernel_type, _ = ukernel.split("_", 3) 2415 test_args = [ukernel] 2416 if not isa: 2417 test_args.append("AvgPoolMicrokernelTester::Variant::Scalar") 2418 return xngen.preprocess(AVGPOOL_TEST_TEMPLATE, { 2419 "TEST_NAME": test_name.upper().replace("UKERNEL_", ""), 2420 "TEST_ARGS": test_args, 2421 "DATATYPE": datatype, 2422 "PRIMARY_TILE": primary_tile, 2423 "INCREMENTAL_TILE": incremental_tile, 2424 "CHANNEL_TILE": channel_tile, 2425 "ISA_CHECK": xnncommon.generate_isa_check_macro(isa), 2426 "next_prime": next_prime, 2427 }) 2428 2429 2430def main(args): 2431 options = parser.parse_args(args) 2432 2433 with codecs.open(options.spec, "r", encoding="utf-8") as spec_file: 2434 spec_yaml = yaml.safe_load(spec_file) 2435 if not isinstance(spec_yaml, list): 2436 raise ValueError("expected a list of micro-kernels in the spec") 2437 2438 tests = """\ 2439// Copyright (c) Facebook, Inc. and its affiliates. 2440// All rights reserved. 2441// 2442// Copyright 2020 Google LLC 2443// 2444// This source code is licensed under the BSD-style license found in the 2445// LICENSE file in the root directory of this source tree. 2446// 2447// Auto-generated file. Do not edit! 2448// Specification: {specification} 2449// Generator: {generator} 2450 2451 2452#include <gtest/gtest.h> 2453 2454#include <xnnpack/common.h> 2455#include <xnnpack/isa-checks.h> 2456 2457#include <xnnpack/avgpool.h> 2458#include <xnnpack/pavgpool.h> 2459#include "avgpool-microkernel-tester.h" 2460""".format(specification=options.spec, generator=sys.argv[0]) 2461 2462 for ukernel_spec in spec_yaml: 2463 name = ukernel_spec["name"] 2464 primary_tile, incremental_tile, channel_tile, arch, isa = \ 2465 split_ukernel_name(name) 2466 2467 # specification can override architecture 2468 arch = ukernel_spec.get("arch", arch) 2469 2470 test_case = generate_test_cases(name, primary_tile, incremental_tile, 2471 channel_tile, isa) 2472 tests += "\n\n" + xnncommon.postprocess_test_case(test_case, arch, isa) 2473 2474 with codecs.open(options.output, "w", encoding="utf-8") as output_file: 2475 output_file.write(tests) 2476 2477 2478if __name__ == "__main__": 2479 main(sys.argv[1:]) 2480