From b28f329d0cdc2e5f2f72fd3ecc1913c6b913aee8 Mon Sep 17 00:00:00 2001 From: Michele Di Giorgio Date: Fri, 2 Feb 2018 15:58:01 +0000 Subject: COMPMID-754: Add validation method to CLPermute kernel Change-Id: If6f3888a035b557a6c369efa22b56d6c8d3efbd3 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/118789 Reviewed-by: Georgios Pinitas Tested-by: Jenkins Reviewed-by: Michalis Spyrou --- arm_compute/core/CL/kernels/CLPermuteKernel.h | 9 ++++++++ src/core/CL/kernels/CLPermuteKernel.cpp | 33 ++++++++++++++++++++------- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/arm_compute/core/CL/kernels/CLPermuteKernel.h b/arm_compute/core/CL/kernels/CLPermuteKernel.h index 8f96529d32..b01df64ebd 100644 --- a/arm_compute/core/CL/kernels/CLPermuteKernel.h +++ b/arm_compute/core/CL/kernels/CLPermuteKernel.h @@ -54,6 +54,15 @@ public: * @param[in] perm Permutation vector */ void configure(const ICLTensor *input, ICLTensor *output, const PermutationVector &perm); + /** Static function to check if given info will lead to a valid configuration of @ref CLPermuteKernel + * + * @param[in] input First tensor input info. Data types supported: U8/S8/QS8/QASYMM8/U16/S16/QS16/F16/U32/S32/F32. + * @param[in] output Output tensor info. Data types supported: same as @p input. + * @param[in] perm Permutation vector + * + * @return a status + */ + static Status validate(const ITensorInfo *input, const ITensorInfo *output, const PermutationVector &perm); // Inherited methods overridden: void run(const Window &window, cl::CommandQueue &queue) override; diff --git a/src/core/CL/kernels/CLPermuteKernel.cpp b/src/core/CL/kernels/CLPermuteKernel.cpp index 1f36445732..983754335e 100644 --- a/src/core/CL/kernels/CLPermuteKernel.cpp +++ b/src/core/CL/kernels/CLPermuteKernel.cpp @@ -46,21 +46,30 @@ TensorShape get_output_shape(const ITensorInfo *input, const PermutationVector & permute(output_shape, perm); return output_shape; } -} // namespace -void CLPermuteKernel::configure(const ICLTensor *input, ICLTensor *output, const PermutationVector &perm) +Status validate_arguments(const ITensorInfo *input, const ITensorInfo *output, const PermutationVector &perm) { - ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::U8, DataType::S8, DataType::QS8, DataType::QASYMM8, - DataType::U16, DataType::S16, DataType::QS16, - DataType::U32, DataType::S32, - DataType::F16, DataType::F32); - ARM_COMPUTE_ERROR_ON_MSG(input->info()->num_dimensions() < 3, "Invalid input size!"); - ARM_COMPUTE_ERROR_ON_MSG( + ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::U8, DataType::S8, DataType::QS8, DataType::QASYMM8, + DataType::U16, DataType::S16, DataType::QS16, + DataType::U32, DataType::S32, + DataType::F16, DataType::F32); + ARM_COMPUTE_RETURN_ERROR_ON_MSG((input->num_dimensions() < 3), "Invalid input size!"); + ARM_COMPUTE_RETURN_ERROR_ON_MSG( (perm.num_dimensions() != 3 && ((perm[0] != 2 && perm[1] != 0 && perm[2] != 1) || (perm[0] != 1 && perm[1] != 2 && perm[2] != 0))) && (perm.num_dimensions() != 4 && ((perm[0] != 2 && perm[1] != 0 && perm[2] != 1) || (perm[0] != 1 && perm[1] != 2 && perm[2] != 0))), "Only [2, 0, 1],[1, 2, 0] and [3, 2, 0, 1] permutation is supported"); + ARM_COMPUTE_UNUSED(output); + return Status{}; +} +} // namespace + +void CLPermuteKernel::configure(const ICLTensor *input, ICLTensor *output, const PermutationVector &perm) +{ + ARM_COMPUTE_ERROR_ON_NULLPTR(input, output); + ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input->info(), output->info(), perm)); + _input = input; _output = output; _perm = perm; @@ -101,6 +110,14 @@ void CLPermuteKernel::configure(const ICLTensor *input, ICLTensor *output, const ICLKernel::configure(win); } +Status CLPermuteKernel::validate(const ITensorInfo *input, const ITensorInfo *output, const PermutationVector &perm) +{ + ARM_COMPUTE_ERROR_ON_NULLPTR(input, output); + ARM_COMPUTE_RETURN_ERROR_ON(validate_arguments(input, output, perm)); + + return Status{}; +} + void CLPermuteKernel::run(const Window &window, cl::CommandQueue &queue) { ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this); -- cgit v1.2.1