| 7 | using namespace test; |
| 8 | |
| 9 | TEST_F(NAIVE, RESIZE_NCHW4) { |
| 10 | Checker<Resize> checker(handle()); |
| 11 | |
| 12 | auto args = resize::get_nchw4_args(); |
| 13 | auto convert_true_format = [](const TensorLayout& layout) { |
| 14 | return layout.reshape({layout[0], layout[1] / 4, layout[2], layout[3], 4}) |
| 15 | .dimshuffle({0, 1, 4, 2, 3}); |
| 16 | }; |
| 17 | |
| 18 | for (auto&& arg : args) { |
| 19 | auto extra_impl = [this, param = arg.param, |
| 20 | convert_true_format](const TensorNDArray& tensors) { |
| 21 | auto resize = handle()->create_operator<Resize>(); |
| 22 | resize->param().imode = param.imode; |
| 23 | resize->param().format = Resize::Param::Format::NCHW; |
| 24 | |
| 25 | TensorNDArray nchw_tensors; |
| 26 | for (size_t i = 0; i < tensors.size(); ++i) { |
| 27 | auto layout = tensors[i].layout; |
| 28 | layout = layout.reshape( |
| 29 | {layout[0], layout[1] * 4, layout[2], layout[3]}); |
| 30 | layout.dtype = dtype::Int8(); |
| 31 | nchw_tensors.emplace_back(malloc(layout.span().dist_byte()), layout); |
| 32 | } |
| 33 | TensorNDArray nchw4_tensors; |
| 34 | for (size_t i = 0; i < tensors.size(); ++i) { |
| 35 | auto layout = convert_true_format(nchw_tensors[i].layout); |
| 36 | nchw4_tensors.emplace_back(tensors[i].raw_ptr(), std::move(layout)); |
| 37 | } |
| 38 | |
| 39 | auto relayout = handle()->create_operator<RelayoutForward>(); |
| 40 | relayout->exec(nchw4_tensors[0], nchw_tensors[0]); |
| 41 | |
| 42 | auto workspace_size = resize->get_workspace_in_bytes( |
| 43 | nchw_tensors[0].layout, nchw_tensors[1].layout); |
| 44 | dt_byte* workspace_ptr = static_cast<dt_byte*>(malloc(workspace_size)); |
| 45 | Workspace workspace{workspace_ptr, workspace_size}; |
| 46 | |
| 47 | resize->exec(nchw_tensors[0], nchw_tensors[1], workspace); |
| 48 | |
| 49 | relayout->exec(nchw_tensors[1], nchw4_tensors[1]); |
| 50 | |
| 51 | free(workspace_ptr); |
| 52 | for (auto&& tensor : nchw_tensors) { |
| 53 | free(tensor.raw_ptr()); |
| 54 | } |
| 55 | }; |
| 56 | checker.set_extra_opr_impl(extra_impl); |
| 57 | checker.set_param(arg.param) |
| 58 | .set_dtype(0, dtype::QuantizedS8(0.1f)) |
| 59 | .set_dtype(1, dtype::QuantizedS8(0.1f)) |
| 60 | .set_epsilon(1 + 1e-3) |
| 61 | .execs({arg.src, arg.dst}); |
| 62 | } |
| 63 | } |
| 64 | |
| 65 | TEST_F(NAIVE, RESIZE3D_NCDHW) { |
| 66 | using IMode = param::Resize3D::InterpolationMode; |
nothing calls this directly
no test coverage detected