17#include "../KernelGenerator.h"
18#include "../Validator.h"
25void Validator::visit(
const ir::operation::ElementwiseUnary &) {
_supported =
true; }
27void KernelGenerator::visit(
const ir::operation::ElementwiseUnary &node)
29 const auto output_index{node.getOutputs().at(0)};
33 auto input_tensor = _tensor_reg->getAclTensor(input_index);
35 std::unique_ptr<arm_compute::IFunction> fn;
36 switch (node.param().op_type)
40 const ::arm_compute::ActivationLayerInfo act_info{
41 ::arm_compute::ActivationLayerInfo::ActivationFunction::ABS};
43 fn = acl_common::generateLayer<arm_compute::NEActivationLayer>(
51 fn = acl_common::generateLayer<arm_compute::NECopy>(input_tensor->handle(),
54 else if (_ctx.
at(input_index).typeInfo().
type() == ir::DataType::BOOL8)
56 fn = acl_common::generateLayer<arm_compute::NECastBool>(input_tensor->handle(),
61 fn = acl_common::generateLayer<arm_compute::NECast>(
62 input_tensor->handle(),
output_tensor->handle(), arm_compute::ConvertPolicy::SATURATE);
68 fn = acl_common::generateLayer<arm_compute::NEDequantizationLayer>(input_tensor->handle(),
74 fn = acl_common::generateLayer<arm_compute::NEExpLayer>(input_tensor->handle(),
80 fn = acl_common::generateLayer<arm_compute::NEFloor>(input_tensor->handle(),
86 fn = acl_common::generateLayer<arm_compute::NEBitwiseNot>(input_tensor->handle(),
92 fn = acl_common::generateLayer<arm_compute::NENegLayer>(input_tensor->handle(),
98 fn = acl_common::generateLayer<arm_compute::NERsqrtLayer>(input_tensor->handle(),
104 const ::arm_compute::ActivationLayerInfo act_info{
105 ::arm_compute::ActivationLayerInfo::ActivationFunction::SQRT};
107 fn = acl_common::generateLayer<arm_compute::NEActivationLayer>(
113 throw std::runtime_error(
"acl_neon KernelGenerator : " + node.name() +
114 "is not supported yet");
std::unique_ptr< exec::IFunction > _return_fn
const Object & at(const Index &index) const
Get the object that is associated with the given index.
std::unique_ptr< AclFunction > asAclFunction(std::unique_ptr<::arm_compute::IFunction > &&layer)