blob: 67487c4bf114a21451c0bc01a85c3f29ce6eb7fd [file] [log] [blame]
James Conroyd2aa85e2019-07-01 17:12:40 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ClSpaceToDepthWorkload.hpp"
7#include "ClWorkloadUtils.hpp"
8
9#include <aclCommon/ArmComputeUtils.hpp>
10#include <aclCommon/ArmComputeTensorUtils.hpp>
James Conroy1f58f032021-04-27 17:13:27 +010011#include <backendsCommon/TensorHandle.hpp>
James Conroyd2aa85e2019-07-01 17:12:40 +010012#include <cl/ClTensorHandle.hpp>
James Conroyd2aa85e2019-07-01 17:12:40 +010013
Matthew Sloyan171214c2020-09-09 09:07:37 +010014#include <armnn/utility/NumericCast.hpp>
15
James Conroyd2aa85e2019-07-01 17:12:40 +010016namespace armnn
17{
18using namespace armcomputetensorutils;
19
20ClSpaceToDepthWorkload::ClSpaceToDepthWorkload(const SpaceToDepthQueueDescriptor& desc,
Sadik Armagane9444752020-12-02 11:28:58 +000021 const WorkloadInfo& info,
22 const arm_compute::CLCompileContext& clCompileContext)
James Conroyd2aa85e2019-07-01 17:12:40 +010023 : BaseWorkload<SpaceToDepthQueueDescriptor>(desc, info)
24{
25 m_Data.ValidateInputsOutputs("ClSpaceToDepthWorkload", 1, 1);
26
27 arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
28
29 arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
30 input.info()->set_data_layout(aclDataLayout);
31
Matthew Sloyan171214c2020-09-09 09:07:37 +010032 int32_t blockSize = armnn::numeric_cast<int32_t>(desc.m_Parameters.m_BlockSize);
James Conroyd2aa85e2019-07-01 17:12:40 +010033
34 arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
35 output.info()->set_data_layout(aclDataLayout);
36
Sadik Armagane9444752020-12-02 11:28:58 +000037 m_Layer.configure(clCompileContext, &input, &output, blockSize);
James Conroyd2aa85e2019-07-01 17:12:40 +010038}
39
40void ClSpaceToDepthWorkload::Execute() const
41{
42 ARMNN_SCOPED_PROFILING_EVENT_CL("ClSpaceToDepthWorkload_Execute");
43 RunClFunction(m_Layer, CHECK_LOCATION());
44}
45
46arm_compute::Status ClSpaceToDepthWorkloadValidate(const TensorInfo& input,
47 const TensorInfo& output,
48 const SpaceToDepthDescriptor& desc)
49{
50 DataLayout dataLayout = desc.m_DataLayout;
51 const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout);
52
Matthew Sloyan171214c2020-09-09 09:07:37 +010053 int32_t blockSize = armnn::numeric_cast<int32_t>(desc.m_BlockSize);
James Conroyd2aa85e2019-07-01 17:12:40 +010054
55 const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout);
56
57 const arm_compute::Status aclStatus = arm_compute::CLSpaceToDepthLayer::validate(&aclInputInfo,
58 &aclOutputInfo,
59 blockSize);
60 return aclStatus;
61}
62
63} //namespace armnn