17#include "../KernelGenerator.h"
18#include "../Validator.h"
25void Validator::visit(
const ir::operation::BinaryArithmetic &) {
_supported =
true; }
27void KernelGenerator::visit(
const ir::operation::BinaryArithmetic &node)
29 const auto ofm_index{node.getOutputs().at(0)};
33 const auto activation = node.param().activation;
35 auto ofm_tensor = _tensor_reg->getAclTensor(ofm_index);
36 auto lhs_tensor = _tensor_reg->getAclTensor(lhs_index);
37 auto rhs_tensor = _tensor_reg->getAclTensor(rhs_index);
41 std::unique_ptr<arm_compute::IFunction> fn;
42 switch (node.param().arithmetic_type)
46 arm_compute::CLArithmeticAddition::validate(lhs_tensor->info(), rhs_tensor->info(),
48 arm_compute::ConvertPolicy::SATURATE, act_info)
50 fn = acl_common::generateLayer<arm_compute::CLArithmeticAddition>(
51 lhs_tensor->handle(), rhs_tensor->handle(), ofm_tensor->handle(),
52 arm_compute::ConvertPolicy::SATURATE, act_info);
57 arm_compute::CLArithmeticSubtraction::validate(lhs_tensor->info(), rhs_tensor->info(),
59 arm_compute::ConvertPolicy::SATURATE, act_info)
61 fn = acl_common::generateLayer<arm_compute::CLArithmeticSubtraction>(
62 lhs_tensor->handle(), rhs_tensor->handle(), ofm_tensor->handle(),
63 arm_compute::ConvertPolicy::SATURATE, act_info);
68 arm_compute::CLPixelWiseMultiplication::validate(
69 lhs_tensor->info(), rhs_tensor->info(), ofm_tensor->info(), 1.0,
70 arm_compute::ConvertPolicy::SATURATE, arm_compute::RoundingPolicy::TO_NEAREST_EVEN,
73 fn = acl_common::generateLayer<arm_compute::CLPixelWiseMultiplication>(
74 lhs_tensor->handle(), rhs_tensor->handle(), ofm_tensor->handle(), 1.0,
75 arm_compute::ConvertPolicy::SATURATE, arm_compute::RoundingPolicy::TO_NEAREST_EVEN,
81 arm_compute::CLArithmeticDivision::validate(lhs_tensor->info(), rhs_tensor->info(),
82 ofm_tensor->info(), act_info)
84 fn = acl_common::generateLayer<arm_compute::CLArithmeticDivision>(
85 lhs_tensor->handle(), rhs_tensor->handle(), ofm_tensor->handle(), act_info);
89 assert(
false &&
"The BinaryArithmetic operation supports only binary arithmetic operations");
std::unique_ptr< exec::IFunction > _return_fn
::arm_compute::ActivationLayerInfo asActivationLayerInfo(const ir::Activation act_code)
std::unique_ptr< AclFunction > asAclFunction(std::unique_ptr<::arm_compute::IFunction > &&layer)