blob: c515942b30785f1fb1efb8be8d9cb1528eb65e05 [file] [log] [blame]
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +01001//
Mike Kelly7cbe7812023-07-25 17:37:33 +01002// Copyright © 2018-2023 Arm Ltd and Contributors. All rights reserved.
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +01003// SPDX-License-Identifier: MIT
4//
5
6#include "RefPadWorkload.hpp"
7
Matthew Sloyan2e5d0b22021-10-21 14:05:31 +01008#include "MirrorPad.hpp"
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +01009#include "Pad.hpp"
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +010010#include "Profiling.hpp"
Sadik Armagan041b3c02020-06-04 10:32:18 +010011#include "RefWorkloadUtils.hpp"
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +010012
13namespace armnn
14{
15
Sadik Armagan041b3c02020-06-04 10:32:18 +010016void RefPadWorkload::Execute() const
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +010017{
Finn Williamsb8181f72021-04-07 10:23:21 +010018 Execute(m_Data.m_Inputs, m_Data.m_Outputs);
19}
20
Matthew Sloyan2d213a72022-06-30 17:13:04 +010021void RefPadWorkload::ExecuteAsync(ExecutionData& executionData)
Finn Williamsb8181f72021-04-07 10:23:21 +010022{
Matthew Sloyan2d213a72022-06-30 17:13:04 +010023 WorkingMemDescriptor* workingMemDescriptor = static_cast<WorkingMemDescriptor*>(executionData.m_Data);
24 Execute(workingMemDescriptor->m_Inputs, workingMemDescriptor->m_Outputs);
Finn Williamsb8181f72021-04-07 10:23:21 +010025}
26
27void RefPadWorkload::Execute(std::vector<ITensorHandle*> inputs, std::vector<ITensorHandle*> outputs) const
28{
Mike Kelly7cbe7812023-07-25 17:37:33 +010029 ARMNN_SCOPED_PROFILING_EVENT_REF_NAME_GUID("RefPadWorkload_Execute");
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +010030
Finn Williamsb8181f72021-04-07 10:23:21 +010031 const TensorInfo& inputInfo = GetTensorInfo(inputs[0]);
32 const TensorInfo& outputInfo = GetTensorInfo(outputs[0]);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +010033
Matthew Sloyan2e5d0b22021-10-21 14:05:31 +010034 PaddingMode paddingMode = m_Data.m_Parameters.m_PaddingMode;
35 if (paddingMode == PaddingMode::Constant)
36 {
37 armnn::Pad(inputInfo, outputInfo, inputs[0], outputs[0], m_Data);
38 }
39 else if(paddingMode == PaddingMode::Reflect || paddingMode == PaddingMode::Symmetric)
40 {
41 armnn::MirrorPad(inputInfo, outputInfo, inputs[0], outputs[0], m_Data);
42 }
43 else
44 {
45 throw InvalidArgumentException("Padding mode not supported.");
46 }
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +010047}
48
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +010049} //namespace armnn