blob: 14296f070491fece41b11ed8a23c8791a5206ad2 [file] [log] [blame]
Derek Lambertic2fe5fb2019-05-08 10:23:08 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7#include <SubgraphView.hpp>
8
9namespace armnn
10{
11class OptimizationViews
12{
13public:
14 OptimizationViews() = default;
Matteo Martincigh77ba3df2019-05-09 15:26:51 +010015 OptimizationViews(const OptimizationViews&) = delete;
16 OptimizationViews& operator=(const OptimizationViews&) = delete;
17 OptimizationViews(OptimizationViews&&) = default;
18 OptimizationViews& operator=(OptimizationViews&&) = default;
Derek Lambertic2fe5fb2019-05-08 10:23:08 +010019
20 struct SubstitutionPair
21 {
22 /// Subgraph of Layers from the original graph which should be replaced
23 SubgraphView m_SubstitutableSubgraph;
24
25 /// A subgraph of new layers which will replace layers in m_SubstitutableSubgraph
26 SubgraphView m_ReplacementSubgraph;
27 };
28
29 using Subgraphs = std::vector<SubgraphView>;
30 using Substitutions = std::vector<SubstitutionPair>;
31
32 void AddSubstituion(SubstitutionPair&& substitution)
33 {
34 m_SuccesfulOptimizations.emplace_back(substitution);
35 }
36
37 void AddFailedSubgraph(SubgraphView&& subgraph)
38 {
39 m_FailedOptimizations.emplace_back(subgraph);
40 }
41
42 void AddUntouchedSubgraph(SubgraphView&& subgraph)
43 {
44 m_UntouchedSubgraphs.emplace_back(subgraph);
45 }
46
47 Substitutions GetSubstitutions() const { return m_SuccesfulOptimizations; }
48 Subgraphs GetFailedSubgraphs() const { return m_FailedOptimizations; }
49 Subgraphs GetUntouchedSubgraphs() const { return m_UntouchedSubgraphs; }
50 bool Validate(const SubgraphView& originalSubgraph) const;
51
Derek Lamberti8106b7c2019-05-07 21:33:30 +010052 Graph& GetGraph() { return m_Graph; };
53
Derek Lambertic2fe5fb2019-05-08 10:23:08 +010054private:
55 Substitutions m_SuccesfulOptimizations; ///< Proposed substitutions from successful optimizations
56 Subgraphs m_FailedOptimizations; ///< Subgraphs from the original subgraph which cannot be supported
57 Subgraphs m_UntouchedSubgraphs; ///< Subgraphs from the original subgraph which remain unmodified
Derek Lamberti8106b7c2019-05-07 21:33:30 +010058
59 Graph m_Graph;
Derek Lambertic2fe5fb2019-05-08 10:23:08 +010060};
Matteo Martincigh77ba3df2019-05-09 15:26:51 +010061} //namespace armnn