blob: f4b47076335341b746ee07b518e37e247ddfb974 [file] [log] [blame]
David Beckbc392452018-09-10 14:47:28 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// 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"
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00009#include <aclCommon/ArmComputeTensorUtils.hpp>
10#include <backendsCommon/CpuTensorHandle.hpp>
David Beckbc392452018-09-10 14:47:28 +010011
Matthew Benthamd80a7122019-01-08 17:52:37 +000012#include <arm_compute/runtime/NEON/functions/NEArithmeticSubtraction.h>
13
David Beckbc392452018-09-10 14:47:28 +010014namespace armnn
15{
16
17arm_compute::Status NeonSubtractionWorkloadValidate(const TensorInfo& input0,
18 const TensorInfo& input1,
19 const TensorInfo& output)
20{
21 const arm_compute::TensorInfo aclInput0 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);
22 const arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);
23 const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
24
25 return arm_compute::NEArithmeticSubtraction::validate(&aclInput0,
26 &aclInput1,
27 &aclOutput,
28 arm_compute::ConvertPolicy::SATURATE);
29}
30
Conor Kennedyb99480b2019-03-08 08:24:41 +000031NeonSubtractionWorkload::NeonSubtractionWorkload(const SubtractionQueueDescriptor& descriptor,
32 const WorkloadInfo& info)
33 : BaseWorkload<SubtractionQueueDescriptor>(descriptor, info)
David Beckbc392452018-09-10 14:47:28 +010034{
Conor Kennedyb99480b2019-03-08 08:24:41 +000035 m_Data.ValidateInputsOutputs("NeonSubtractionWorkload", 2, 1);
David Beckbc392452018-09-10 14:47:28 +010036
Derek Lambertic81855f2019-06-13 17:34:19 +010037 arm_compute::ITensor& input1 = boost::polymorphic_downcast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
38 arm_compute::ITensor& input2 = boost::polymorphic_downcast<IAclTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
39 arm_compute::ITensor& output = boost::polymorphic_downcast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
David Beckbc392452018-09-10 14:47:28 +010040
Matthew Benthamd80a7122019-01-08 17:52:37 +000041 auto layer = std::make_unique<arm_compute::NEArithmeticSubtraction>();
42 layer->configure(&input1, &input2, &output, arm_compute::ConvertPolicy::SATURATE);
43 m_SubLayer.reset(layer.release());
David Beckbc392452018-09-10 14:47:28 +010044}
45
Conor Kennedyb99480b2019-03-08 08:24:41 +000046void NeonSubtractionWorkload::Execute() const
David Beckbc392452018-09-10 14:47:28 +010047{
Conor Kennedyb99480b2019-03-08 08:24:41 +000048 ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonSubtractionWorkload_Execute");
Matthew Benthamd80a7122019-01-08 17:52:37 +000049 m_SubLayer->run();
David Beckbc392452018-09-10 14:47:28 +010050}
51
52} //namespace armnn