blob: 79645f148daab191d9bb2b6f516dd7ec92476ad0 [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
24 arm_compute::ITensor& input = static_cast<INeonTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
25 arm_compute::ITensor& output = static_cast<INeonTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
26
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
35 auto layer = std::make_unique<arm_compute::NEPadLayer>();
36 layer->configure(&input, &output, padList);
37 m_Layer.reset(layer.release());
38}
39
40void NeonPadWorkload::Execute() const
41{
42 ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonPadWorkload_Execute");
43 m_Layer->run();
44}
45
46arm_compute::Status NeonPadWorkloadValidate(const TensorInfo& input,
47 const TensorInfo& output,
48 const PadDescriptor& descriptor)
49{
50 const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
51 const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
Éanna Ó Catháin4a552012019-01-31 10:28:20 +000052
53 std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_PadList.size());
54
55 std::reverse_copy(std::begin(descriptor.m_PadList),
56 std::end(descriptor.m_PadList),
57 std::begin(reversed_PadList));
58
59 arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
Éanna Ó Catháin12055742019-01-25 10:01:40 +000060
61 return arm_compute::NEPadLayer::validate(&aclInputInfo, &aclOutputInfo, padList);
62}
63
64} // namespace armnn