| 451 | class JIT : public ::testing::TestWithParam<tile_params> { |
| 452 | protected: |
| 453 | void SetUp() { |
| 454 | tile_params params = GetParam(); |
| 455 | vector<float> vals(params.in_dim.elements()); |
| 456 | iota(vals.begin(), vals.end(), 0.f); |
| 457 | in = array(params.in_dim, &vals.front()); |
| 458 | |
| 459 | // clang-format off |
| 460 | gold.resize(params.out_dim.elements()); |
| 461 | dim_t tile_dim[4] = {params.tile[0], params.tile[1], params.tile[2], |
| 462 | params.tile[3]}; |
| 463 | |
| 464 | dim_t istride[4] = {1, |
| 465 | params.in_dim[0], |
| 466 | params.in_dim[0] * params.in_dim[1], |
| 467 | params.in_dim[0] * params.in_dim[1] * params.in_dim[2]}; |
| 468 | dim_t ostride[4] = {1, |
| 469 | params.out_dim[0], |
| 470 | params.out_dim[0] * params.out_dim[1], |
| 471 | params.out_dim[0] * params.out_dim[1] * params.out_dim[2]}; |
| 472 | |
| 473 | for (int i = 0; i < 4; i++) { |
| 474 | if (tile_dim[i] != 1) { istride[i] = 0; } |
| 475 | } |
| 476 | |
| 477 | for (int l = 0; l < params.out_dim[3]; l++) { |
| 478 | for (int k = 0; k < params.out_dim[2]; k++) { |
| 479 | for (int j = 0; j < params.out_dim[1]; j++) { |
| 480 | for (int i = 0; i < params.out_dim[0]; i++) { |
| 481 | gold[l * ostride[3] + |
| 482 | k * ostride[2] + |
| 483 | j * ostride[1] + |
| 484 | i * ostride[0]] = vals[l * istride[3] + |
| 485 | k * istride[2] + |
| 486 | j * istride[1] + |
| 487 | i * istride[0]]; |
| 488 | } |
| 489 | } |
| 490 | } |
| 491 | } |
| 492 | // clang-format on |
| 493 | } |
| 494 | |
| 495 | public: |
| 496 | array in; |