blob: 10716021ab0c9c902a2cd703bbfa8face6fde64f [file] [log] [blame]
David Beckbc392452018-09-10 14:47:28 +01001//
Teresa Charlin588cbdf2022-01-19 15:55:37 +00002// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
David Beckbc392452018-09-10 14:47:28 +01003// SPDX-License-Identifier: MIT
4//
5
Conor Kennedyb99480b2019-03-08 08:24:41 +00006#include "NeonSubtractionWorkload.hpp"
Matthew Benthamd80a7122019-01-08 17:52:37 +00007
8#include "NeonWorkloadUtils.hpp"
Mike Kelly07810fc2020-11-12 10:58:48 +00009
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000010#include <aclCommon/ArmComputeTensorUtils.hpp>
Mike Kelly07810fc2020-11-12 10:58:48 +000011#include <aclCommon/ArmComputeUtils.hpp>
12
Jan Eilersbb446e52020-04-02 13:56:54 +010013#include <armnn/utility/PolymorphicDowncast.hpp>
Mike Kelly07810fc2020-11-12 10:58:48 +000014
Colm Donelan0c479742021-12-10 12:43:54 +000015#include <armnn/backends/TensorHandle.hpp>
David Beckbc392452018-09-10 14:47:28 +010016
Matthew Benthamd80a7122019-01-08 17:52:37 +000017#include <arm_compute/runtime/NEON/functions/NEArithmeticSubtraction.h>
18
David Beckbc392452018-09-10 14:47:28 +010019namespace armnn
20{
21
22arm_compute::Status NeonSubtractionWorkloadValidate(const TensorInfo& input0,
23 const TensorInfo& input1,
Mike Kelly07810fc2020-11-12 10:58:48 +000024 const TensorInfo& output,
25 const ActivationDescriptor* activationDescriptor)
David Beckbc392452018-09-10 14:47:28 +010026{
27 const arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);
28 const arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);
29 const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
30
Mike Kelly07810fc2020-11-12 10:58:48 +000031 const arm_compute::ActivationLayerInfo activationInfo = ConvertActivationDescriptorToAclActivationLayerInfo(
32 activationDescriptor);
33
David Beckbc392452018-09-10 14:47:28 +010034 return arm_compute::NEArithmeticSubtraction::validate(&aclInput0,
35 &aclInput1,
36 &aclOutput,
Mike Kelly07810fc2020-11-12 10:58:48 +000037 arm_compute::ConvertPolicy::SATURATE,
38 activationInfo);
David Beckbc392452018-09-10 14:47:28 +010039}
40
Conor Kennedyb99480b2019-03-08 08:24:41 +000041NeonSubtractionWorkload::NeonSubtractionWorkload(const SubtractionQueueDescriptor& descriptor,
42 const WorkloadInfo& info)
Teresa Charlin588cbdf2022-01-19 15:55:37 +000043 : NeonBaseWorkload<SubtractionQueueDescriptor>(descriptor, info)
David Beckbc392452018-09-10 14:47:28 +010044{
Conor Kennedyb99480b2019-03-08 08:24:41 +000045 m_Data.ValidateInputsOutputs("NeonSubtractionWorkload", 2, 1);
David Beckbc392452018-09-10 14:47:28 +010046
Jan Eilersbb446e52020-04-02 13:56:54 +010047 arm_compute::ITensor& input1 = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
48 arm_compute::ITensor& input2 = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
49 arm_compute::ITensor& output = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
David Beckbc392452018-09-10 14:47:28 +010050
Mike Kelly07810fc2020-11-12 10:58:48 +000051 const arm_compute::ActivationLayerInfo activationInfo = ConvertAdditionalInfoToAclActivationLayerInfo(descriptor);
52
Matthew Benthamd80a7122019-01-08 17:52:37 +000053 auto layer = std::make_unique<arm_compute::NEArithmeticSubtraction>();
Mike Kelly07810fc2020-11-12 10:58:48 +000054 layer->configure(&input1, &input2, &output, arm_compute::ConvertPolicy::SATURATE, activationInfo);
Matthew Benthamd80a7122019-01-08 17:52:37 +000055 m_SubLayer.reset(layer.release());
David Beckbc392452018-09-10 14:47:28 +010056}
57
Conor Kennedyb99480b2019-03-08 08:24:41 +000058void NeonSubtractionWorkload::Execute() const
David Beckbc392452018-09-10 14:47:28 +010059{
Keith Davis2d0679f2021-08-05 11:35:00 +010060 ARMNN_SCOPED_PROFILING_EVENT_NEON_GUID("NeonSubtractionWorkload_Execute", this->GetGuid());
Matthew Benthamd80a7122019-01-08 17:52:37 +000061 m_SubLayer->run();
David Beckbc392452018-09-10 14:47:28 +010062}
63
64} //namespace armnn