From 6997fc951e48a1bf8f7591f3b2c4c8d721331b96 Mon Sep 17 00:00:00 2001 From: Michele Di Giorgio Date: Tue, 18 Jun 2019 10:23:22 +0100 Subject: COMPMID-2412: Add QSYMM16 support for ElementwiseAddition for CL Arithmetic addition uses the same code as other element-wise operations. Hence, adding QSYMM16 support for addition automatically adds the same support for: - arithmetic subtraction - element-wise min - element-wise max - squared difference Change-Id: If986102844f62e29dd23c03f9245910db43f9043 Signed-off-by: Michele Di Giorgio Reviewed-on: https://review.mlplatform.org/c/1384 Tested-by: Arm Jenkins Comments-Addressed: Arm Jenkins Reviewed-by: Manuel Bottini Reviewed-by: Giuseppe Rossini Reviewed-by: Georgios Pinitas --- .../core/CL/kernels/CLElementwiseOperationKernel.h | 8 ++++---- arm_compute/core/Utils.h | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 5 deletions(-) (limited to 'arm_compute/core') diff --git a/arm_compute/core/CL/kernels/CLElementwiseOperationKernel.h b/arm_compute/core/CL/kernels/CLElementwiseOperationKernel.h index ed42c9b99a..8c5cdb5690 100644 --- a/arm_compute/core/CL/kernels/CLElementwiseOperationKernel.h +++ b/arm_compute/core/CL/kernels/CLElementwiseOperationKernel.h @@ -115,7 +115,7 @@ public: /** Static function to check if given info will lead to a valid configuration of @ref CLSaturatedArithmeticOperationKernel * * @param[in] op Arithmetic operation to be executed. - * @param[in] input1 First tensor input. Data types supported: U8/S8/QASYMM8/U16/S16/F16/U32/S32/F32. + * @param[in] input1 First tensor input. Data types supported: U8/S8/QASYMM8/U16/S16/QSYMM16/F16/U32/S32/F32. * @param[in] input2 Second tensor input. Data types supported: Same as @p input1. * @param[in] output Output tensor. Data types supported: Same as @p input1. * @param[in] policy Policy to use to handle overflow. @@ -125,7 +125,7 @@ public: /** Static function to check if given info will lead to a valid configuration of @ref CLSaturatedArithmeticOperationKernel * * @param[in] op Arithmetic operation to be executed. - * @param[in] input1 First tensor input info. Data types supported: U8/S8/QASYMM8/U16/S16/F16/U32/S32/F32. + * @param[in] input1 First tensor input info. Data types supported: U8/S8/QASYMM8/U16/S16/QSYMM16/F16/U32/S32/F32. * @param[in] input2 Second tensor input info. Data types supported: Same as @p input1. * @param[in] output Output tensor info. Data types supported: Same as @p input1. * @param[in] policy Policy to use to handle overflow. @@ -158,7 +158,7 @@ public: /** Static function to check if given info will lead to a valid configuration of @ref CLArithmeticOperationKernel * * @param[in] op Arithmetic operation to be executed. - * @param[in] input1 First tensor input. Data types supported: U8/S8/QASYMM8/U16/S16/F16/U32/S32/F32. + * @param[in] input1 First tensor input. Data types supported: U8/S8/QASYMM8/U16/S16/QSYMM16/F16/U32/S32/F32. * @param[in] input2 Second tensor input. Data types supported: Same as @p input1. * @param[in] output Output tensor. Data types supported: Same as @p input1. */ @@ -167,7 +167,7 @@ public: /** Static function to check if given info will lead to a valid configuration of @ref CLArithmeticOperationKernel * * @param[in] op Arithmetic operation to be executed. - * @param[in] input1 First tensor input info. Data types supported: U8/S8/QASYMM8/U16/S16/F16/U32/S32/F32. + * @param[in] input1 First tensor input info. Data types supported: U8/S8/QASYMM8/U16/S16/QSYMM16/F16/U32/S32/F32. * @param[in] input2 Second tensor input info. Data types supported: Same as @p input1. * @param[in] output Output tensor info. Data types supported: Same as @p input1. * diff --git a/arm_compute/core/Utils.h b/arm_compute/core/Utils.h index b711451453..a37559d269 100644 --- a/arm_compute/core/Utils.h +++ b/arm_compute/core/Utils.h @@ -1022,7 +1022,7 @@ inline bool is_data_type_quantized(DataType dt) * * @param[in] dt Input data type. * - * @return True if data type is of symmetric quantized type, else false. + * @return True if data type is of asymmetric quantized type, else false. */ inline bool is_data_type_quantized_asymmetric(DataType dt) { @@ -1035,6 +1035,25 @@ inline bool is_data_type_quantized_asymmetric(DataType dt) } } +/** Check if a given data type is of symmetric quantized type + * + * @param[in] dt Input data type. + * + * @return True if data type is of symmetric quantized type, else false. + */ +inline bool is_data_type_quantized_symmetric(DataType dt) +{ + switch(dt) + { + case DataType::QSYMM8: + case DataType::QSYMM8_PER_CHANNEL: + case DataType::QSYMM16: + return true; + default: + return false; + } +} + /** Create a string with the float in full precision. * * @param val Floating point value -- cgit v1.2.1