blob: 916d67449ce4ca3733beb51d06713a4c2b170e60 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5
Nattapat Chaimanowongd4b70592018-10-12 11:21:49 +01006#include "NeonActivationWorkload.hpp"
Matthew Benthamd80a7122019-01-08 17:52:37 +00007#include "NeonWorkloadUtils.hpp"
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00008#include <aclCommon/ArmComputeUtils.hpp>
telsoa014fcda012018-03-09 14:13:49 +00009
Matthew Benthamd80a7122019-01-08 17:52:37 +000010#include <arm_compute/runtime/NEON/functions/NEActivationLayer.h>
11
telsoa014fcda012018-03-09 14:13:49 +000012namespace armnn
13{
telsoa01c577f2c2018-08-31 09:22:23 +010014
15arm_compute::Status NeonActivationWorkloadValidate(const TensorInfo& input,
16 const TensorInfo& output,
17 const ActivationDescriptor& descriptor)
18{
19 const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
20 const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
21
22 const arm_compute::ActivationLayerInfo activationLayerInfo =
23 ConvertActivationDescriptorToAclActivationLayerInfo(descriptor);
24
telsoa01c577f2c2018-08-31 09:22:23 +010025 return arm_compute::NEActivationLayer::validate(&aclInput,
26 &aclOutput,
27 activationLayerInfo);
28}
29
Nattapat Chaimanowongd4b70592018-10-12 11:21:49 +010030NeonActivationWorkload::NeonActivationWorkload(const ActivationQueueDescriptor& descriptor,
31 const WorkloadInfo& info)
32 : BaseWorkload<ActivationQueueDescriptor>(descriptor, info)
telsoa014fcda012018-03-09 14:13:49 +000033{
Nattapat Chaimanowongd4b70592018-10-12 11:21:49 +010034 m_Data.ValidateInputsOutputs("NeonActivationWorkload", 1, 1);
telsoa014fcda012018-03-09 14:13:49 +000035
36 const arm_compute::ActivationLayerInfo activationLayerInfo =
37 ConvertActivationDescriptorToAclActivationLayerInfo(m_Data.m_Parameters);
38
Derek Lambertic81855f2019-06-13 17:34:19 +010039 arm_compute::ITensor& input = boost::polymorphic_downcast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
40 arm_compute::ITensor& output = boost::polymorphic_downcast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
telsoa014fcda012018-03-09 14:13:49 +000041
Matthew Benthamd80a7122019-01-08 17:52:37 +000042 auto layer = std::make_unique<arm_compute::NEActivationLayer>();
43 layer->configure(&input, &output, activationLayerInfo);
44
45 m_ActivationLayer.reset(layer.release());
telsoa014fcda012018-03-09 14:13:49 +000046}
47
Nattapat Chaimanowongd4b70592018-10-12 11:21:49 +010048void NeonActivationWorkload::Execute() const
telsoa014fcda012018-03-09 14:13:49 +000049{
Nattapat Chaimanowongd4b70592018-10-12 11:21:49 +010050 ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonActivationWorkload_Execute");
Matthew Benthamd80a7122019-01-08 17:52:37 +000051 m_ActivationLayer->run();
telsoa014fcda012018-03-09 14:13:49 +000052}
53
54} //namespace armnn