aboutsummaryrefslogtreecommitdiff
path: root/src/backends
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2020-10-08 11:42:30 +0100
committerJim Flynn <jim.flynn@arm.com>2020-10-08 14:24:58 +0000
commit3a40ea5e1efd61ebb21a174ef7bf9adecac8ade9 (patch)
tree2bc713946514f7c3d551641a66bee30dd2a4a7c8 /src/backends
parente7ba17ec386ac5e6ddca02f49e9b8e06faa95d4e (diff)
downloadarmnn-3a40ea5e1efd61ebb21a174ef7bf9adecac8ade9.tar.gz
IVGCVSW-5363 Add Unmap layer and Unmap workload
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com> Signed-off-by: Jim Flynn <jim.flynn@arm.com> Change-Id: Ie5ecfa67e4763d0c058905592fe2e2fd7315f85c
Diffstat (limited to 'src/backends')
-rw-r--r--src/backends/backendsCommon/CMakeLists.txt2
-rw-r--r--src/backends/backendsCommon/UnmapWorkload.cpp22
-rw-r--r--src/backends/backendsCommon/UnmapWorkload.hpp19
-rw-r--r--src/backends/backendsCommon/WorkloadData.cpp20
-rw-r--r--src/backends/backendsCommon/WorkloadData.hpp5
-rw-r--r--src/backends/backendsCommon/common.mk1
-rw-r--r--src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp27
7 files changed, 94 insertions, 2 deletions
diff --git a/src/backends/backendsCommon/CMakeLists.txt b/src/backends/backendsCommon/CMakeLists.txt
index 28b3088e48..cf6da807ca 100644
--- a/src/backends/backendsCommon/CMakeLists.txt
+++ b/src/backends/backendsCommon/CMakeLists.txt
@@ -34,6 +34,8 @@ list(APPEND armnnBackendsCommon_sources
OptimizationViews.hpp
TensorHandleFactoryRegistry.cpp
TensorHandleFactoryRegistry.hpp
+ UnmapWorkload.cpp
+ UnmapWorkload.hpp
WorkloadDataCollector.hpp
Workload.hpp
WorkloadData.cpp
diff --git a/src/backends/backendsCommon/UnmapWorkload.cpp b/src/backends/backendsCommon/UnmapWorkload.cpp
new file mode 100644
index 0000000000..b22158cf9f
--- /dev/null
+++ b/src/backends/backendsCommon/UnmapWorkload.cpp
@@ -0,0 +1,22 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <backendsCommon/UnmapWorkload.hpp>
+
+namespace armnn
+{
+
+UnmapWorkload::UnmapWorkload(const UnmapQueueDescriptor& descriptor,
+ const WorkloadInfo& info)
+ : BaseWorkload<UnmapQueueDescriptor>(descriptor, info)
+{
+}
+
+void UnmapWorkload::Execute() const
+{
+ m_Data.m_Inputs[0]->Unmap();
+}
+
+} //namespace armnn
diff --git a/src/backends/backendsCommon/UnmapWorkload.hpp b/src/backends/backendsCommon/UnmapWorkload.hpp
new file mode 100644
index 0000000000..7f13f0d295
--- /dev/null
+++ b/src/backends/backendsCommon/UnmapWorkload.hpp
@@ -0,0 +1,19 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include "Workload.hpp"
+
+namespace armnn
+{
+
+class UnmapWorkload : public BaseWorkload<UnmapQueueDescriptor>
+{
+public:
+ UnmapWorkload(const UnmapQueueDescriptor& descriptor, const WorkloadInfo& info);
+ void Execute() const override;
+};
+
+} //namespace armnn
diff --git a/src/backends/backendsCommon/WorkloadData.cpp b/src/backends/backendsCommon/WorkloadData.cpp
index 134495991e..6d88664728 100644
--- a/src/backends/backendsCommon/WorkloadData.cpp
+++ b/src/backends/backendsCommon/WorkloadData.cpp
@@ -469,7 +469,25 @@ void MapQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const
const std::string descriptorName{"MapQueueDescriptor"};
ValidateNumInputs(workloadInfo, descriptorName, 1);
- ValidateNumOutputs(workloadInfo, descriptorName , 0);
+ ValidateNumOutputs(workloadInfo, descriptorName, 0);
+
+ for (unsigned int i = 0; i < m_Inputs.size(); ++i)
+ {
+ if (!m_Inputs[i])
+ {
+ throw InvalidArgumentException(
+ fmt::format("{}: Invalid NULL input {}.", descriptorName, static_cast<int>(i)));
+ }
+ }
+}
+
+//---------------------------------------------------------------
+void UnmapQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const
+{
+ const std::string descriptorName{"UnmapQueueDescriptor"};
+
+ ValidateNumInputs(workloadInfo, descriptorName, 1);
+ ValidateNumOutputs(workloadInfo, descriptorName, 0);
for (unsigned int i = 0; i < m_Inputs.size(); ++i)
{
diff --git a/src/backends/backendsCommon/WorkloadData.hpp b/src/backends/backendsCommon/WorkloadData.hpp
index be0a67e753..c563626b28 100644
--- a/src/backends/backendsCommon/WorkloadData.hpp
+++ b/src/backends/backendsCommon/WorkloadData.hpp
@@ -60,6 +60,11 @@ struct MapQueueDescriptor : QueueDescriptor
void Validate(const WorkloadInfo& workloadInfo) const;
};
+struct UnmapQueueDescriptor : QueueDescriptor
+{
+ void Validate(const WorkloadInfo& workloadInfo) const;
+};
+
struct MemCopyQueueDescriptor : QueueDescriptor
{
void Validate(const WorkloadInfo& workloadInfo) const;
diff --git a/src/backends/backendsCommon/common.mk b/src/backends/backendsCommon/common.mk
index ceec2ac6e1..dd47d0a31f 100644
--- a/src/backends/backendsCommon/common.mk
+++ b/src/backends/backendsCommon/common.mk
@@ -20,6 +20,7 @@ COMMON_SOURCES := \
MemSyncWorkload.cpp \
OptimizationViews.cpp \
TensorHandleFactoryRegistry.cpp \
+ UnmapWorkload.cpp \
WorkloadData.cpp \
WorkloadFactory.cpp \
WorkloadUtils.cpp
diff --git a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp
index 1078c2a8d7..a8465b45f6 100644
--- a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp
+++ b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp
@@ -7,6 +7,7 @@
#include <Graph.hpp>
#include <backendsCommon/MapWorkload.hpp>
+#include <backendsCommon/UnmapWorkload.hpp>
#include <backendsCommon/WorkloadFactory.hpp>
#include <armnn/utility/IgnoreUnused.hpp>
@@ -214,6 +215,22 @@ struct DummyLayer<armnn::SplitterLayer>
armnn::SplitterLayer* m_Layer;
};
+template<>
+struct DummyLayer<armnn::UnmapLayer, void>
+{
+ DummyLayer()
+ {
+ m_Layer = dummyGraph.AddLayer<armnn::UnmapLayer>("");
+ }
+
+ ~DummyLayer()
+ {
+ dummyGraph.EraseLayer(m_Layer);
+ }
+
+ armnn::UnmapLayer* m_Layer;
+};
+
template <typename ConvolutionLayerType>
struct DummyConvolutionLayer
{
@@ -628,7 +645,6 @@ DECLARE_LAYER_POLICY_2_PARAM(Pooling2d)
DECLARE_LAYER_POLICY_2_PARAM(PreCompiled)
DECLARE_LAYER_POLICY_1_PARAM(Prelu)
-
DECLARE_LAYER_POLICY_2_PARAM(QLstm)
DECLARE_LAYER_POLICY_1_PARAM(QuantizedLstm)
@@ -665,6 +681,8 @@ DECLARE_LAYER_POLICY_2_PARAM(Transpose)
DECLARE_LAYER_POLICY_2_PARAM(TransposeConvolution2d)
+DECLARE_LAYER_POLICY_MAP_PARAM(Unmap, void)
+
// Generic implementation to get the number of input slots for a given layer type;
template<armnn::LayerType Type>
@@ -798,6 +816,13 @@ bool IsLayerSupportedTest(FactoryType *factory, Tag<armnn::LayerType::Map>)
return true;
}
+template<typename FactoryType, armnn::DataType DataType, armnn::LayerType Type>
+bool IsLayerSupportedTest(FactoryType *factory, Tag<armnn::LayerType::Unmap>)
+{
+ IgnoreUnused(factory);
+ return true;
+}
+
// Helper function to compute the next type in the LayerType enum.
constexpr armnn::LayerType NextType(armnn::LayerType type)
{