blob: 46975102db6a7f7f3172d1118029399c76b5d0ac [file] [log] [blame]
jimfly01e1fa50c2018-09-21 12:09:51 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ClPadWorkload.hpp"
7
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00008#include <cl/ClTensorHandle.hpp>
9#include <aclCommon/ArmComputeTensorUtils.hpp>
jimfly01e1fa50c2018-09-21 12:09:51 +010010#include <arm_compute/core/Types.h>
11
David Beckac42efd2018-09-26 17:41:13 +010012#include "ClWorkloadUtils.hpp"
13
jimfly01e1fa50c2018-09-21 12:09:51 +010014namespace armnn
15{
16using namespace armcomputetensorutils;
17
Sadik Armagane9444752020-12-02 11:28:58 +000018ClPadWorkload::ClPadWorkload(const PadQueueDescriptor& descriptor,
19 const WorkloadInfo& info,
20 const arm_compute::CLCompileContext& clCompileContext)
Nattapat Chaimanowong4e00a3d2018-10-09 17:05:24 +010021 : BaseWorkload<PadQueueDescriptor>(descriptor, info)
jimfly01e1fa50c2018-09-21 12:09:51 +010022{
Keith Davisbcd860a2021-08-05 14:20:33 +010023 // Report Profiling Details
24 ARMNN_REPORT_PROFILING_WORKLOAD_DESC("ClPadWorkload_Construct",
25 descriptor.m_Parameters,
26 info,
27 this->GetGuid());
28
jimfly01e1fa50c2018-09-21 12:09:51 +010029 this->m_Data.ValidateInputsOutputs("ClPadWorkload", 1, 1);
30
31 arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[0])->GetTensor();
32 arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +010033
34 std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_Parameters.m_PadList.size());
35
36 std::reverse_copy(std::begin(descriptor.m_Parameters.m_PadList),
37 std::end(descriptor.m_Parameters.m_PadList),
38 std::begin(reversed_PadList));
39
40 arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
jimfly01e1fa50c2018-09-21 12:09:51 +010041
Matthew Sloyan2e5d0b22021-10-21 14:05:31 +010042 arm_compute::PixelValue pixelValue = GetPixelValue(input.info(), descriptor.m_Parameters.m_PadValue);
FinnWilliamsArmab801622019-07-09 14:46:28 +010043
Sadik Armagane9444752020-12-02 11:28:58 +000044 m_Layer.configure(clCompileContext, &input, &output, padList, pixelValue);
jimfly01e1fa50c2018-09-21 12:09:51 +010045}
46
Nattapat Chaimanowong4e00a3d2018-10-09 17:05:24 +010047void ClPadWorkload::Execute() const
jimfly01e1fa50c2018-09-21 12:09:51 +010048{
Keith Davisbcd860a2021-08-05 14:20:33 +010049 ARMNN_SCOPED_PROFILING_EVENT_CL_GUID("ClPadWorkload_Execute", this->GetGuid());
Aron Virginas-Tara8e06ed2018-10-19 16:46:15 +010050 RunClFunction(m_Layer, CHECK_LOCATION());
jimfly01e1fa50c2018-09-21 12:09:51 +010051}
52
arovir01085f0a42018-10-08 14:48:19 +010053arm_compute::Status ClPadValidate(const TensorInfo& input,
54 const TensorInfo& output,
55 const PadDescriptor& descriptor)
jimfly01e1fa50c2018-09-21 12:09:51 +010056{
57 const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
58 const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
Éanna Ó Catháind0a16082019-01-14 15:50:08 +000059
60 std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_PadList.size());
61
62 std::reverse_copy(std::begin(descriptor.m_PadList),
63 std::end(descriptor.m_PadList),
64 std::begin(reversed_PadList));
65
66 arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
jimfly01e1fa50c2018-09-21 12:09:51 +010067
68 const arm_compute::Status aclStatus = arm_compute::CLPadLayer::validate(&aclInputInfo,
69 &aclOutputInfo,
70 padList);
71
arovir01085f0a42018-10-08 14:48:19 +010072 return aclStatus;
jimfly01e1fa50c2018-09-21 12:09:51 +010073}
74
75} // namespace armnn