• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include "SubgraphView.hpp"
8 #include <functional>
9 #include <memory>
10 
11 namespace armnn
12 {
13 
14 class Layer;
15 class Graph;
16 
17 /// Algorithm that splits a Graph into Subgraphs based on a filtering of layers (e.g. which layers are appropriate for
18 /// a certain backend). The resulting subgraphs are guaranteed to be form a DAG (i.e. there are no dependency loops).
19 ///
20 /// The algorithm aims to produce as few subgraphs as possible.
21 class SubgraphViewSelector final
22 {
23 public:
24     using SubgraphViewPtr = std::unique_ptr<SubgraphView>;
25     using Subgraphs = std::vector<SubgraphViewPtr>;
26     using LayerSelectorFunction = std::function<bool(const Layer&)>;
27 
28     /// Selects subgraphs from a graph based on the selector function and the algorithm.
29     /// Since the Subgraphs object returns modifiable pointers to the input and output slots of the graph:
30     ///  1) the graph/sub-graph cannot be const
31     ///  2) the caller needs to make sure that the Subgraphs lifetime is shorter than the parent graph's
32     static Subgraphs SelectSubgraphs(Graph& graph, const LayerSelectorFunction& selector);
33     static Subgraphs SelectSubgraphs(SubgraphView& subgraph, const LayerSelectorFunction& selector);
34 
35 private:
36     // this is a utility class, don't construct or copy
37     SubgraphViewSelector() = delete;
38     SubgraphViewSelector(const SubgraphViewSelector&) = delete;
39     SubgraphViewSelector & operator=(const SubgraphViewSelector&) = delete;
40 };
41 
42 } // namespace armnn
43