aboutsummaryrefslogtreecommitdiff
path: root/src/armnn
diff options
context:
space:
mode:
authorkevmay01 <kevin.may@arm.com>2018-11-29 08:40:19 +0000
committerkevmay01 <kevin.may@arm.com>2018-11-29 08:40:19 +0000
commit90539697433b507e20cf0d56f6c7f18614e03973 (patch)
tree604fb0d27451fbc8a212a78a5a83b54a474db8ad /src/armnn
parentd57415d9a2117da9cc5c58f8b5e39ba7455417d1 (diff)
downloadarmnn-90539697433b507e20cf0d56f6c7f18614e03973.tar.gz
IVGCVSW-2245 Add Minimum Layer and no-op Factory implementation
Change-Id: I03fa374fd9692d98257de709f8c3ad0a49c88b95
Diffstat (limited to 'src/armnn')
-rw-r--r--src/armnn/InternalTypes.cpp1
-rw-r--r--src/armnn/InternalTypes.hpp1
-rw-r--r--src/armnn/LayerSupport.cpp10
-rw-r--r--src/armnn/LayersFwd.hpp2
-rw-r--r--src/armnn/Network.cpp5
-rw-r--r--src/armnn/Network.hpp2
-rw-r--r--src/armnn/layers/MinimumLayer.cpp33
-rw-r--r--src/armnn/layers/MinimumLayer.hpp27
8 files changed, 81 insertions, 0 deletions
diff --git a/src/armnn/InternalTypes.cpp b/src/armnn/InternalTypes.cpp
index 37c63fd92a..0b6c777546 100644
--- a/src/armnn/InternalTypes.cpp
+++ b/src/armnn/InternalTypes.cpp
@@ -34,6 +34,7 @@ char const* GetLayerTypeAsCString(LayerType type)
case LayerType::Mean: return "Mean";
case LayerType::MemCopy: return "MemCopy";
case LayerType::Merger: return "Merger";
+ case LayerType::Minimum: return "Minimum";
case LayerType::Multiplication: return "Multiplication";
case LayerType::Normalization: return "Normalization";
case LayerType::Output: return "Output";
diff --git a/src/armnn/InternalTypes.hpp b/src/armnn/InternalTypes.hpp
index 989718b0f7..df8bb737e7 100644
--- a/src/armnn/InternalTypes.hpp
+++ b/src/armnn/InternalTypes.hpp
@@ -34,6 +34,7 @@ enum class LayerType
Mean,
MemCopy,
Merger,
+ Minimum,
Multiplication,
Normalization,
Output,
diff --git a/src/armnn/LayerSupport.cpp b/src/armnn/LayerSupport.cpp
index 5834b81ccc..bbc9e3bd80 100644
--- a/src/armnn/LayerSupport.cpp
+++ b/src/armnn/LayerSupport.cpp
@@ -425,4 +425,14 @@ bool IsStridedSliceSupported(const BackendId& backend,
FORWARD_LAYER_SUPPORT_FUNC(backend, IsStridedSliceSupported, input, output, descriptor);
}
+bool IsMinimumSupported(const BackendId& backend,
+ const TensorInfo& input0,
+ const TensorInfo& input1,
+ const TensorInfo& output,
+ char* reasonIfUnsupported,
+ size_t reasonIfUnsupportedMaxLength)
+{
+ FORWARD_LAYER_SUPPORT_FUNC(backend, IsMinimumSupported, input0, input1, output);
+}
+
}
diff --git a/src/armnn/LayersFwd.hpp b/src/armnn/LayersFwd.hpp
index bab40da372..88a636a0b8 100644
--- a/src/armnn/LayersFwd.hpp
+++ b/src/armnn/LayersFwd.hpp
@@ -26,6 +26,7 @@
#include "layers/MeanLayer.hpp"
#include "layers/MemCopyLayer.hpp"
#include "layers/MergerLayer.hpp"
+#include "layers/MinimumLayer.hpp"
#include "layers/MultiplicationLayer.hpp"
#include "layers/NormalizationLayer.hpp"
#include "layers/OutputLayer.hpp"
@@ -87,6 +88,7 @@ DECLARE_LAYER(Maximum)
DECLARE_LAYER(Mean)
DECLARE_LAYER(MemCopy)
DECLARE_LAYER(Merger)
+DECLARE_LAYER(Minimum)
DECLARE_LAYER(Multiplication)
DECLARE_LAYER(Normalization)
DECLARE_LAYER(Output)
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index 57949fb430..bed6400cf7 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -705,6 +705,11 @@ IConnectableLayer* Network::AddStridedSliceLayer(const StridedSliceDescriptor& s
return m_Graph->AddLayer<StridedSliceLayer>(stridedSliceDescriptor, name);
}
+IConnectableLayer* Network::AddMinimumLayer(const char* name)
+{
+ return m_Graph->AddLayer<MinimumLayer>(name);
+}
+
OptimizedNetwork::OptimizedNetwork(std::unique_ptr<Graph> graph)
: m_Graph(std::move(graph))
{
diff --git a/src/armnn/Network.hpp b/src/armnn/Network.hpp
index 84d1f58ab9..e65b1d5f77 100644
--- a/src/armnn/Network.hpp
+++ b/src/armnn/Network.hpp
@@ -133,6 +133,8 @@ public:
IConnectableLayer* AddStridedSliceLayer(const StridedSliceDescriptor& stridedSliceDescriptor,
const char* name = nullptr) override;
+ IConnectableLayer* AddMinimumLayer(const char* name = nullptr) override;
+
private:
IConnectableLayer* AddFullyConnectedLayerImpl(const FullyConnectedDescriptor& fullyConnectedDescriptor,
const ConstTensor& weights,
diff --git a/src/armnn/layers/MinimumLayer.cpp b/src/armnn/layers/MinimumLayer.cpp
new file mode 100644
index 0000000000..11f60ebcb1
--- /dev/null
+++ b/src/armnn/layers/MinimumLayer.cpp
@@ -0,0 +1,33 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#include "MinimumLayer.hpp"
+
+#include "LayerCloneBase.hpp"
+
+#include <armnn/TypesUtils.hpp>
+#include <backendsCommon/WorkloadData.hpp>
+#include <backendsCommon/WorkloadFactory.hpp>
+
+namespace armnn
+{
+
+MinimumLayer::MinimumLayer(const char* name)
+ : ArithmeticBaseLayer(2, 1, LayerType::Minimum, name)
+{
+}
+
+std::unique_ptr<IWorkload> MinimumLayer::CreateWorkload(const Graph& graph,
+ const IWorkloadFactory& factory) const
+{
+ MinimumQueueDescriptor descriptor;
+ return factory.CreateMinimum(descriptor, PrepInfoAndDesc(descriptor, graph));
+}
+
+MinimumLayer* MinimumLayer::Clone(Graph& graph) const
+{
+ return CloneBase<MinimumLayer>(graph, GetName());
+}
+
+} // namespace armnn
diff --git a/src/armnn/layers/MinimumLayer.hpp b/src/armnn/layers/MinimumLayer.hpp
new file mode 100644
index 0000000000..cd8a1688cf
--- /dev/null
+++ b/src/armnn/layers/MinimumLayer.hpp
@@ -0,0 +1,27 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include "ArithmeticBaseLayer.hpp"
+
+namespace armnn
+{
+
+class MinimumLayer : public ArithmeticBaseLayer
+{
+public:
+ virtual std::unique_ptr<IWorkload> CreateWorkload(const Graph& graph,
+ const IWorkloadFactory& factory) const override;
+
+ MinimumLayer* Clone(Graph& graph) const override;
+
+protected:
+ MinimumLayer(const char* name);
+ ~MinimumLayer() = default;
+
+};
+
+} \ No newline at end of file