aboutsummaryrefslogtreecommitdiff
path: root/include/armnn/backends/SubgraphView.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/armnn/backends/SubgraphView.hpp')
-rw-r--r--include/armnn/backends/SubgraphView.hpp172
1 files changed, 172 insertions, 0 deletions
diff --git a/include/armnn/backends/SubgraphView.hpp b/include/armnn/backends/SubgraphView.hpp
new file mode 100644
index 0000000000..b5a74bab5d
--- /dev/null
+++ b/include/armnn/backends/SubgraphView.hpp
@@ -0,0 +1,172 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <Layer.hpp>
+#include <Graph.hpp>
+
+#include <vector>
+#include <list>
+
+namespace armnn
+{
+
+///
+/// The SubgraphView class represents a subgraph of a Graph.
+/// The data it holds, points to data held by layers of the Graph, so the
+/// the contents of the SubgraphView become invalid when the Layers are destroyed
+/// or changed.
+///
+class SubgraphView final
+{
+public:
+ template <typename Func>
+ void ForEachLayer(Func func) const
+ {
+ for (auto it = m_Layers.begin(); it != m_Layers.end(); )
+ {
+ auto next = std::next(it);
+ func(*it);
+ it = next;
+ }
+ }
+
+ template <typename Func>
+ void ForEachIConnectableLayer(Func func) const
+ {
+ for (auto it = m_IConnectableLayers.begin(); it != m_IConnectableLayers.end(); )
+ {
+ auto next = std::next(it);
+ func(*it);
+ it = next;
+ }
+ }
+
+ using SubgraphViewPtr = std::unique_ptr<SubgraphView>;
+ using InputSlots = std::vector<InputSlot*>;
+ using IInputSlots = std::vector<IInputSlot*>;
+ using OutputSlots = std::vector<OutputSlot*>;
+ using IOutputSlots = std::vector<IOutputSlot*>;
+ using Layers = std::list<Layer*>;
+ using IConnectableLayers = std::list<IConnectableLayer*>;
+ using Iterator = Layers::iterator;
+ using IConnectableLayerIterator = IConnectableLayers::iterator;
+ using ConstIterator = Layers::const_iterator;
+ using ConstIConnectableIterator = IConnectableLayers::const_iterator;
+
+ /// Constructs a sub-graph from the entire given graph.
+ explicit SubgraphView(Graph& graph);
+
+ /// Constructs a sub-graph with the given arguments.
+ ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This function has been deprecated, please use constructor with arguments: "
+ "IConnectableLayers, IInputSlots and IOutputSlots", "22.08")
+ SubgraphView(InputSlots&& inputs, OutputSlots&& outputs, Layers&& layers);
+
+ /// Constructs a sub-graph with the given arguments.
+ SubgraphView(IConnectableLayers&& layers, IInputSlots&& inputs, IOutputSlots&& outputs);
+
+ /// Copy-constructor.
+ SubgraphView(const SubgraphView& subgraph);
+
+ /// Move-constructor.
+ SubgraphView(SubgraphView&& subgraph);
+
+ /// Constructs a sub-graph with only the given layer.
+ SubgraphView(IConnectableLayer* layer);
+
+ /// Move-assignment operator.
+ SubgraphView& operator=(SubgraphView&& other);
+
+ ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This function has been deprecated, please use GetIInputSlots() returning"
+ " public IInputSlots", "22.08")
+ const InputSlots& GetInputSlots() const;
+ const IInputSlots& GetIInputSlots() const;
+
+ ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This function has been deprecated, please use GetIOutputSlots() returning"
+ " public IOutputSlots", "22.08")
+ const OutputSlots& GetOutputSlots() const;
+ const IOutputSlots& GetIOutputSlots() const;
+
+ ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This function has been deprecated, please use GetIConnectableLayers() "
+ "returning public IConnectableLayers", "22.08")
+ const Layers& GetLayers() const;
+ const IConnectableLayers& GetIConnectableLayers() const;
+
+ ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This function has been deprecated, please use GetIInputSlot() returning public "
+ "IInputSlot", "22.08")
+ const InputSlot* GetInputSlot(unsigned int index) const;
+ const IInputSlot* GetIInputSlot(unsigned int index) const;
+ ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This function has been deprecated, please use GetIInputSlot() returning public "
+ "IInputSlot", "22.08")
+ InputSlot* GetInputSlot(unsigned int index);
+ IInputSlot* GetIInputSlot(unsigned int index);
+
+ ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This function has been deprecated, please use GetIOutputSlot() returning"
+ " public IOutputSlot", "22.08")
+ const OutputSlot* GetOutputSlot(unsigned int index) const;
+ const IOutputSlot* GetIOutputSlot(unsigned int index) const;
+ ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This function has been deprecated, please use GetIOutputSlot() returning"
+ " public IOutputSlot", "22.08")
+ OutputSlot* GetOutputSlot(unsigned int index);
+ IOutputSlot* GetIOutputSlot(unsigned int index);
+
+ unsigned int GetNumInputSlots() const;
+ unsigned int GetNumOutputSlots() const;
+
+ ARMNN_DEPRECATED_MSG_CHANGE_DATE("This function is deprecated and will be changed to return an "
+ "IConnectableLayerIterator, until that occurs in 23.02; please use "
+ "beginIConnectable() returning public IConnectableLayerIterator", "23.02")
+ Iterator begin();
+ IConnectableLayerIterator beginIConnectable();
+ ARMNN_DEPRECATED_MSG_CHANGE_DATE("This function is deprecated and will be changed to return an "
+ "IConnectableLayerIterator, until that occurs in 23.02; please use "
+ "endIConnectable() returning public IConnectableLayerIterator", "23.02")
+ Iterator end();
+ IConnectableLayerIterator endIConnectable();
+
+ ARMNN_DEPRECATED_MSG_CHANGE_DATE("This function is deprecated and will be changed to return an "
+ "ConstIConnectableIterator, until that occurs in 23.02; please use "
+ "beginIConnectable() returning public ConstIConnectableIterator", "23.02")
+ ConstIterator begin() const;
+ ConstIConnectableIterator beginIConnectable() const;
+ ARMNN_DEPRECATED_MSG_CHANGE_DATE("This function is deprecated and will be changed to return an "
+ "ConstIConnectableIterator, until that occurs in 23.02; please use "
+ "endIConnectable() returning public ConstIConnectableIterator", "23.02")
+ ConstIterator end() const;
+ ConstIConnectableIterator endIConnectable() const;
+
+ ARMNN_DEPRECATED_MSG_CHANGE_DATE("This function is deprecated and will be changed to return an "
+ "ConstIConnectableIterator, until that occurs in 23.02; please use "
+ "cbeginIConnectable() returning public ConstIConnectableIterator", "23.02")
+ ConstIterator cbegin() const;
+ ConstIConnectableIterator cbeginIConnectable() const;
+ ARMNN_DEPRECATED_MSG_CHANGE_DATE("This function is deprecated and will be changed to return an "
+ "ConstIConnectableIterator, until that occurs in 23.02; please use "
+ "cendIConnectable() returning public ConstIConnectableIterator", "23.02")
+ ConstIterator cend() const;
+ ConstIConnectableIterator cendIConnectable() const;
+
+ void Clear();
+
+private:
+ void CheckSubgraph();
+
+ /// Arrange the order of layers topologically so that nodes can be visited in valid order
+ void ArrangeBySortOrder();
+
+ /// The list of pointers to the input slots of the parent graph.
+ InputSlots m_InputSlots;
+ IInputSlots m_IInputSlots;
+
+ /// The list of pointers to the output slots of the parent graph.
+ OutputSlots m_OutputSlots;
+ IOutputSlots m_IOutputSlots;
+
+ /// The list of pointers to the layers of the parent graph.
+ Layers m_Layers;
+ IConnectableLayers m_IConnectableLayers;
+};
+} // namespace armnn