diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/CL/cl_kernels/elementwise_unary.cl | 6 | ||||
-rw-r--r-- | src/core/CL/kernels/CLElementWiseUnaryLayerKernel.cpp | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/core/CL/cl_kernels/elementwise_unary.cl b/src/core/CL/cl_kernels/elementwise_unary.cl index 866b7ee2b0..b496fcf562 100644 --- a/src/core/CL/cl_kernels/elementwise_unary.cl +++ b/src/core/CL/cl_kernels/elementwise_unary.cl @@ -38,6 +38,12 @@ #define fabs_op(input) fabs(input) // Calculate natural_log #define natural_log_op(input) log(input) +// Calculate round (Cannot use round function as it rounds halfway cases away from zero). +#if defined(VEC_SIZE) +#define round_op(input) CONVERT(CONVERT_SAT_ROUND(input, VEC_DATA_TYPE(int, VEC_SIZE), rte), VEC_DATA_TYPE(DATA_TYPE, VEC_SIZE)) +#else // defined(VEC_SIZE +#define round_op(input) CONVERT(CONVERT_SAT_ROUND(input, int, rte), DATA_TYPE) +#endif // defined(VEC_SIZE /** 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 8b8d2965df..03edcef781 100644 --- a/src/core/CL/kernels/CLElementWiseUnaryLayerKernel.cpp +++ b/src/core/CL/kernels/CLElementWiseUnaryLayerKernel.cpp @@ -96,6 +96,9 @@ void CLElementWiseUnaryLayerKernel::configure(const ICLTensor *input, ICLTensor case ElementWiseUnary::LOG: build_opts.add_option("-DOPERATION=natural_log_op"); break; + case ElementWiseUnary::ROUND: + build_opts.add_option("-DOPERATION=round_op"); + break; default: ARM_COMPUTE_ERROR("Not implemented"); } |