aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichele Di Giorgio <michele.digiorgio@arm.com>2019-01-03 15:12:27 +0000
committerMichele Di Giorgio <michele.digiorgio@arm.com>2019-01-25 14:22:52 +0000
commit17a01a3b12eab0dfab933f25bcf2a49b3d7c971d (patch)
tree605e4430b8f2280a37b3774bc5a49c884d058574
parent1d480652b820317fc97ccbc3cb517e3b9e8be197 (diff)
downloadComputeLibrary-17a01a3b12eab0dfab933f25bcf2a49b3d7c971d.tar.gz
COMPMID-1866: Revisit padding and window on CLDepthwiseConvolutionNHWC
Change-Id: I1fd20ebb5f3295722c833a599ea82798ceff6e01 Reviewed-on: https://review.mlplatform.org/471 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
-rw-r--r--src/core/CL/kernels/CLDepthwiseConvolutionLayer3x3NHWCKernel.cpp6
-rw-r--r--src/core/CL/kernels/CLGEMMMatrixMultiplyKernel.cpp8
-rw-r--r--src/core/CL/kernels/CLScaleKernel.cpp20
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<Status, Window> 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<Status, Window> 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<Status, Window> 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<Status, Window> 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 += "_";