blob: 2982cd181d4f6a5d764567bf37fb6a5855375936 [file] [log] [blame]
Ellen Norris-Thompson29794572019-06-26 16:40:36 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "NeonSpaceToDepthWorkload.hpp"
7#include "NeonWorkloadUtils.hpp"
Jan Eilersbb446e52020-04-02 13:56:54 +01008
9#include <armnn/utility/PolymorphicDowncast.hpp>
Ellen Norris-Thompson29794572019-06-26 16:40:36 +010010#include <ResolveType.hpp>
11
12namespace armnn
13{
14
15using namespace armcomputetensorutils;
16
17arm_compute::Status NeonSpaceToDepthWorkloadValidate(const TensorInfo& input,
18 const TensorInfo& output,
19 const SpaceToDepthDescriptor& descriptor)
20{
21 DataLayout dataLayout = descriptor.m_DataLayout;
22 const arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, dataLayout);
23 const arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, dataLayout);
24
25 int32_t blockSize = boost::numeric_cast<int32_t>(descriptor.m_BlockSize);
26
27 return arm_compute::NESpaceToDepthLayer::validate(&aclInput, &aclOutput, blockSize);
28}
29
30NeonSpaceToDepthWorkload::NeonSpaceToDepthWorkload(const SpaceToDepthQueueDescriptor& desc,
31 const WorkloadInfo& info)
32 : BaseWorkload<SpaceToDepthQueueDescriptor>(desc, info)
33{
34 m_Data.ValidateInputsOutputs("NeonSpaceToDepthWorkload", 1, 1);
35
36 arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
37
Jan Eilersbb446e52020-04-02 13:56:54 +010038 arm_compute::ITensor& input = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
Ellen Norris-Thompson29794572019-06-26 16:40:36 +010039 input.info()->set_data_layout(aclDataLayout);
40
41 int32_t blockSize = boost::numeric_cast<int32_t>(desc.m_Parameters.m_BlockSize);
42
Jan Eilersbb446e52020-04-02 13:56:54 +010043 arm_compute::ITensor& output = PolymorphicDowncast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
Ellen Norris-Thompson29794572019-06-26 16:40:36 +010044 output.info()->set_data_layout(aclDataLayout);
45
46 m_Layer.reset(new arm_compute::NESpaceToDepthLayer());
47 m_Layer->configure(&input, &output, blockSize);
48 m_Layer->prepare();
49}
50
51void NeonSpaceToDepthWorkload::Execute() const
52{
53 if (m_Layer)
54 {
55 ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonSpaceToDepthWorkload_Execute");
56 m_Layer->run();
57 }
58}
59
60} //namespace armnn