aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/kernels/CpuScaleKernel.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/kernels/CpuScaleKernel.h')
-rw-r--r--src/cpu/kernels/CpuScaleKernel.h24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/cpu/kernels/CpuScaleKernel.h b/src/cpu/kernels/CpuScaleKernel.h
index 913b5a5593..94bbdb72a0 100644
--- a/src/cpu/kernels/CpuScaleKernel.h
+++ b/src/cpu/kernels/CpuScaleKernel.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2021 Arm Limited.
+ * Copyright (c) 2016-2022 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -35,8 +35,14 @@ namespace cpu
namespace kernels
{
/** Arm(R) Neon(TM) kernel to perform scaling on a tensor */
-class CpuScaleKernel : public ICpuKernel
+class CpuScaleKernel : public NewICpuKernel<CpuScaleKernel>
{
+private:
+ /** Scale function to use for the particular function to use */
+ using ScaleFunctionPtr = void (CpuScaleKernel::*)(const ITensor *, ITensor *, const ITensor *, const ITensor *, const ITensor *, const Window &window);
+ using ScaleKernelPtr = std::add_pointer<void(const ITensor *, ITensor *, const ITensor *, const ITensor *, const ITensor *,
+ InterpolationPolicy, BorderMode, PixelValue, float, bool, const Window &)>::type;
+
public:
CpuScaleKernel() = default;
ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(CpuScaleKernel);
@@ -67,6 +73,15 @@ public:
void run_op(ITensorPack &tensors, const Window &window, const ThreadInfo &info) override;
const char *name() const override;
+ struct ScaleKernel
+ {
+ const char *name;
+ const DataTypeISASelectorPtr is_selected;
+ ScaleKernelPtr ukernel;
+ };
+
+ static const std::vector<ScaleKernel> &get_available_kernels();
+
private:
#ifdef ENABLE_NCHW_KERNELS
/** function to perform scale using area interpolation on the given window
@@ -87,11 +102,6 @@ private:
void scale_nearest_nchw(const ITensor *src, ITensor *dst, const ITensor *dx, const ITensor *dy, const ITensor *offsets, const Window &window);
#endif // ENABLE_NCHW_KERNELS
- /** Scale function to use for the particular function to use */
- using ScaleFunctionPtr = void (CpuScaleKernel::*)(const ITensor *, ITensor *, const ITensor *, const ITensor *, const ITensor *, const Window &window);
- using ScaleKernelPtr = std::add_pointer<void(const ITensor *, ITensor *, const ITensor *, const ITensor *, const ITensor *,
- InterpolationPolicy, BorderMode, PixelValue, float, bool, const Window &)>::type;
-
ScaleFunctionPtr _func{ nullptr };
InterpolationPolicy _policy{};
BorderMode _border_mode{};