diff options
author | Viet-Hoa Do <viet-hoa.do@arm.com> | 2023-03-15 14:05:06 +0000 |
---|---|---|
committer | Viet-Hoa Do <viet-hoa.do@arm.com> | 2023-03-29 14:03:30 +0000 |
commit | fd472f05dc73005a89a5e6275940ab5c9a609485 (patch) | |
tree | 4a00f42f64f4bea72c489961aaa376665d324c60 /src/cpu/kernels/CpuElementwiseUnaryKernel.h | |
parent | 5a7d1571a2de24eefc6f1d8d22deeef9f47521ee (diff) | |
download | ComputeLibrary-fd472f05dc73005a89a5e6275940ab5c9a609485.tar.gz |
Add quantized support for unary elementwise in CPU
* Add quantized unary elementwise in CPU using LUT.
* Widen the input data range of the test suite.
- Fix CPU exponential function overflow/underflow range.
- Fix saturation issue of CL round operator.
Resolves: COMPMID-5763
Signed-off-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Change-Id: I41445de2b4a33ec6b01e0ab701516c240c852d0b
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9367
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Jakub Sujak <jakub.sujak@arm.com>
Reviewed-by: Pablo Marquez Tello <pablo.tello@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/cpu/kernels/CpuElementwiseUnaryKernel.h')
-rw-r--r-- | src/cpu/kernels/CpuElementwiseUnaryKernel.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/cpu/kernels/CpuElementwiseUnaryKernel.h b/src/cpu/kernels/CpuElementwiseUnaryKernel.h index 138049a60c..00188f0d49 100644 --- a/src/cpu/kernels/CpuElementwiseUnaryKernel.h +++ b/src/cpu/kernels/CpuElementwiseUnaryKernel.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2022 Arm Limited. + * Copyright (c) 2018-2023 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -42,7 +42,8 @@ namespace kernels class CpuElementwiseUnaryKernel : public ICpuKernel<CpuElementwiseUnaryKernel> { private: - using ElementwiseUnaryUkernelPtr = std::add_pointer<void(const ITensor *, ITensor *, const Window &, ElementWiseUnary)>::type; + using ElementwiseUnaryUkernelPtr = std::add_pointer<void(const ITensor *, ITensor *, const Window &, ElementWiseUnary, const uint8_t *)>::type; + using ElementwiseUnaryPreparePtr = std::add_pointer<std::unique_ptr<uint8_t[]>(ElementWiseUnary op, const ITensorInfo *, const ITensorInfo *)>::type; public: CpuElementwiseUnaryKernel() = default; @@ -72,6 +73,7 @@ public: const char *name; const DataTypeISASelectorPtr is_selected; ElementwiseUnaryUkernelPtr ukernel; + ElementwiseUnaryPreparePtr prepare_func; }; static const std::vector<ElementwiseUnaryKernel> &get_available_kernels(); @@ -80,6 +82,7 @@ private: ElementWiseUnary _op{}; ElementwiseUnaryUkernelPtr _run_method{ nullptr }; std::string _name{}; + std::unique_ptr<uint8_t[]> _lut{}; }; } // namespace kernels } // namespace cpu |