diff options
author | George Wort <george.wort@arm.com> | 2018-12-12 17:39:58 +0000 |
---|---|---|
committer | Georgios Pinitas <georgios.pinitas@arm.com> | 2019-01-21 15:27:13 +0000 |
commit | d88590f4022bfb6eda3bad4fa599727bab723667 (patch) | |
tree | 99061e540e21c4a285bd5637cbffc359aa3d27b6 /arm_compute/runtime/NEON/functions/NEElementwiseOperations.h | |
parent | 7ad6257ff09c94aade46ce5d02b644821235121a (diff) | |
download | ComputeLibrary-d88590f4022bfb6eda3bad4fa599727bab723667.tar.gz |
COMPMID-1753: NEON: Implement Less, Greater, GreaterEqual, Equal, Not Equal
Change-Id: I6fa95badcdecb826ac5bd9113f118603d5ac2e82
Reviewed-on: https://review.mlplatform.org/393
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'arm_compute/runtime/NEON/functions/NEElementwiseOperations.h')
-rw-r--r-- | arm_compute/runtime/NEON/functions/NEElementwiseOperations.h | 82 |
1 files changed, 75 insertions, 7 deletions
diff --git a/arm_compute/runtime/NEON/functions/NEElementwiseOperations.h b/arm_compute/runtime/NEON/functions/NEElementwiseOperations.h index 5cbf1237e4..cd9ed24bee 100644 --- a/arm_compute/runtime/NEON/functions/NEElementwiseOperations.h +++ b/arm_compute/runtime/NEON/functions/NEElementwiseOperations.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 ARM Limited. + * Copyright (c) 2018-2019 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -14,10 +14,10 @@ * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INNEUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY NEAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARI SING FROM, + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ @@ -33,7 +33,7 @@ class ITensor; /** Basic function to run @ref NEArithmeticOperationKernel for max * - * @note The tensor data type for the inputs must be S16/F16/S32/F32. + * @note The tensor data type for the inputs must be QASYMM8/S16/F16/S32/F32. * @note The function performs a max operation between two tensors. */ class NEElementwiseMax : public INESimpleFunction @@ -59,7 +59,7 @@ public: /** Basic function to run @ref NEArithmeticOperationKernel for min * - * @note The tensor data type for the inputs must be S16/F16/S32/F32. + * @note The tensor data type for the inputs must be QASYMM8/S16/F16/S32/F32. * @note The function performs a max operation between two tensors. */ class NEElementwiseMin : public INESimpleFunction @@ -85,7 +85,7 @@ public: /** Basic function to run @ref NEArithmeticOperationKernel for squared difference * - * @note The tensor data type for the inputs must be S16/F16/S32/F32. + * @note The tensor data type for the inputs must be QASYMM8/S16/F16/S32/F32. * @note The function performs a squared different operation between two tensors (i.e., out[i] = (in1[i] - in2[i])^2 */ class NEElementwiseSquaredDiff : public INESimpleFunction @@ -108,5 +108,73 @@ public: */ static Status validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output); }; + +/** Basic function to run @ref NEComparisonOperationKernel + * + * @note The tensor data type for the inputs must be QASYMM8/S16/F16/S32/F32. + * @note The function performs a comparison operation between two tensors. + */ +class NEElementwiseComparison : public INESimpleFunction +{ +public: + /** Initialise the kernel's inputs, output and conversion policy. + * + * @param[in, out] input1 First tensor input. Data types supported: QASYMM8/S16/F16/S32/F32. + * @param[in, out] input2 Second tensor input. Data types supported: Same as @p input1. + * @param[out] output Output tensor. Data types supported: U16/U32. + * @param[in] op Comparison Operation to be performed. + */ + void configure(ITensor *input1, ITensor *input2, ITensor *output, ComparisonOperation op); + /** Static function to check if given info will lead to a valid configuration of @ref NEComparisonOperationKernel + * + * @param[in] input1 First tensor input info. Data types supported: QASYMM8/S16/F16/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: U16/U32. + * @param[in] op Comparison Operation to be performed. + * + * @return a status + */ + static Status validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, ComparisonOperation op); +}; + +/** Basic function to run @ref NEComparisonOperationKernel + * + * @note The tensor data type for the inputs must be QASYMM8/S16/F16/S32/F32. + * @note The function performs a comparison operation between two tensors. + */ +template <ComparisonOperation op> +class NEElementwiseComparisonStatic : public INESimpleFunction +{ +public: + /** Initialise the kernel's inputs, output and conversion policy. + * + * @param[in, out] input1 First tensor input. Data types supported: QASYMM8/S16/F16/S32/F32. + * @param[in, out] input2 Second tensor input. Data types supported: Same as @p input1. + * @param[out] output Output tensor. Data types supported: U16/U32. + */ + void configure(ITensor *input1, ITensor *input2, ITensor *output); + /** Static function to check if given info will lead to a valid configuration of @ref NEComparisonOperationKernel + * + * @param[in] input1 First tensor input info. Data types supported: QASYMM8/S16/F16/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: U16/U32. + * + * @return a status + */ + static Status validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output); +}; + +/** Basic function to run equal comparison. */ +using NEEqual = NEElementwiseComparisonStatic<ComparisonOperation::Equal>; +/** Basic function to run not equal comparison. */ +using NENotEqual = NEElementwiseComparisonStatic<ComparisonOperation::NotEqual>; +/** Basic function to run greater comparison. */ +using NEGreater = NEElementwiseComparisonStatic<ComparisonOperation::Greater>; +/** Basic function to run greater-equal comparison. */ +using NEGreaterEqual = NEElementwiseComparisonStatic<ComparisonOperation::GreaterEqual>; +/** Basic function to run less comparison. */ +using NELess = NEElementwiseComparisonStatic<ComparisonOperation::Less>; +/** Basic function to run less-equal comparison. */ +using NELessEqual = NEElementwiseComparisonStatic<ComparisonOperation::LessEqual>; } // namespace arm_compute #endif /* __ARM_COMPUTE_NEELEMENTWISEOPERATIONS_H__ */ |