From f6a43c576e4eb731e5e0fa70ce4a0d3bd6a01a61 Mon Sep 17 00:00:00 2001 From: Giorgio Arena Date: Fri, 1 Dec 2017 12:16:25 +0000 Subject: COMPMID-617 CL window validation fixes Change-Id: I479dc1bd3bf9be641cb89cea5085151ba464f798 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/111471 Reviewed-by: Georgios Pinitas Tested-by: BSG Visual Compute Jenkins server to access repositories on http://mpd-gerrit.cambridge.arm.com --- src/core/CL/kernels/CLActivationLayerKernel.cpp | 3 +-- src/core/CL/kernels/CLArithmeticAdditionKernel.cpp | 2 +- src/core/CL/kernels/CLArithmeticSubtractionKernel.cpp | 2 +- src/core/CL/kernels/CLBatchNormalizationLayerKernel.cpp | 12 +++++++++--- src/core/CL/kernels/CLNormalizationLayerKernel.cpp | 7 +++++-- src/core/CL/kernels/CLPixelWiseMultiplicationKernel.cpp | 4 ++-- src/core/CL/kernels/CLPoolingLayerKernel.cpp | 2 +- 7 files changed, 20 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/core/CL/kernels/CLActivationLayerKernel.cpp b/src/core/CL/kernels/CLActivationLayerKernel.cpp index b137184c91..0f7003a38c 100644 --- a/src/core/CL/kernels/CLActivationLayerKernel.cpp +++ b/src/core/CL/kernels/CLActivationLayerKernel.cpp @@ -106,13 +106,12 @@ void CLActivationLayerKernel::configure(ICLTensor *input, ICLTensor *output, Act if(output != nullptr) { - ARM_COMPUTE_ERROR_ON_NULLPTR(input->info(), output->info()); // Output auto inizialitation if not yet initialized auto_init_if_empty(*output->info(), *input->info()->clone()); } - ARM_COMPUTE_ERROR_THROW_ON(CLActivationLayerKernel::validate(input->info(), (output != nullptr) ? output->info() : nullptr, act_info)); + ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input->info(), (output != nullptr) ? output->info() : nullptr, act_info)); const unsigned int num_elems_processed_per_iteration = 16 / input->info()->element_size(); const DataType dt = input->info()->data_type(); diff --git a/src/core/CL/kernels/CLArithmeticAdditionKernel.cpp b/src/core/CL/kernels/CLArithmeticAdditionKernel.cpp index 831389e3b6..e846a2bc3f 100644 --- a/src/core/CL/kernels/CLArithmeticAdditionKernel.cpp +++ b/src/core/CL/kernels/CLArithmeticAdditionKernel.cpp @@ -113,7 +113,7 @@ void CLArithmeticAdditionKernel::configure(const ICLTensor *input1, const ICLTen } } - ARM_COMPUTE_ERROR_THROW_ON(CLArithmeticAdditionKernel::validate(input1->info(), input2->info(), output->info(), policy)); + ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input1->info(), input2->info(), output->info(), policy)); _input1 = input1; _input2 = input2; diff --git a/src/core/CL/kernels/CLArithmeticSubtractionKernel.cpp b/src/core/CL/kernels/CLArithmeticSubtractionKernel.cpp index 5603451ca0..5cadd2a6de 100644 --- a/src/core/CL/kernels/CLArithmeticSubtractionKernel.cpp +++ b/src/core/CL/kernels/CLArithmeticSubtractionKernel.cpp @@ -105,7 +105,7 @@ void CLArithmeticSubtractionKernel::configure(const ICLTensor *input1, const ICL } } - ARM_COMPUTE_ERROR_THROW_ON(CLArithmeticSubtractionKernel::validate(input1->info(), input2->info(), output->info(), policy)); + ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input1->info(), input2->info(), output->info(), policy)); _input1 = input1; _input2 = input2; diff --git a/src/core/CL/kernels/CLBatchNormalizationLayerKernel.cpp b/src/core/CL/kernels/CLBatchNormalizationLayerKernel.cpp index 7426cad7ba..62a203c97b 100644 --- a/src/core/CL/kernels/CLBatchNormalizationLayerKernel.cpp +++ b/src/core/CL/kernels/CLBatchNormalizationLayerKernel.cpp @@ -63,6 +63,12 @@ Error validate_arguments(const ITensorInfo *input, const ITensorInfo *output, std::pair validate_and_configure_window(ITensorInfo *input, ITensorInfo *output) { + if(output != nullptr) + { + // Output tensor auto initialization if not yet initialized + auto_init_if_empty(*output, *input->clone()); + } + const unsigned int num_elems_processed_per_iteration = 16 / input->element_size(); // Configure kernel window @@ -108,11 +114,11 @@ void CLBatchNormalizationLayerKernel::configure(ICLTensor *input, ICLTensor *out { ARM_COMPUTE_ERROR_ON_NULLPTR(input->info(), output->info()); // Output tensor auto initialization if not yet initialized - auto_init_if_empty(*output->info(), input->info()->tensor_shape(), 1, input->info()->data_type(), input->info()->fixed_point_position()); + auto_init_if_empty(*output->info(), *input->info()->clone()); } - ARM_COMPUTE_ERROR_THROW_ON(CLBatchNormalizationLayerKernel::validate(input->info(), (output != nullptr) ? output->info() : nullptr, - mean->info(), var->info(), beta->info(), gamma->info(), epsilon)); + ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input->info(), (output != nullptr) ? output->info() : nullptr, + mean->info(), var->info(), beta->info(), gamma->info(), epsilon)); const unsigned int num_elems_processed_per_iteration = 16 / input->info()->element_size(); diff --git a/src/core/CL/kernels/CLNormalizationLayerKernel.cpp b/src/core/CL/kernels/CLNormalizationLayerKernel.cpp index c46b5987b7..25c5a7df77 100644 --- a/src/core/CL/kernels/CLNormalizationLayerKernel.cpp +++ b/src/core/CL/kernels/CLNormalizationLayerKernel.cpp @@ -64,6 +64,9 @@ Error validate_arguments(const ITensorInfo *input, const ITensorInfo *output, No std::pair validate_and_configure_window(ITensorInfo *input, ITensorInfo *output, NormalizationLayerInfo norm_info) { + // Output tensor auto initialization if not yet initialized + auto_init_if_empty(*output, *input->clone()); + const unsigned int norm_size = norm_info.norm_size(); bool is_in_map = norm_info.is_in_map(); @@ -103,10 +106,10 @@ void CLNormalizationLayerKernel::configure(const ICLTensor *input, ICLTensor *ou ARM_COMPUTE_ERROR_ON_NULLPTR(input, output); // Output tensor auto initialization if not yet initialized - auto_init_if_empty(*output->info(), input->info()->tensor_shape(), 1, input->info()->data_type(), input->info()->fixed_point_position()); + auto_init_if_empty(*output->info(), *input->info()->clone()); // Perform validation step - ARM_COMPUTE_ERROR_THROW_ON(CLNormalizationLayerKernel::validate(input->info(), output->info(), norm_info)); + ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input->info(), output->info(), norm_info)); _input = input; _output = output; diff --git a/src/core/CL/kernels/CLPixelWiseMultiplicationKernel.cpp b/src/core/CL/kernels/CLPixelWiseMultiplicationKernel.cpp index a466fa41b4..9e89e1ca43 100644 --- a/src/core/CL/kernels/CLPixelWiseMultiplicationKernel.cpp +++ b/src/core/CL/kernels/CLPixelWiseMultiplicationKernel.cpp @@ -123,8 +123,8 @@ void CLPixelWiseMultiplicationKernel::configure(const ICLTensor *input1, const I } } - ARM_COMPUTE_ERROR_THROW_ON(CLPixelWiseMultiplicationKernel::validate(input1->info(), input2->info(), output->info(), - scale, overflow_policy, rounding_policy)); + ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input1->info(), input2->info(), output->info(), + scale, overflow_policy, rounding_policy)); _input1 = input1; _input2 = input2; diff --git a/src/core/CL/kernels/CLPoolingLayerKernel.cpp b/src/core/CL/kernels/CLPoolingLayerKernel.cpp index 9db5c48a3b..7fd2689c43 100644 --- a/src/core/CL/kernels/CLPoolingLayerKernel.cpp +++ b/src/core/CL/kernels/CLPoolingLayerKernel.cpp @@ -204,7 +204,7 @@ void CLPoolingLayerKernel::configure(const ICLTensor *input, ICLTensor *output, auto_init(input->info(), output->info(), pooled_w, pooled_h); - ARM_COMPUTE_ERROR_THROW_ON(CLPoolingLayerKernel::validate(input->info(), output->info(), pool_info)); + ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input->info(), output->info(), pool_info)); // Set instance variables _input = input; -- cgit v1.2.1