blob: fa61a100a9b063ccdf9ea3e7aafad2786ec5e3d9 [file] [log] [blame]
Pablo Telloe61f0712020-01-23 10:37:17 +00001//
2// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "NeonDivisionWorkload.hpp"
Jan Eilersbb446e52020-04-02 13:56:54 +01007
Pablo Telloe61f0712020-01-23 10:37:17 +00008#include <aclCommon/ArmComputeTensorUtils.hpp>
Mike Kelly07810fc2020-11-12 10:58:48 +00009#include <aclCommon/ArmComputeUtils.hpp>
10
Jan Eilersbb446e52020-04-02 13:56:54 +010011#include <armnn/utility/PolymorphicDowncast.hpp>
Mike Kelly07810fc2020-11-12 10:58:48 +000012
James Conroy1f58f032021-04-27 17:13:27 +010013#include <backendsCommon/TensorHandle.hpp>
Pablo Telloe61f0712020-01-23 10:37:17 +000014
15namespace armnn
16{
17
18arm_compute::Status NeonDivisionWorkloadValidate(const TensorInfo& input0,
Mike Kelly07810fc2020-11-12 10:58:48 +000019 const TensorInfo& input1,
20 const TensorInfo& output,
21 const ActivationDescriptor* activationDescriptor)
Pablo Telloe61f0712020-01-23 10:37:17 +000022{
23 const arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);
24 const arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);
25 const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
26
Mike Kelly07810fc2020-11-12 10:58:48 +000027 const arm_compute::ActivationLayerInfo activationInfo = ConvertActivationDescriptorToAclActivationLayerInfo(
28 activationDescriptor);
29
Pablo Telloe61f0712020-01-23 10:37:17 +000030 return arm_compute::NEElementwiseDivision::validate(&aclInput0,
Mike Kelly07810fc2020-11-12 10:58:48 +000031 &aclInput1,
32 &aclOutput,
33 activationInfo);
Pablo Telloe61f0712020-01-23 10:37:17 +000034}
35
36NeonDivisionWorkload::NeonDivisionWorkload(const DivisionQueueDescriptor& descriptor,
37 const WorkloadInfo& info)
38 : BaseWorkload<DivisionQueueDescriptor>(descriptor, info)
39{
40 m_Data.ValidateInputsOutputs("NeonDivisionWorkload", 2, 1);
41
Jan Eilersbb446e52020-04-02 13:56:54 +010042 arm_compute::ITensor& input0 = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
43 arm_compute::ITensor& input1 = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
44 arm_compute::ITensor& output = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
Pablo Telloe61f0712020-01-23 10:37:17 +000045
Mike Kelly07810fc2020-11-12 10:58:48 +000046 const arm_compute::ActivationLayerInfo activationInfo = ConvertAdditionalInfoToAclActivationLayerInfo(descriptor);
47
48 m_DivLayer.configure(&input0, &input1, &output, activationInfo);
Pablo Telloe61f0712020-01-23 10:37:17 +000049}
50
51void NeonDivisionWorkload::Execute() const
52{
53 ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonDivisionWorkload_Execute");
54 m_DivLayer.run();
55}
56
57} //namespace armnn