aboutsummaryrefslogtreecommitdiff
path: root/src/armnn
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/armnn
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/armnn')
-rw-r--r--src/armnn/InternalTypes.hpp5
-rw-r--r--src/armnn/LayersFwd.hpp2
-rw-r--r--src/armnn/layers/UnmapLayer.cpp49
-rw-r--r--src/armnn/layers/UnmapLayer.hpp42
4 files changed, 96 insertions, 2 deletions
diff --git a/src/armnn/InternalTypes.hpp b/src/armnn/InternalTypes.hpp
index e95a63af45..778408ae60 100644
--- a/src/armnn/InternalTypes.hpp
+++ b/src/armnn/InternalTypes.hpp
@@ -74,7 +74,8 @@
X(Subtraction) \
X(Switch) \
X(Transpose) \
- X(TransposeConvolution2d)
+ X(TransposeConvolution2d) \
+ X(Unmap)
/// When adding a new layer, adapt also the LastLayer enum value in the
/// enum class LayerType below
@@ -87,7 +88,7 @@ enum class LayerType
LIST_OF_LAYER_TYPE
#undef X
FirstLayer = Activation,
- LastLayer = TransposeConvolution2d
+ LastLayer = Unmap
};
const char* GetLayerTypeAsCString(LayerType type);
diff --git a/src/armnn/LayersFwd.hpp b/src/armnn/LayersFwd.hpp
index f22110d3ac..ccc5ef2b4c 100644
--- a/src/armnn/LayersFwd.hpp
+++ b/src/armnn/LayersFwd.hpp
@@ -69,6 +69,7 @@
#include "layers/SwitchLayer.hpp"
#include "layers/TransposeConvolution2dLayer.hpp"
#include "layers/TransposeLayer.hpp"
+#include "layers/UnmapLayer.hpp"
namespace armnn
{
@@ -160,5 +161,6 @@ DECLARE_LAYER(Subtraction)
DECLARE_LAYER(Switch)
DECLARE_LAYER(Transpose)
DECLARE_LAYER(TransposeConvolution2d)
+DECLARE_LAYER(Unmap)
}
diff --git a/src/armnn/layers/UnmapLayer.cpp b/src/armnn/layers/UnmapLayer.cpp
new file mode 100644
index 0000000000..d2df9c1bc6
--- /dev/null
+++ b/src/armnn/layers/UnmapLayer.cpp
@@ -0,0 +1,49 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#include "UnmapLayer.hpp"
+
+#include "LayerCloneBase.hpp"
+
+#include <armnn/TypesUtils.hpp>
+#include <backendsCommon/WorkloadData.hpp>
+#include <backendsCommon/WorkloadFactory.hpp>
+#include <backendsCommon/UnmapWorkload.hpp>
+
+namespace armnn
+{
+
+UnmapLayer::UnmapLayer(const char* name)
+ : Layer(1, 0, LayerType::Unmap, name)
+{
+}
+
+UnmapLayer* UnmapLayer::Clone(Graph& graph) const
+{
+ return CloneBase<UnmapLayer>(graph, GetName());
+}
+
+std::unique_ptr<IWorkload> UnmapLayer::CreateWorkload(const IWorkloadFactory& factory) const
+{
+ IgnoreUnused(factory);
+ UnmapQueueDescriptor descriptor;
+
+ //This is different from other workloads. Does not get created by the workload factory.
+ return std::make_unique<UnmapWorkload>(descriptor, PrepInfoAndDesc(descriptor));
+}
+
+void UnmapLayer::ValidateTensorShapesFromInputs()
+{
+ // validates that the input is connected.
+ VerifyLayerConnections(1, CHECK_LOCATION());
+ ARMNN_ASSERT(GetNumOutputSlots() == 0);
+}
+
+void UnmapLayer::Accept(ILayerVisitor& visitor) const
+{
+ IgnoreUnused(visitor);
+ throw armnn::Exception("UnmapLayer should not appear in an input graph");
+}
+
+} // namespace armnn
diff --git a/src/armnn/layers/UnmapLayer.hpp b/src/armnn/layers/UnmapLayer.hpp
new file mode 100644
index 0000000000..12d4342d62
--- /dev/null
+++ b/src/armnn/layers/UnmapLayer.hpp
@@ -0,0 +1,42 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <Layer.hpp>
+
+namespace armnn
+{
+
+/// This layer represents a memory copy operation.
+class UnmapLayer : public Layer
+{
+public:
+ /// Makes a workload for the Unmap type.
+ /// @param [in] graph The graph where this layer can be found.
+ /// @param [in] factory The workload factory which will create the workload.
+ /// @return A pointer to the created workload, or nullptr if not created.
+ virtual std::unique_ptr<IWorkload>CreateWorkload(const IWorkloadFactory& factory) const override;
+
+ /// Creates a dynamically-allocated copy of this layer.
+ /// @param [in] graph The graph into which this layer is being cloned.
+ UnmapLayer* Clone(Graph& graph) const override;
+
+ /// Check if the input tensor shape(s)
+ /// will lead to a valid configuration of @ref UnmapLayer.
+ /// @param [in] shapeInferenceMethod Indicates if output shape shall be overwritten or just validated.
+ void ValidateTensorShapesFromInputs() override;
+
+ void Accept(ILayerVisitor& visitor) const override;
+
+protected:
+ /// Constructor to create a UnmapLayer.
+ /// @param [in] name Optional name for the layer.
+ UnmapLayer(const char* name);
+
+ /// Default destructor
+ ~UnmapLayer() = default;
+};
+
+} // namespace