| 82 | } |
| 83 | |
| 84 | std::vector<std::pair<param::Pooling, TensorShapeArray>> get_nchw44_pool_args( |
| 85 | size_t filter, size_t stride) { |
| 86 | constexpr size_t ic_step = 4; |
| 87 | std::vector<std::pair<param::Pooling, TensorShapeArray>> args; |
| 88 | |
| 89 | for (size_t n : {1, 2}) |
| 90 | for (size_t c : {4, 8}) |
| 91 | for (size_t ih : {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}) |
| 92 | for (size_t iw : {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}) |
| 93 | for (size_t ph : {0, 1, 2}) |
| 94 | for (size_t pw : {0, 1, 2}) |
| 95 | for (auto mode : |
| 96 | {param::Pooling::Mode::MAX, |
| 97 | param::Pooling::Mode::AVERAGE}) |
| 98 | if (ih + 2 * ph >= filter && iw + 2 * pw >= filter && |
| 99 | filter > ph && filter > pw) { |
| 100 | param::Pooling param; |
| 101 | param.mode = mode; |
| 102 | param.format = param::Pooling::Format::NCHW44; |
| 103 | param.pad_h = ph; |
| 104 | param.pad_w = pw; |
| 105 | param.stride_h = param.stride_w = stride; |
| 106 | param.window_h = param.window_w = filter; |
| 107 | args.emplace_back(std::make_pair( |
| 108 | param, |
| 109 | TensorShapeArray{ |
| 110 | {n, c / ic_step, ih, iw, ic_step}, |
| 111 | {}})); |
| 112 | } |
| 113 | return args; |
| 114 | } |
| 115 | |
| 116 | void run_pooling_check( |
| 117 | Handle* handle, std::vector<std::pair<param::Pooling, TensorShapeArray>> args, |