From eb312ef6c20e8548c43eb9d4a3edf7265bc6777b Mon Sep 17 00:00:00 2001 From: Usama Arif Date: Mon, 13 May 2019 17:45:54 +0100 Subject: COMPMID-2267: Implement NEG for CL Change-Id: I5019103987c92df5080809201feb9b646fae8cc5 Signed-off-by: Usama Arif Reviewed-on: https://review.mlplatform.org/c/1130 Comments-Addressed: Arm Jenkins Reviewed-by: Gian Marco Iodice Tested-by: Arm Jenkins --- src/core/CL/cl_kernels/elementwise_unary.cl | 53 +++------------------- .../CL/kernels/CLElementWiseUnaryLayerKernel.cpp | 5 +- .../CL/functions/CLElementWiseUnaryLayer.cpp | 14 +++++- 3 files changed, 24 insertions(+), 48 deletions(-) (limited to 'src') diff --git a/src/core/CL/cl_kernels/elementwise_unary.cl b/src/core/CL/cl_kernels/elementwise_unary.cl index 92db569d97..2650654e4a 100644 --- a/src/core/CL/cl_kernels/elementwise_unary.cl +++ b/src/core/CL/cl_kernels/elementwise_unary.cl @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 ARM Limited. + * Copyright (c) 2018-2019 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -26,51 +26,12 @@ #if defined(DATA_TYPE) && defined(OPERATION) -#if defined(VEC_SIZE) && defined(LAST_ACCESSED_X) -/** Calculate reverse square root - * - * @param[in] input Pointer to the first element. - * - * @return reverse square root - */ -inline VEC_DATA_TYPE(DATA_TYPE, VEC_SIZE) inverse_sqrt(const VEC_DATA_TYPE(DATA_TYPE, VEC_SIZE) input) -{ - return rsqrt(input); -} - -/** Calculate exponential - * - * @param[in] input Pointer to the first element. - * - * @return exponential - */ -inline VEC_DATA_TYPE(DATA_TYPE, VEC_SIZE) exponential(const VEC_DATA_TYPE(DATA_TYPE, VEC_SIZE) input) -{ - return exp(input); -} -#else // !defined(VEC_SIZE) || !defined(LAST_ACCESSED_X) -/** Calculate reverse square root - * - * @param[in] input Single element. - * - * @return reverse square root - */ -inline DATA_TYPE inverse_sqrt(const DATA_TYPE input) -{ - return rsqrt(input); -} - -/** Calculate exponential - * - * @param[in] input Single element. - * - * @return exponential - */ -inline DATA_TYPE exponential(const DATA_TYPE input) -{ - return exp(input); -} -#endif // defined(VEC_SIZE) && defined(LAST_ACCESSED_X) +// Calculate Exponential +#define exponential(input) exp(input) +// Calculate reverse square root +#define inverse_sqrt(input) rsqrt(input) +// Calculate negative +#define neg(input) (-input) /** Applies element wise unary operator in a tensor. * diff --git a/src/core/CL/kernels/CLElementWiseUnaryLayerKernel.cpp b/src/core/CL/kernels/CLElementWiseUnaryLayerKernel.cpp index be3c7e25da..e804ef1853 100644 --- a/src/core/CL/kernels/CLElementWiseUnaryLayerKernel.cpp +++ b/src/core/CL/kernels/CLElementWiseUnaryLayerKernel.cpp @@ -84,6 +84,9 @@ void CLElementWiseUnaryLayerKernel::configure(const ICLTensor *input, ICLTensor case ElementWiseUnary::EXP: build_opts.add_option("-DOPERATION=exponential"); break; + case ElementWiseUnary::NEG: + build_opts.add_option("-DOPERATION=neg"); + break; default: ARM_COMPUTE_ERROR("Not implemented"); } @@ -116,4 +119,4 @@ void CLElementWiseUnaryLayerKernel::run(const Window &window, cl::CommandQueue & enqueue(queue, *this, collapsed); } while(window.slide_window_slice_1D(collapsed)); -} \ No newline at end of file +} diff --git a/src/runtime/CL/functions/CLElementWiseUnaryLayer.cpp b/src/runtime/CL/functions/CLElementWiseUnaryLayer.cpp index b7e9a68680..67ffec8991 100644 --- a/src/runtime/CL/functions/CLElementWiseUnaryLayer.cpp +++ b/src/runtime/CL/functions/CLElementWiseUnaryLayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 ARM Limited. + * Copyright (c) 2018-2019 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -51,4 +51,16 @@ Status CLExpLayer::validate(const ITensorInfo *input, const ITensorInfo *output) { return CLElementWiseUnaryLayerKernel::validate(input, output, ElementWiseUnary::EXP); } + +void CLNegLayer::configure(const ICLTensor *input, ICLTensor *output) +{ + auto k = arm_compute::support::cpp14::make_unique(); + k->configure(input, output, ElementWiseUnary::NEG); + _kernel = std::move(k); +} +Status CLNegLayer::validate(const ITensorInfo *input, const ITensorInfo *output) +{ + return CLElementWiseUnaryLayerKernel::validate(input, output, ElementWiseUnary::NEG); +} + } // namespace arm_compute -- cgit v1.2.1