From f733e0375f62bbecbbf87045e4e40afad858b318 Mon Sep 17 00:00:00 2001 From: Manuel Bottini Date: Wed, 19 May 2021 16:15:36 +0100 Subject: DirectConvolutionLayer create image failure Add implicit padding test on weights before the configure Fix problem of considering left padding of weights when using cl image Resolves: COMPMID-4493 Change-Id: I141d2de68e8bdfcbd6f18209db4f29fcc05305a1 Signed-off-by: Manuel Bottini Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5689 Reviewed-by: Giorgio Arena Reviewed-by: Georgios Pinitas Tested-by: Arm Jenkins Comments-Addressed: Arm Jenkins --- src/core/gpu/cl/kernels/gemm/ClGemmHelpers.cpp | 2 +- tests/validation/Helpers.cpp | 4 ++-- tests/validation/Helpers.h | 7 ++++--- tests/validation/fixtures/DirectConvolutionLayerFixture.h | 5 +++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/core/gpu/cl/kernels/gemm/ClGemmHelpers.cpp b/src/core/gpu/cl/kernels/gemm/ClGemmHelpers.cpp index 0a8ba971ed..7866ccb679 100644 --- a/src/core/gpu/cl/kernels/gemm/ClGemmHelpers.cpp +++ b/src/core/gpu/cl/kernels/gemm/ClGemmHelpers.cpp @@ -86,7 +86,7 @@ void update_padding_for_cl_image(ITensorInfo *tensor) const unsigned int round_up_width = ((stride_y_in_elements + row_pitch_alignment - 1) / row_pitch_alignment) * row_pitch_alignment; const unsigned int padding = round_up_width - stride_y_in_elements; - tensor->extend_padding(PaddingSize(0, padding, 0, 0)); + tensor->extend_padding(PaddingSize(0, tensor->padding().right + padding, 0, 0)); } Status validate_image2d_support_on_rhs(const ITensorInfo &tensor_reshaped_info, const GEMMRHSMatrixInfo &rhs_info) diff --git a/tests/validation/Helpers.cpp b/tests/validation/Helpers.cpp index b53d46fc76..0f5d5c5101 100644 --- a/tests/validation/Helpers.cpp +++ b/tests/validation/Helpers.cpp @@ -325,7 +325,7 @@ std::pair get_symm_quantized_per_channel_bounds(const QuantizationInfo return std::pair { min_bound, max_bound }; } -void add_padding_x(std::initializer_list tensors, const DataLayout &data_layout) +void add_padding_x(std::initializer_list tensors, const DataLayout &data_layout, bool only_right_pad) { if(data_layout == DataLayout::NHWC) { @@ -342,7 +342,7 @@ void add_padding_x(std::initializer_list tensors, const DataLayout &d std::mt19937 gen(library->seed() + seed_offset++); const unsigned int right = distribution(gen); - const unsigned int left = distribution(gen); + const unsigned int left = only_right_pad ? 0 : distribution(gen); tensor->info()->extend_padding(PaddingSize(0U, right, 0U, left)); } diff --git a/tests/validation/Helpers.h b/tests/validation/Helpers.h index e06d239307..00e588e7b7 100644 --- a/tests/validation/Helpers.h +++ b/tests/validation/Helpers.h @@ -233,12 +233,13 @@ std::pair get_symm_quantized_per_channel_bounds(const QuantizationInfo /** Add random padding along the X axis (between 1 and 16 columns per side) to all the input tensors. * This is used in our validation suite in order to simulate implicit padding addition after configuring, but before allocating. * - * @param[in] tensors List of tensors to add padding to - * @param[in] data_layout (Optional) Data layout of the operator + * @param[in] tensors List of tensors to add padding to + * @param[in] data_layout (Optional) Data layout of the operator + * @param[in] only_right_pad (Optional) Only right padding testing, in case of cl image padding * * @note This function adds padding to the input tensors only if data_layout == DataLayout::NHWC */ -void add_padding_x(std::initializer_list tensors, const DataLayout &data_layout = DataLayout::NHWC); +void add_padding_x(std::initializer_list tensors, const DataLayout &data_layout = DataLayout::NHWC, bool only_right_pad = false); } // namespace validation } // namespace test } // namespace arm_compute diff --git a/tests/validation/fixtures/DirectConvolutionLayerFixture.h b/tests/validation/fixtures/DirectConvolutionLayerFixture.h index d21a2e7ec3..614aa20753 100644 --- a/tests/validation/fixtures/DirectConvolutionLayerFixture.h +++ b/tests/validation/fixtures/DirectConvolutionLayerFixture.h @@ -162,6 +162,9 @@ protected: TensorType bias = create_tensor(bias_shape, bias_data_type, 1, quantization_info); TensorType dst = create_tensor(output_shape, data_type, 1, quantization_info, data_layout); + add_padding_x({ &src, &bias, &dst }, data_layout); + add_padding_x({ &weights }, data_layout, input_shape[0] % 4 == 0); // Don't add left padding if cl image will be used + // Create and configure function FunctionType conv; conv.configure(&src, &weights, &bias, &dst, info, act_info); @@ -171,8 +174,6 @@ protected: ARM_COMPUTE_ASSERT(bias.info()->is_resizable()); ARM_COMPUTE_ASSERT(dst.info()->is_resizable()); - add_padding_x({ &src, &bias, &dst }, data_layout); - // Allocate tensors src.allocator()->allocate(); weights.allocator()->allocate(); -- cgit v1.2.1