blob: 3e63d5c2106feffa737f29957b905fcf790ffb98 [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
David Beckac42efd2018-09-26 17:41:13 +01008#include <backends/cl/ClTensorHandle.hpp>
9#include <backends/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
Nattapat Chaimanowong4e00a3d2018-10-09 17:05:24 +010018ClPadWorkload::ClPadWorkload(const PadQueueDescriptor& descriptor, const WorkloadInfo& info)
19 : BaseWorkload<PadQueueDescriptor>(descriptor, info)
jimfly01e1fa50c2018-09-21 12:09:51 +010020{
21 this->m_Data.ValidateInputsOutputs("ClPadWorkload", 1, 1);
22
23 arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[0])->GetTensor();
24 arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +010025
26 std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_Parameters.m_PadList.size());
27
28 std::reverse_copy(std::begin(descriptor.m_Parameters.m_PadList),
29 std::end(descriptor.m_Parameters.m_PadList),
30 std::begin(reversed_PadList));
31
32 arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
jimfly01e1fa50c2018-09-21 12:09:51 +010033
34 m_Layer.configure(&input, &output, padList);
35}
36
Nattapat Chaimanowong4e00a3d2018-10-09 17:05:24 +010037void ClPadWorkload::Execute() const
jimfly01e1fa50c2018-09-21 12:09:51 +010038{
39 ARMNN_SCOPED_PROFILING_EVENT_CL("ClPadWorkload_Execute");
40 m_Layer.run();
41}
42
arovir01085f0a42018-10-08 14:48:19 +010043arm_compute::Status ClPadValidate(const TensorInfo& input,
44 const TensorInfo& output,
45 const PadDescriptor& descriptor)
jimfly01e1fa50c2018-09-21 12:09:51 +010046{
47 const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
48 const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
49 arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(descriptor.m_PadList);
50
51 const arm_compute::Status aclStatus = arm_compute::CLPadLayer::validate(&aclInputInfo,
52 &aclOutputInfo,
53 padList);
54
arovir01085f0a42018-10-08 14:48:19 +010055 return aclStatus;
jimfly01e1fa50c2018-09-21 12:09:51 +010056}
57
58} // namespace armnn