| 12 | |
| 13 | #if MGB_ENABLE_DOT |
| 14 | TEST_F(ARM_COMMON, CONVOLUTION_BACKWARD_DATA_INT8_INT8_INT32) { |
| 15 | Checker<ConvolutionBackwardData> checker(handle()); |
| 16 | using Param = ConvolutionBackwardData::Param; |
| 17 | Param param; |
| 18 | auto run = [&](size_t n, size_t ic, size_t oh, size_t ow, size_t oc, size_t fh, |
| 19 | size_t fw, size_t stride, size_t ph, size_t pw, size_t group = 1) { |
| 20 | param.pad_h = ph; |
| 21 | param.pad_w = pw; |
| 22 | param.stride_h = param.stride_w = stride; |
| 23 | |
| 24 | TensorLayout diff = TensorLayout{{n, oc * group, oh, ow}, dtype::Int8()}; |
| 25 | TensorLayout grad; |
| 26 | TensorLayout filter; |
| 27 | if (group == 1) { |
| 28 | param.sparse = Param::Sparse::DENSE; |
| 29 | filter = {{oc, ic, fh, fw}, dtype::Int8()}; |
| 30 | } else { |
| 31 | param.sparse = Param::Sparse::GROUP; |
| 32 | filter = {{group, oc, ic, fh, fw}, dtype::Int8()}; |
| 33 | } |
| 34 | // TensorLayout grad; |
| 35 | { |
| 36 | auto opr = handle()->create_operator<ConvolutionBackwardData>(); |
| 37 | opr->param() = param; |
| 38 | opr->deduce_layout(filter, diff, grad); |
| 39 | } |
| 40 | if (stride == 1) { |
| 41 | checker.set_before_exec_callback(AlgoChecker<ConvolutionBackwardData>( |
| 42 | "AARCH32_I8x8x32_DECONV_STRIDE1")); |
| 43 | } else { |
| 44 | checker.set_before_exec_callback(AlgoChecker<ConvolutionBackwardData>( |
| 45 | "AARCH32_I8x8x32_DECONV_STRIDE2")); |
| 46 | } |
| 47 | checker.set_param(param) |
| 48 | .set_dtype(0, dtype::Int8()) |
| 49 | .set_dtype(1, dtype::Int8()) |
| 50 | .set_dtype(2, dtype::Int32()); |
| 51 | checker.exec(TensorLayoutArray{filter, diff, grad}); |
| 52 | }; |
| 53 | |
| 54 | // clang-format off |
| 55 | for (size_t f : {2, 3, 5, 7}) |
| 56 | for (size_t ih = 1; ih < f+1; ++ih) |
| 57 | for (size_t iw = 1; iw < 8*f+1; ++iw) |
| 58 | for (size_t s : {1, 2}) |
| 59 | for (size_t ph : {f/2, f-1}) |
| 60 | for (size_t pw : {f / 2, f - 1}) |
| 61 | if (f >= ph + 1 && f >= pw + 1 && (ih - 1) * s + f > 2 * ph && |
| 62 | (iw - 1) * s + f > 2 * pw) { |
| 63 | run(2, 3, ih, iw, 2, f, f, s, ph, pw, 1); |
| 64 | } |
| 65 | // clang-format on |
| 66 | } |
| 67 | |
| 68 | TEST_F(ARM_COMMON, CONVOLUTION_BACKWARD_DATA_QUINT8) { |
| 69 | Checker<ConvolutionBackwardData> checker(handle()); |
nothing calls this directly
no test coverage detected