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::CLActivationLayer>(
51 fn = acl_common::generateLayer<arm_compute::CLCopy>(input_tensor->handle(),
54 else if (_ctx.
at(input_index).typeInfo().
type() == ir::DataType::BOOL8)
56 fn = acl_common::generateLayer<arm_compute::CLCastBool>(input_tensor->handle(),
62 fn = acl_common::generateLayer<arm_compute::CLCast>(
63 input_tensor->handle(),
output_tensor->handle(), arm_compute::ConvertPolicy::SATURATE);
69 fn = acl_common::generateLayer<arm_compute::CLDequantizationLayer>(input_tensor->handle(),
75 fn = acl_common::generateLayer<arm_compute::CLExpLayer>(input_tensor->handle(),
81 fn = acl_common::generateLayer<arm_compute::CLFloor>(input_tensor->handle(),
87 fn = acl_common::generateLayer<arm_compute::CLBitwiseNot>(input_tensor->handle(),
93 fn = acl_common::generateLayer<arm_compute::CLNegLayer>(input_tensor->handle(),
99 fn = acl_common::generateLayer<arm_compute::CLRsqrtLayer>(input_tensor->handle(),
105 const ::arm_compute::ActivationLayerInfo act_info{
106 ::arm_compute::ActivationLayerInfo::ActivationFunction::SQRT};
108 fn = acl_common::generateLayer<arm_compute::CLActivationLayer>(
114 throw std::runtime_error(
"acl_cl KernelGenerator : " + node.name() +
"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)