From 17a01a3b12eab0dfab933f25bcf2a49b3d7c971d Mon Sep 17 00:00:00 2001 From: Michele Di Giorgio Date: Thu, 3 Jan 2019 15:12:27 +0000 Subject: COMPMID-1866: Revisit padding and window on CLDepthwiseConvolutionNHWC Change-Id: I1fd20ebb5f3295722c833a599ea82798ceff6e01 Reviewed-on: https://review.mlplatform.org/471 Tested-by: Arm Jenkins Reviewed-by: Gian Marco Iodice --- .../CLDepthwiseConvolutionLayer3x3NHWCKernel.cpp | 6 +++--- src/core/CL/kernels/CLGEMMMatrixMultiplyKernel.cpp | 8 ++++---- src/core/CL/kernels/CLScaleKernel.cpp | 20 +++++++++----------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/core/CL/kernels/CLDepthwiseConvolutionLayer3x3NHWCKernel.cpp b/src/core/CL/kernels/CLDepthwiseConvolutionLayer3x3NHWCKernel.cpp index 4f3636b081..594d0b6981 100644 --- a/src/core/CL/kernels/CLDepthwiseConvolutionLayer3x3NHWCKernel.cpp +++ b/src/core/CL/kernels/CLDepthwiseConvolutionLayer3x3NHWCKernel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 ARM Limited. + * Copyright (c) 2018-2019 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -112,8 +112,8 @@ std::pair validate_and_configure_window(ITensorInfo *input, ITen AccessWindowStatic input_access(input, 0, -border_size.top, ceil_to_multiple(input->dimension(0), num_elems_accessed_per_iteration), ceil_to_multiple(input->dimension(1) + border_size.bottom, num_rows_read_per_iteration)); - AccessWindowRectangle output_access(output, 0, 0, num_elems_accessed_per_iteration, num_rows_written_per_iteration); - AccessWindowHorizontal weights_access(weights, 0, num_elems_accessed_per_iteration); + AccessWindowRectangle output_access(output, 0, 0, num_elems_accessed_per_iteration, num_rows_written_per_iteration); + AccessWindowStatic weights_access(weights, 0, 0, ceil_to_multiple(weights->dimension(0), num_elems_accessed_per_iteration), weights->dimension(1)); bool window_changed = update_window_and_padding(win, input_access, weights_access, output_access); diff --git a/src/core/CL/kernels/CLGEMMMatrixMultiplyKernel.cpp b/src/core/CL/kernels/CLGEMMMatrixMultiplyKernel.cpp index 89fe7a4650..b667621426 100644 --- a/src/core/CL/kernels/CLGEMMMatrixMultiplyKernel.cpp +++ b/src/core/CL/kernels/CLGEMMMatrixMultiplyKernel.cpp @@ -166,10 +166,10 @@ inline std::pair validate_and_configure_window(ITensorInfo *inpu win = calculate_max_window(tmp_info, Steps(num_elems_processed_per_iteration_x, num_elems_processed_per_iteration_y)); win_out = calculate_max_window(*output, Steps(num_elems_processed_per_iteration_x, num_elems_processed_per_iteration_y)); - AccessWindowRectangle input0_access(input0, 0, 0, num_elems_processed_per_iteration_y, 1, 1.f, 0.25f); - AccessWindowStatic input1_access(input1, 0, 0, - ceil_to_multiple(input1->dimension(0), num_elems_processed_per_iteration_x), - ceil_to_multiple(input1->dimension(1), num_elems_processed_per_iteration_y)); + AccessWindowStatic input0_access(input0, 0, 0, input0->dimension(0), input0->dimension(1)); + AccessWindowStatic input1_access(input1, 0, 0, + ceil_to_multiple(input1->dimension(0), num_elems_processed_per_iteration_x), + ceil_to_multiple(input1->dimension(1), num_elems_processed_per_iteration_y)); AccessWindowStatic output_access(output, 0, 0, ceil_to_multiple(output->dimension(0), num_elems_processed_per_iteration_x), output->dimension(1) + bottom_pad); diff --git a/src/core/CL/kernels/CLScaleKernel.cpp b/src/core/CL/kernels/CLScaleKernel.cpp index c56cc6df44..dc7535ccbe 100644 --- a/src/core/CL/kernels/CLScaleKernel.cpp +++ b/src/core/CL/kernels/CLScaleKernel.cpp @@ -94,14 +94,11 @@ std::pair validate_and_configure_window(ITensorInfo *input, ITen num_elems_processed_per_iteration = 4; // Configure kernel window - win = calculate_max_window(*output, Steps(num_elems_processed_per_iteration)); - const ValidRegion &input_valid_region = input->valid_region(); - - // Reads can occur within the valid region of the input + win = calculate_max_window(*output, Steps(num_elems_processed_per_iteration)); AccessWindowStatic input_access(input, - input_valid_region.anchor[0] - border.left, input_valid_region.anchor[1] - border.top, - input_valid_region.anchor[0] + input_valid_region.shape[0] + border.right, - input_valid_region.anchor[1] + input_valid_region.shape[1] + border.bottom); + -border.left, -border.top, + input->dimension(0) + border.right, + input->dimension(1) + border.bottom); AccessWindowHorizontal output_access(output, 0, num_elems_processed_per_iteration); output_access.set_valid_region(win, calculate_valid_region_scale(*(input), @@ -118,7 +115,9 @@ std::pair validate_and_configure_window(ITensorInfo *input, ITen num_elems_processed_per_iteration = 1; // Configure kernel window win = calculate_max_window(*output, Steps(num_elems_processed_per_iteration)); - AccessWindowRectangle input_access(input, -border.left, -border.top, num_elems_processed_per_iteration, num_elems_processed_per_iteration); + AccessWindowStatic input_access(input, -border.left, -border.top, + input->dimension(0) + border.right, + input->dimension(1) + border.bottom); AccessWindowHorizontal output_access(output, 0, num_elems_processed_per_iteration); window_changed = update_window_and_padding(win, input_access, output_access); output_access.set_valid_region(win, ValidRegion(Coordinates(), output->tensor_shape())); @@ -230,10 +229,9 @@ void CLScaleKernel::configure(const ICLTensor *input, ICLTensor *output, Interpo // Set config_id for enabling LWS tuning _config_id = "scale_"; - _config_id += support::cpp11::to_string(border.right); - _config_id += (border_mode == BorderMode::REPLICATE? "Bord_rep":""); + _config_id += (border_mode == BorderMode::REPLICATE ? "Bord_rep" : ""); _config_id += (sampling_policy == SamplingPolicy::CENTER ? "center" : "topleft"); - _config_id += (is_nhwc? "nhwc":"nchw"); + _config_id += (is_nhwc ? "nhwc" : "nchw"); _config_id += "_"; _config_id += support::cpp11::to_string(output->info()->dimension(0)); _config_id += "_"; -- cgit v1.2.1