aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorUsama Arif <usama.arif@arm.com>2019-05-13 17:45:54 +0100
committerUsama Arif <usama.arif@arm.com>2019-05-15 17:09:19 +0000
commiteb312ef6c20e8548c43eb9d4a3edf7265bc6777b (patch)
tree3319474f9360dac5148a0942051608d5cbd7874f /src
parentf391fff0336ae84387dd3ebc683ef85649de9eb5 (diff)
downloadComputeLibrary-eb312ef6c20e8548c43eb9d4a3edf7265bc6777b.tar.gz
COMPMID-2267: Implement NEG for CL
Change-Id: I5019103987c92df5080809201feb9b646fae8cc5 Signed-off-by: Usama Arif <usama.arif@arm.com> Reviewed-on: https://review.mlplatform.org/c/1130 Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/CL/cl_kernels/elementwise_unary.cl53
-rw-r--r--src/core/CL/kernels/CLElementWiseUnaryLayerKernel.cpp5
-rw-r--r--src/runtime/CL/functions/CLElementWiseUnaryLayer.cpp14
3 files changed, 24 insertions, 48 deletions
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<CLElementWiseUnaryLayerKernel>();
+ 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