blob: 4b2169a6eef39af95731a5dae78eaa2bbba48a6c [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"
Jan Eilersbb446e52020-04-02 13:56:54 +01008
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00009#include <aclCommon/ArmComputeUtils.hpp>
Jan Eilersbb446e52020-04-02 13:56:54 +010010#include <armnn/utility/PolymorphicDowncast.hpp>
telsoa014fcda012018-03-09 14:13:49 +000011
Matthew Benthamd80a7122019-01-08 17:52:37 +000012#include <arm_compute/runtime/NEON/functions/NEActivationLayer.h>
13
telsoa014fcda012018-03-09 14:13:49 +000014namespace armnn
15{
telsoa01c577f2c2018-08-31 09:22:23 +010016
17arm_compute::Status NeonActivationWorkloadValidate(const TensorInfo& input,
18 const TensorInfo& output,
19 const ActivationDescriptor& descriptor)
20{
21 const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
22 const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
23
24 const arm_compute::ActivationLayerInfo activationLayerInfo =
25 ConvertActivationDescriptorToAclActivationLayerInfo(descriptor);
26
telsoa01c577f2c2018-08-31 09:22:23 +010027 return arm_compute::NEActivationLayer::validate(&aclInput,
28 &aclOutput,
29 activationLayerInfo);
30}
31
Nattapat Chaimanowongd4b70592018-10-12 11:21:49 +010032NeonActivationWorkload::NeonActivationWorkload(const ActivationQueueDescriptor& descriptor,
33 const WorkloadInfo& info)
34 : BaseWorkload<ActivationQueueDescriptor>(descriptor, info)
telsoa014fcda012018-03-09 14:13:49 +000035{
Nattapat Chaimanowongd4b70592018-10-12 11:21:49 +010036 m_Data.ValidateInputsOutputs("NeonActivationWorkload", 1, 1);
telsoa014fcda012018-03-09 14:13:49 +000037
38 const arm_compute::ActivationLayerInfo activationLayerInfo =
39 ConvertActivationDescriptorToAclActivationLayerInfo(m_Data.m_Parameters);
40
Jan Eilersbb446e52020-04-02 13:56:54 +010041 arm_compute::ITensor& input = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
42 arm_compute::ITensor& output = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
telsoa014fcda012018-03-09 14:13:49 +000043
Matthew Benthamd80a7122019-01-08 17:52:37 +000044 auto layer = std::make_unique<arm_compute::NEActivationLayer>();
45 layer->configure(&input, &output, activationLayerInfo);
46
47 m_ActivationLayer.reset(layer.release());
telsoa014fcda012018-03-09 14:13:49 +000048}
49
Nattapat Chaimanowongd4b70592018-10-12 11:21:49 +010050void NeonActivationWorkload::Execute() const
telsoa014fcda012018-03-09 14:13:49 +000051{
Nattapat Chaimanowongd4b70592018-10-12 11:21:49 +010052 ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonActivationWorkload_Execute");
Matthew Benthamd80a7122019-01-08 17:52:37 +000053 m_ActivationLayer->run();
telsoa014fcda012018-03-09 14:13:49 +000054}
55
56} //namespace armnn