blob: e39f8aa18e1b9cd9865eb958f591ec56d245f42a [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
6#include "NeonSubtractionFloatWorkload.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
31NeonSubtractionFloatWorkload::NeonSubtractionFloatWorkload(const SubtractionQueueDescriptor& descriptor,
32 const WorkloadInfo& info)
33 : FloatWorkload<SubtractionQueueDescriptor>(descriptor, info)
34{
35 m_Data.ValidateInputsOutputs("NeonSubtractionFloatWorkload", 2, 1);
36
37 arm_compute::ITensor& input1 = boost::polymorphic_downcast<INeonTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
38 arm_compute::ITensor& input2 = boost::polymorphic_downcast<INeonTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
39 arm_compute::ITensor& output = boost::polymorphic_downcast<INeonTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
40
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
46void NeonSubtractionFloatWorkload::Execute() const
47{
48 ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonSubtractionFloatWorkload_Execute");
Matthew Benthamd80a7122019-01-08 17:52:37 +000049 m_SubLayer->run();
David Beckbc392452018-09-10 14:47:28 +010050}
51
52} //namespace armnn