blob: 05b5899bdd148e62cf96d909390f248b3aacfa1e [file] [log] [blame]
Mike Kelly56858022020-01-27 12:14:47 +00001//
Teresa Charlinca5c82a2023-03-28 11:00:36 +01002// Copyright © 2020, 2023 Arm Ltd and Contributors. All rights reserved.
Mike Kelly56858022020-01-27 12:14:47 +00003// SPDX-License-Identifier: MIT
4//
5
6#include "NeonBatchToSpaceNdWorkload.hpp"
7
8#include "NeonWorkloadUtils.hpp"
Jan Eilers3c9e0452020-04-10 13:00:44 +01009
Matthew Sloyan171214c2020-09-09 09:07:37 +010010#include <armnn/utility/NumericCast.hpp>
Jan Eilers3c9e0452020-04-10 13:00:44 +010011#include <armnn/utility/PolymorphicDowncast.hpp>
Matthew Sloyan171214c2020-09-09 09:07:37 +010012
Mike Kelly56858022020-01-27 12:14:47 +000013#include <ResolveType.hpp>
14
15namespace armnn
16{
17
18using namespace armcomputetensorutils;
19
20arm_compute::Status NeonBatchToSpaceNdWorkloadValidate(const TensorInfo& input,
21 const TensorInfo& output,
Keith Davis2d0679f2021-08-05 11:35:00 +010022 const BatchToSpaceNdDescriptor& descriptor)
Mike Kelly56858022020-01-27 12:14:47 +000023{
Keith Davis2d0679f2021-08-05 11:35:00 +010024 const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
25 const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
Mike Kelly56858022020-01-27 12:14:47 +000026
27 // ArmNN blockShape is [H, W] Cl asks for W, H
Keith Davis2d0679f2021-08-05 11:35:00 +010028 int32_t blockHeight = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[0]);
29 int32_t blockWidth = armnn::numeric_cast<int32_t>(descriptor.m_BlockShape[1]);
Mike Kelly56858022020-01-27 12:14:47 +000030
Teresa Charlinca5c82a2023-03-28 11:00:36 +010031 const arm_compute::CropInfo cropInfo = BuildArmComputeCropInfo(descriptor);
32
Mike Kelly56858022020-01-27 12:14:47 +000033 const arm_compute::Status aclStatus = arm_compute::NEBatchToSpaceLayer::validate(&aclInputInfo,
34 blockWidth,
35 blockHeight,
Teresa Charlinca5c82a2023-03-28 11:00:36 +010036 &aclOutputInfo,
37 cropInfo);
Mike Kelly56858022020-01-27 12:14:47 +000038 return aclStatus;
39}
40
Keith Davis2d0679f2021-08-05 11:35:00 +010041NeonBatchToSpaceNdWorkload::NeonBatchToSpaceNdWorkload(const BatchToSpaceNdQueueDescriptor& descriptor,
Mike Kelly56858022020-01-27 12:14:47 +000042 const WorkloadInfo& info)
Teresa Charlin588cbdf2022-01-19 15:55:37 +000043 : NeonBaseWorkload<BatchToSpaceNdQueueDescriptor>(descriptor, info)
Mike Kelly56858022020-01-27 12:14:47 +000044{
Keith Davis2d0679f2021-08-05 11:35:00 +010045 // Report Profiling Details
46 ARMNN_REPORT_PROFILING_WORKLOAD_DESC("NeonBatchToSpaceWorkload_Construct",
47 descriptor.m_Parameters,
48 info,
49 this->GetGuid());
50
Mike Kelly56858022020-01-27 12:14:47 +000051 m_Data.ValidateInputsOutputs("NeonBatchToSpaceNdWorkload", 1, 1);
52
53 arm_compute::ITensor& input =
Jan Eilers3c9e0452020-04-10 13:00:44 +010054 armnn::PolymorphicPointerDowncast<IAclTensorHandle>(m_Data.m_Inputs[0])->GetTensor();
Mike Kelly56858022020-01-27 12:14:47 +000055 arm_compute::ITensor& output =
Jan Eilers3c9e0452020-04-10 13:00:44 +010056 armnn::PolymorphicPointerDowncast<IAclTensorHandle>(m_Data.m_Outputs[0])->GetTensor();
Mike Kelly56858022020-01-27 12:14:47 +000057
58 arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
59 input.info()->set_data_layout(aclDataLayout);
60 output.info()->set_data_layout(aclDataLayout);
61
62 // ArmNN blockShape is [H, W] Cl asks for W, H
Keith Davis2d0679f2021-08-05 11:35:00 +010063 int32_t blockHeight = armnn::numeric_cast<int32_t>(descriptor.m_Parameters.m_BlockShape[0]);
64 int32_t blockWidth = armnn::numeric_cast<int32_t>(descriptor.m_Parameters.m_BlockShape[1]);
Mike Kelly56858022020-01-27 12:14:47 +000065
Teresa Charlinca5c82a2023-03-28 11:00:36 +010066 const arm_compute::CropInfo cropInfo = BuildArmComputeCropInfo(descriptor.m_Parameters);
67
Mike Kelly56858022020-01-27 12:14:47 +000068 m_Layer.reset(new arm_compute::NEBatchToSpaceLayer());
Teresa Charlinca5c82a2023-03-28 11:00:36 +010069 m_Layer->configure(&input, blockWidth, blockHeight, &output, cropInfo);
Mike Kelly56858022020-01-27 12:14:47 +000070 m_Layer->prepare();
71}
72
73void NeonBatchToSpaceNdWorkload::Execute() const
74{
75 if (m_Layer)
76 {
Keith Davis2d0679f2021-08-05 11:35:00 +010077 ARMNN_SCOPED_PROFILING_EVENT_NEON_GUID("NeonSpaceToBatchNdWorkload_Execute", this->GetGuid());
Mike Kelly56858022020-01-27 12:14:47 +000078 m_Layer->run();
79 }
80}
81
82} //namespace armnn