17#include "../KernelGenerator.h"
18#include "../Validator.h"
27 acl_common::AclActivationBuilder<::arm_compute::ITensor, ::arm_compute::NEActivationLayer,
28 acl_common::AclFunction>;
30void Validator::visit(
const ir::operation::BinaryArithmetic &) {
_supported =
true; }
32void KernelGenerator::visit(
const ir::operation::BinaryArithmetic &node)
34 const auto ofm_index{node.getOutputs().at(0)};
38 const auto activation = node.param().activation;
40 auto ofm_tensor = _tensor_reg->getAclTensor(ofm_index);
41 auto lhs_tensor = _tensor_reg->getAclTensor(lhs_index);
42 auto rhs_tensor = _tensor_reg->getAclTensor(rhs_index);
44 std::unique_ptr<arm_compute::IFunction> fn;
45 switch (node.param().arithmetic_type)
49 arm_compute::NEArithmeticAddition::validate(lhs_tensor->info(), rhs_tensor->info(),
51 arm_compute::ConvertPolicy::SATURATE)
53 fn = acl_common::generateLayer<arm_compute::NEArithmeticAddition>(
54 lhs_tensor->handle(), rhs_tensor->handle(), ofm_tensor->handle(),
55 arm_compute::ConvertPolicy::SATURATE);
60 arm_compute::NEArithmeticSubtraction::validate(lhs_tensor->info(), rhs_tensor->info(),
62 arm_compute::ConvertPolicy::SATURATE)
64 fn = acl_common::generateLayer<arm_compute::NEArithmeticSubtraction>(
65 lhs_tensor->handle(), rhs_tensor->handle(), ofm_tensor->handle(),
66 arm_compute::ConvertPolicy::SATURATE);
71 arm_compute::NEPixelWiseMultiplication::validate(
72 lhs_tensor->info(), rhs_tensor->info(), ofm_tensor->info(), 1.0,
73 arm_compute::ConvertPolicy::SATURATE, arm_compute::RoundingPolicy::TO_ZERO)
76 fn = acl_common::generateLayer<arm_compute::NEPixelWiseMultiplication>(
77 lhs_tensor->handle(), rhs_tensor->handle(), ofm_tensor->handle(), 1.0,
78 arm_compute::ConvertPolicy::SATURATE, arm_compute::RoundingPolicy::TO_ZERO);
83 arm_compute::NEElementwiseDivision::validate(lhs_tensor->info(), rhs_tensor->info(),
86 fn = acl_common::generateLayer<arm_compute::NEElementwiseDivision>(
87 lhs_tensor->handle(), rhs_tensor->handle(), ofm_tensor->handle());
91 assert(
false &&
"The BinaryArithmetic operation supports only binary arithmetic operations");
94 _return_fn = std::make_unique<exec::FunctionSequence>(
static std::unique_ptr< exec::IFunction > generate(ir::Activation code, T_Tensor *ifm_alloc)
std::unique_ptr< exec::IFunction > _return_fn
std::unique_ptr< AclFunction > asAclFunction(std::unique_ptr<::arm_compute::IFunction > &&layer)
::onert::backend::acl_common::AclActivationBuilder< ::arm_compute::ITensor, ::arm_compute::NEActivationLayer, acl_common::AclFunction > ActivationBuilder