blob: 6bc11766f1bf02532588a20039656b09b84a30fa [file] [log] [blame]
Éanna Ó Catháin12055742019-01-25 10:01:40 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "NeonPadWorkload.hpp"
7
8#include <neon/NeonTensorHandle.hpp>
9#include <aclCommon/ArmComputeTensorUtils.hpp>
10#include <arm_compute/core/Types.h>
11#include <arm_compute/runtime/NEON/functions/NEPadLayer.h>
12
13#include "NeonWorkloadUtils.hpp"
14
15namespace armnn
16{
17using namespace armcomputetensorutils;
18
19NeonPadWorkload::NeonPadWorkload(const PadQueueDescriptor& descriptor, const WorkloadInfo& info)
20 : BaseWorkload<PadQueueDescriptor>(descriptor, info)
21{
22 m_Data.ValidateInputsOutputs("NeonPadWorkload", 1, 1);
23
Derek Lambertic81855f2019-06-13 17:34:19 +010024 arm_compute::ITensor& input = static_cast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
25 arm_compute::ITensor& output = static_cast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
Éanna Ó Catháin12055742019-01-25 10:01:40 +000026
27 std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_Parameters.m_PadList.size());
28
29 std::reverse_copy(std::begin(descriptor.m_Parameters.m_PadList),
30 std::end(descriptor.m_Parameters.m_PadList),
31 std::begin(reversed_PadList));
32
33 arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
34
FinnWilliamsArma5b5bbf2019-07-08 14:11:33 +010035 arm_compute::PixelValue pixelValue = descriptor.m_Parameters.m_PadValue;
36
Éanna Ó Catháin12055742019-01-25 10:01:40 +000037 auto layer = std::make_unique<arm_compute::NEPadLayer>();
FinnWilliamsArma5b5bbf2019-07-08 14:11:33 +010038 layer->configure(&input, &output, padList, pixelValue);
Éanna Ó Catháin12055742019-01-25 10:01:40 +000039 m_Layer.reset(layer.release());
40}
41
42void NeonPadWorkload::Execute() const
43{
44 ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonPadWorkload_Execute");
45 m_Layer->run();
46}
47
48arm_compute::Status NeonPadWorkloadValidate(const TensorInfo& input,
49 const TensorInfo& output,
50 const PadDescriptor& descriptor)
51{
52 const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
53 const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
Éanna Ó Catháin4a552012019-01-31 10:28:20 +000054
55 std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_PadList.size());
56
57 std::reverse_copy(std::begin(descriptor.m_PadList),
58 std::end(descriptor.m_PadList),
59 std::begin(reversed_PadList));
60
61 arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
Éanna Ó Catháin12055742019-01-25 10:01:40 +000062
63 return arm_compute::NEPadLayer::validate(&aclInputInfo, &aclOutputInfo, padList);
64}
65
66} // namespace armnn