ArmNN
 25.11
Loading...
Searching...
No Matches
ClPadWorkload.cpp
Go to the documentation of this file.
1//
2// Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ClPadWorkload.hpp"
7
11#include <arm_compute/core/Types.h>
12
13#include "ClWorkloadUtils.hpp"
14
15namespace armnn
16{
17using namespace armcomputetensorutils;
18
20 const WorkloadInfo& info,
21 const arm_compute::CLCompileContext& clCompileContext)
23{
24 // Report Profiling Details
25 ARMNN_REPORT_PROFILING_WORKLOAD_DESC("ClPadWorkload_Construct",
26 descriptor.m_Parameters,
27 info,
28 this->GetGuid());
29
30 this->m_Data.ValidateInputsOutputs("ClPadWorkload", 1, 1);
31
32 arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[0])->GetTensor();
33 arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
34
35 std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_Parameters.m_PadList.size());
36
37 std::reverse_copy(std::begin(descriptor.m_Parameters.m_PadList),
38 std::end(descriptor.m_Parameters.m_PadList),
39 std::begin(reversed_PadList));
40
41 arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
42
43 arm_compute::PixelValue pixelValue = GetPixelValue(input.info(), descriptor.m_Parameters.m_PadValue);
44
45 {
46 ARMNN_SCOPED_PROFILING_EVENT_CL_NAME_GUID("ClPadWorkload_configure");
47 m_Layer.configure(clCompileContext,
48 &input,
49 &output,
50 padList,
51 pixelValue,
53 }
54}
55
57{
58 ARMNN_SCOPED_PROFILING_EVENT_CL_NAME_GUID("ClPadWorkload_Execute");
59 RunClFunction(m_Layer, CHECK_LOCATION());
60}
61
62arm_compute::Status ClPadValidate(const TensorInfo& input,
63 const TensorInfo& output,
64 const PadDescriptor& descriptor)
65{
66 const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
67 const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
68
69 std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_PadList.size());
70
71 std::reverse_copy(std::begin(descriptor.m_PadList),
72 std::end(descriptor.m_PadList),
73 std::begin(reversed_PadList));
74
75 arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
76
77 // PixelValue is currently unused when validating, but it's required to pass in PaddingMode.
78 arm_compute::PixelValue pixelValue = GetPixelValue(&aclInputInfo, descriptor.m_PadValue);
79 const arm_compute::Status aclStatus =
80 arm_compute::CLPadLayer::validate(&aclInputInfo,
81 &aclOutputInfo,
82 padList,
83 pixelValue,
85
86 return aclStatus;
87}
88
89} // namespace armnn
#define ARMNN_SCOPED_PROFILING_EVENT_CL_NAME_GUID(label)
Creates a profiling event that uses GetGuid() and GetName() from the calling class.
#define CHECK_LOCATION()
#define ARMNN_REPORT_PROFILING_WORKLOAD_DESC(name, desc, infos, guid)
ClBaseWorkload(const PadQueueDescriptor &descriptor, const WorkloadInfo &info)
ClPadWorkload(const PadQueueDescriptor &descriptor, const WorkloadInfo &info, const arm_compute::CLCompileContext &clCompileContext)
void Execute() const override
Copyright (c) 2021 ARM Limited and Contributors.
void RunClFunction(arm_compute::IFunction &function, const CheckLocation &location)
arm_compute::PaddingMode ConvertPaddingModeToAcl(const PaddingMode &paddingMode)
arm_compute::Status ClPadValidate(const TensorInfo &input, const TensorInfo &output, const PadDescriptor &descriptor)
A PadDescriptor for the PadLayer.
float m_PadValue
Optional value to use for padding, defaults to 0.
PaddingMode m_PaddingMode
Specifies the Padding mode (Constant, Reflect or Symmetric)
std::vector< std::pair< unsigned int, unsigned int > > m_PadList
Specifies the padding for input dimension.
Contains information about TensorInfos of a layer.