aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorSang-Hoon Park <sang-hoon.park@arm.com>2021-01-22 11:55:03 +0000
committerGeorgios Pinitas <georgios.pinitas@arm.com>2021-01-26 03:44:45 +0000
commit7249f154c2ec029f9b8c91f2bb845abe6590f7ed (patch)
tree8131e7c5aa356e63b68a51515ea0450c6c7bd3f6 /src/core
parent6a4ebe1305b544aec1ba0bfc67ed65d94fcc8c2e (diff)
downloadComputeLibrary-7249f154c2ec029f9b8c91f2bb845abe6590f7ed.tar.gz
Rename functions/classes for elementwise unary operations
* Create CpuElementwiseUnary operator * Rename kernel classes * Make the kernels stateless Partially implements: COMPMID-4003 Change-Id: Ie0440cd01d4924847d6991b4df7ccaf311439297 Signed-off-by: Sang-Hoon Park <sang-hoon.park@arm.com> Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4912 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com> Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/NEON/NEKernels.h1
-rw-r--r--src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp (renamed from src/core/NEON/kernels/NEElementwiseUnaryKernel.cpp)66
-rw-r--r--src/core/cpu/kernels/CpuElementwiseUnaryKernel.h (renamed from src/core/NEON/kernels/NEElementwiseUnaryKernel.h)48
-rw-r--r--src/core/cpu/kernels/elementwise/neon/elementwise_unary_list.h (renamed from src/core/NEON/kernels/elementwise/impl/elementwise_unary_list.h)0
-rw-r--r--src/core/cpu/kernels/elementwise/sve/elementwise_unary_list.h (renamed from src/core/SVE/kernels/elementwise/impl/elementwise_unary_list.h)0
5 files changed, 57 insertions, 58 deletions
diff --git a/src/core/NEON/NEKernels.h b/src/core/NEON/NEKernels.h
index c009a6d3af..87eec38605 100644
--- a/src/core/NEON/NEKernels.h
+++ b/src/core/NEON/NEKernels.h
@@ -54,7 +54,6 @@
#include "src/core/NEON/kernels/NEDilateKernel.h"
#include "src/core/NEON/kernels/NEDirectConvolutionLayerKernel.h"
#include "src/core/NEON/kernels/NEDirectConvolutionLayerOutputStageKernel.h"
-#include "src/core/NEON/kernels/NEElementwiseUnaryKernel.h"
#include "src/core/NEON/kernels/NEErodeKernel.h"
#include "src/core/NEON/kernels/NEFFTDigitReverseKernel.h"
#include "src/core/NEON/kernels/NEFFTRadixStageKernel.h"
diff --git a/src/core/NEON/kernels/NEElementwiseUnaryKernel.cpp b/src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp
index fdd2aabf60..d2681bb060 100644
--- a/src/core/NEON/kernels/NEElementwiseUnaryKernel.cpp
+++ b/src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp
@@ -21,31 +21,35 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#include "src/core/NEON/kernels/NEElementwiseUnaryKernel.h"
+#include "src/core/cpu/kernels/CpuElementwiseUnaryKernel.h"
#include "arm_compute/core/Error.h"
#include "arm_compute/core/Helpers.h"
#include "arm_compute/core/ITensor.h"
#include "arm_compute/core/Validate.h"
#include "src/core/CPP/Validate.h"
-#include "src/core/NEON/kernels/elementwise/impl/elementwise_unary_list.h"
-#include "src/core/SVE/kernels/elementwise/impl/elementwise_unary_list.h"
#include "src/core/common/Registrars.h"
+#include "src/core/cpu/kernels/elementwise/neon/elementwise_unary_list.h"
+#include "src/core/cpu/kernels/elementwise/sve/elementwise_unary_list.h"
#include "src/core/helpers/AutoConfiguration.h"
#include "src/core/helpers/WindowHelpers.h"
#include "support/ToolchainSupport.h"
namespace arm_compute
{
+namespace cpu
+{
+namespace kernels
+{
namespace
{
using ElementwiseUnarySelector = std::add_pointer<bool(DataType)>::type;
struct ElementwiseUnaryKernel
{
- const char *name;
- const ElementwiseUnarySelector is_selected;
- NEElementwiseUnaryKernel::ElementwiseUnaryUkernelPtr ukernel;
+ const char *name;
+ const ElementwiseUnarySelector is_selected;
+ CpuElementwiseUnaryKernel::ElementwiseUnaryUkernelPtr ukernel;
};
static const ElementwiseUnaryKernel available_kernels[] =
@@ -99,41 +103,35 @@ const ElementwiseUnaryKernel *get_implementation(DataType dt)
}
} // namespace
-NEElementwiseUnaryKernel::NEElementwiseUnaryKernel()
- : _func(nullptr), _input(nullptr), _output(nullptr), _op()
+CpuElementwiseUnaryKernel::CpuElementwiseUnaryKernel()
+ : _op()
{
}
-void NEElementwiseUnaryKernel::configure(ElementWiseUnary op, const ITensor *input, ITensor *output)
+void CpuElementwiseUnaryKernel::configure(ElementWiseUnary op, const ITensorInfo &input, ITensorInfo &output)
{
- ARM_COMPUTE_ERROR_THROW_ON(validate(op, input->info(), output->info()));
- ARM_COMPUTE_ERROR_ON_NULLPTR(input, output);
+ ARM_COMPUTE_ERROR_THROW_ON(validate(op, input, output));
// Configure kernel window
- const std::pair<TensorShape, ValidRegion> broadcast_pair = ITensorInfo::broadcast_shape_and_valid_region(*input->info());
+ const std::pair<TensorShape, ValidRegion> broadcast_pair = ITensorInfo::broadcast_shape_and_valid_region(input);
const TensorShape &out_shape = broadcast_pair.first;
const ValidRegion &valid_region = broadcast_pair.second;
// Auto initialize output if not initialized
- auto_init_if_empty(*output->info(), out_shape, 1, input->info()->data_type());
+ auto_init_if_empty(output, out_shape, 1, input.data_type());
Window win = calculate_max_window(valid_region);
- _input = input;
- _output = output;
- _op = op;
+ _op = op;
- INEKernel::configure(win);
-
- _func = get_implementation(input->info()->data_type())->ukernel;
+ ICpuKernel::configure(win);
}
-Status NEElementwiseUnaryKernel::validate(ElementWiseUnary op, const ITensorInfo *input, const ITensorInfo *output)
+Status CpuElementwiseUnaryKernel::validate(ElementWiseUnary op, const ITensorInfo &input, const ITensorInfo &output)
{
- ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(input, output);
- ARM_COMPUTE_RETURN_ERROR_ON_CPU_F16_UNSUPPORTED(input);
+ ARM_COMPUTE_RETURN_ERROR_ON_CPU_F16_UNSUPPORTED(&input);
- const auto *uk = get_implementation(input->data_type());
+ const auto *uk = get_implementation(input.data_type());
ARM_COMPUTE_RETURN_ERROR_ON(uk == nullptr || uk->ukernel == nullptr);
switch(op)
@@ -143,30 +141,36 @@ Status NEElementwiseUnaryKernel::validate(ElementWiseUnary op, const ITensorInfo
case ElementWiseUnary::LOG:
case ElementWiseUnary::ROUND:
case ElementWiseUnary::SIN:
- ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::F16, DataType::F32);
+ ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(&input, 1, DataType::F16, DataType::F32);
break;
case ElementWiseUnary::NEG:
case ElementWiseUnary::ABS:
- ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::F16, DataType::F32, DataType::S32);
+ ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(&input, 1, DataType::F16, DataType::F32, DataType::S32);
break;
default:
ARM_COMPUTE_ERROR("ElementWiseUnary operation not supported");
}
// Validate in case of configured output
- if(output->total_size() > 0)
+ if(output.total_size() > 0)
{
- ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_DATA_TYPES(input, output);
+ ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_DATA_TYPES(&input, &output);
}
return Status{};
}
-void NEElementwiseUnaryKernel::run(const Window &window, const ThreadInfo &info)
+void CpuElementwiseUnaryKernel::run_op(ITensorPack &tensors, const Window &window, const ThreadInfo &info)
{
ARM_COMPUTE_UNUSED(info);
ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this);
- ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(INEKernel::window(), window);
- ARM_COMPUTE_ERROR_ON(_func == nullptr);
- (*_func)(_input, _output, window, _op);
+ ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(ICpuKernel::window(), window);
+
+ auto src = tensors.get_const_tensor(TensorType::ACL_SRC);
+ auto dst = tensors.get_tensor(TensorType::ACL_DST);
+ auto func = get_implementation(src->info()->data_type())->ukernel;
+ ARM_COMPUTE_ERROR_ON(func == nullptr);
+ func(src, dst, window, _op);
}
+} // namespace kernels
+} // namespace cpu
} // namespace arm_compute
diff --git a/src/core/NEON/kernels/NEElementwiseUnaryKernel.h b/src/core/cpu/kernels/CpuElementwiseUnaryKernel.h
index b248e821c3..193f6f1e4f 100644
--- a/src/core/NEON/kernels/NEElementwiseUnaryKernel.h
+++ b/src/core/cpu/kernels/CpuElementwiseUnaryKernel.h
@@ -21,51 +21,48 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#ifndef ARM_COMPUTE_NEELEMENTWISEUNARYKERNEL_H
-#define ARM_COMPUTE_NEELEMENTWISEUNARYKERNEL_H
+#ifndef ARM_COMPUTE_CPU_ELEMENTWISE_UNARY_KERNEL_H
+#define ARM_COMPUTE_CPU_ELEMENTWISE_UNARY_KERNEL_H
#include "arm_compute/core/Types.h"
-#include "src/core/NEON/INEKernel.h"
+#include "src/core/common/Macros.h"
+#include "src/core/cpu/ICpuKernel.h"
namespace arm_compute
{
class ITensor;
-
+namespace cpu
+{
+namespace kernels
+{
/** Interface for an element-wise unary operation kernel
*
* Element-wise operation is computed by:
* @f[ output(x) = OP(input(x))@f]
*
*/
-class NEElementwiseUnaryKernel : public INEKernel
+class CpuElementwiseUnaryKernel : public ICpuKernel
{
public:
const char *name() const override
{
- return "NEElementwiseUnaryKernel";
+ return "CpuElementwiseUnaryKernel";
}
/** Default constructor */
- NEElementwiseUnaryKernel();
- /** Prevent instances of this class from being copied (As this class contains pointers) */
- NEElementwiseUnaryKernel(const NEElementwiseUnaryKernel &) = delete;
- /** Prevent instances of this class from being copied (As this class contains pointers) */
- NEElementwiseUnaryKernel &operator=(const NEElementwiseUnaryKernel &) = delete;
- /** Allow instances of this class to be moved */
- NEElementwiseUnaryKernel(NEElementwiseUnaryKernel &&) = default;
- /** Allow instances of this class to be moved */
- NEElementwiseUnaryKernel &operator=(NEElementwiseUnaryKernel &&) = default;
+ CpuElementwiseUnaryKernel();
/** Default destructor */
- ~NEElementwiseUnaryKernel() = default;
+ ~CpuElementwiseUnaryKernel() = default;
+ ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(CpuElementwiseUnaryKernel);
- /** Function to configure the @ref NEElementwiseUnaryKernel
+ /** Function to configure the @ref CpuElementwiseUnaryKernel
*
* @param[in] op Arithmetic operation to be executed.
* @param[in] input First tensor input. Data types supported: F16/F32, F16/F32/S32 for NEG/ABS operations.
* @param[out] output Output tensor. Data types supported: Same as @p input.
*/
- void configure(ElementWiseUnary op, const ITensor *input, ITensor *output);
+ void configure(ElementWiseUnary op, const ITensorInfo &input, ITensorInfo &output);
- /** Static function to check if given info will lead to a valid configuration of @ref NEElementwiseUnaryKernel
+ /** Static function to check if given info will lead to a valid configuration of @ref CpuElementwiseUnaryKernel
*
* @param[in] op Arithmetic operation to be executed.
* @param[in] input First tensor input info. Data types supported: F16/F32, F16/F32/S32 for NEG/ABS operations.
@@ -73,10 +70,10 @@ public:
*
* @return a Status
*/
- static Status validate(ElementWiseUnary op, const ITensorInfo *input, const ITensorInfo *output);
+ static Status validate(ElementWiseUnary op, const ITensorInfo &input, const ITensorInfo &output);
// Inherited methods overridden:
- void run(const Window &window, const ThreadInfo &info) override;
+ void run_op(ITensorPack &tensors, const Window &window, const ThreadInfo &info) override;
/** Common signature for all the specialised elementwise unary micro-kernels
*
@@ -85,10 +82,9 @@ public:
using ElementwiseUnaryUkernelPtr = std::add_pointer<void(const ITensor *, ITensor *, const Window &, ElementWiseUnary)>::type;
private:
- ElementwiseUnaryUkernelPtr _func;
- const ITensor *_input;
- ITensor *_output;
- ElementWiseUnary _op;
+ ElementWiseUnary _op;
};
+} // namespace kernels
+} // namespace cpu
} // namespace arm_compute
-#endif /* ARM_COMPUTE_NEELEMENTWISEUNARYKERNEL_H */
+#endif /* ARM_COMPUTE_CPU_ELEMENTWISE_UNARY_KERNEL_H */
diff --git a/src/core/NEON/kernels/elementwise/impl/elementwise_unary_list.h b/src/core/cpu/kernels/elementwise/neon/elementwise_unary_list.h
index 307e95fae9..307e95fae9 100644
--- a/src/core/NEON/kernels/elementwise/impl/elementwise_unary_list.h
+++ b/src/core/cpu/kernels/elementwise/neon/elementwise_unary_list.h
diff --git a/src/core/SVE/kernels/elementwise/impl/elementwise_unary_list.h b/src/core/cpu/kernels/elementwise/sve/elementwise_unary_list.h
index 23502c71e5..23502c71e5 100644
--- a/src/core/SVE/kernels/elementwise/impl/elementwise_unary_list.h
+++ b/src/core/cpu/kernels/elementwise/sve/elementwise_unary_list.h