From 4cbee6e66f4425a3ab5bfac3bbf400e6818a224d Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Mon, 19 Jun 2017 13:02:56 +0100 Subject: COMPMID-345: Scale input valid region in TransposeWindow. Change-Id: I880e85834acc42d9d15b38ceeaadbaee9690a484 Reviewed-on: http://mpd-gerrit.cambridge.arm.com/78093 Reviewed-by: Anthony Barbier Tested-by: Kaizen Reviewed-by: Moritz Pflanzer --- src/core/CL/kernels/CLGEMMTranspose1xWKernel.cpp | 27 ++++++------------------ 1 file changed, 6 insertions(+), 21 deletions(-) (limited to 'src/core/CL/kernels') diff --git a/src/core/CL/kernels/CLGEMMTranspose1xWKernel.cpp b/src/core/CL/kernels/CLGEMMTranspose1xWKernel.cpp index ecee1abd72..4067280bf0 100644 --- a/src/core/CL/kernels/CLGEMMTranspose1xWKernel.cpp +++ b/src/core/CL/kernels/CLGEMMTranspose1xWKernel.cpp @@ -54,9 +54,12 @@ void CLGEMMTranspose1xWKernel::configure(const ICLTensor *input, ICLTensor *outp ARM_COMPUTE_ERROR_ON_MISMATCHING_DATA_TYPES(input, output); ARM_COMPUTE_ERROR_ON_MISMATCHING_DIMENSIONS(output->info()->tensor_shape(), output_shape); - _input = input; - _output = output; const unsigned int num_elems_processed_per_iteration = max_cl_vector_width / data_size_from_type(input->info()->data_type()); + const float scale_x = num_elems_processed_per_iteration; + ARM_COMPUTE_ERROR_ON((0 == static_cast(input->info()->dimension(0) * (1.f / scale_x)))); + + _input = input; + _output = output; /* * Following an example of how the transposition1xW works when the input data type is F32 @@ -77,30 +80,12 @@ void CLGEMMTranspose1xWKernel::configure(const ICLTensor *input, ICLTensor *outp // Configure window Window win = calculate_max_window(*input->info(), Steps(num_elems_processed_per_iteration)); - float scale_x = 1.f; - - switch(input->info()->data_type()) - { - case DataType::U8: - scale_x = 16.f; - break; - case DataType::F16: - scale_x = 8.f; - break; - case DataType::F32: - scale_x = 4.f; - break; - default: - // Do nothing - break; - } - AccessWindowHorizontal input_access(input->info(), 0, num_elems_processed_per_iteration); AccessWindowTranspose output_access(output->info(), 0, 0, num_elems_processed_per_iteration, 1, scale_x, 1.f / scale_x); update_window_and_padding(win, input_access, output_access); - output_access.set_valid_region(win, ValidRegion(Coordinates(0, 0), output->info()->tensor_shape())); + output_access.set_valid_region(win, ValidRegion(Coordinates(0, 0), input->info()->tensor_shape())); ICLKernel::configure(win); } -- cgit v1.2.1