blob: e492169cbdb825506317fbe6d60971938a1322d8 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
Mike Kelly7cbe7812023-07-25 17:37:33 +01002// Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5
Matthew Bentham955258d2018-12-10 10:48:52 +00006#include "NeonAdditionWorkload.hpp"
Matthew Benthamd80a7122019-01-08 17:52:37 +00007#include "NeonWorkloadUtils.hpp"
8
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00009#include <aclCommon/ArmComputeTensorUtils.hpp>
Mike Kelly07810fc2020-11-12 10:58:48 +000010#include <aclCommon/ArmComputeUtils.hpp>
11
Jan Eilersbb446e52020-04-02 13:56:54 +010012#include <armnn/utility/PolymorphicDowncast.hpp>
Colm Donelan0c479742021-12-10 12:43:54 +000013#include <armnn/backends/TensorHandle.hpp>
telsoa014fcda012018-03-09 14:13:49 +000014
Matthew Benthamd80a7122019-01-08 17:52:37 +000015#include <arm_compute/runtime/NEON/functions/NEArithmeticAddition.h>
16
telsoa014fcda012018-03-09 14:13:49 +000017namespace armnn
18{
19
telsoa01c577f2c2018-08-31 09:22:23 +010020arm_compute::Status NeonAdditionWorkloadValidate(const TensorInfo& input0,
21 const TensorInfo& input1,
Mike Kelly07810fc2020-11-12 10:58:48 +000022 const TensorInfo& output,
23 const ActivationDescriptor* activationDescriptor)
telsoa01c577f2c2018-08-31 09:22:23 +010024{
25 const arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);
26 const arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);
27 const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
28
Mike Kelly07810fc2020-11-12 10:58:48 +000029 const arm_compute::ActivationLayerInfo activationInfo = ConvertActivationDescriptorToAclActivationLayerInfo(
30 activationDescriptor);
31
telsoa01c577f2c2018-08-31 09:22:23 +010032 return arm_compute::NEArithmeticAddition::validate(&aclInput0,
33 &aclInput1,
34 &aclOutput,
Mike Kelly07810fc2020-11-12 10:58:48 +000035 arm_compute::ConvertPolicy::SATURATE,
36 activationInfo);
telsoa01c577f2c2018-08-31 09:22:23 +010037}
38
39
Matthew Bentham955258d2018-12-10 10:48:52 +000040NeonAdditionWorkload::NeonAdditionWorkload(const AdditionQueueDescriptor& descriptor,
41 const WorkloadInfo& info)
Teresa Charlin588cbdf2022-01-19 15:55:37 +000042 : NeonBaseWorkload<AdditionQueueDescriptor>(descriptor, info)
telsoa014fcda012018-03-09 14:13:49 +000043{
Matthew Bentham955258d2018-12-10 10:48:52 +000044 m_Data.ValidateInputsOutputs("NeonAdditionWorkload", 2, 1);
telsoa014fcda012018-03-09 14:13:49 +000045
Jan Eilersbb446e52020-04-02 13:56:54 +010046 arm_compute::ITensor& input1 = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
47 arm_compute::ITensor& input2 = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
48 arm_compute::ITensor& output = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
telsoa014fcda012018-03-09 14:13:49 +000049
Mike Kelly07810fc2020-11-12 10:58:48 +000050 const arm_compute::ActivationLayerInfo activationInfo = ConvertAdditionalInfoToAclActivationLayerInfo(descriptor);
51
Matthew Benthamd80a7122019-01-08 17:52:37 +000052 auto layer = std::make_unique<arm_compute::NEArithmeticAddition>();
Mike Kelly07810fc2020-11-12 10:58:48 +000053 layer->configure(&input1, &input2, &output, arm_compute::ConvertPolicy::SATURATE, activationInfo);
Matthew Benthamd80a7122019-01-08 17:52:37 +000054 m_AddLayer.reset(layer.release());
telsoa014fcda012018-03-09 14:13:49 +000055}
56
Matthew Bentham955258d2018-12-10 10:48:52 +000057void NeonAdditionWorkload::Execute() const
telsoa014fcda012018-03-09 14:13:49 +000058{
Mike Kelly7cbe7812023-07-25 17:37:33 +010059 ARMNN_SCOPED_PROFILING_EVENT_NEON_NAME_GUID("NeonAdditionWorkload_Execute");
Matthew Benthamd80a7122019-01-08 17:52:37 +000060 m_AddLayer->run();
telsoa014fcda012018-03-09 14:13:49 +000061}
62
63} //namespace armnn
64