blob: e96c11aabacd23b791f3fcc3c85b0e9d714b0b51 [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{
Matteo Martincigh84924332019-05-09 12:46:16 +010011
Derek Lambertic2fe5fb2019-05-08 10:23:08 +010012class OptimizationViews
13{
14public:
15 OptimizationViews() = default;
Matteo Martincigh77ba3df2019-05-09 15:26:51 +010016 OptimizationViews(const OptimizationViews&) = delete;
17 OptimizationViews& operator=(const OptimizationViews&) = delete;
18 OptimizationViews(OptimizationViews&&) = default;
19 OptimizationViews& operator=(OptimizationViews&&) = default;
Derek Lambertic2fe5fb2019-05-08 10:23:08 +010020
21 struct SubstitutionPair
22 {
23 /// Subgraph of Layers from the original graph which should be replaced
24 SubgraphView m_SubstitutableSubgraph;
25
26 /// A subgraph of new layers which will replace layers in m_SubstitutableSubgraph
27 SubgraphView m_ReplacementSubgraph;
28 };
29
30 using Subgraphs = std::vector<SubgraphView>;
31 using Substitutions = std::vector<SubstitutionPair>;
32
33 void AddSubstituion(SubstitutionPair&& substitution)
34 {
35 m_SuccesfulOptimizations.emplace_back(substitution);
36 }
37
38 void AddFailedSubgraph(SubgraphView&& subgraph)
39 {
40 m_FailedOptimizations.emplace_back(subgraph);
41 }
42
43 void AddUntouchedSubgraph(SubgraphView&& subgraph)
44 {
45 m_UntouchedSubgraphs.emplace_back(subgraph);
46 }
47
Matteo Martincigh84924332019-05-09 12:46:16 +010048 const Substitutions& GetSubstitutions() const { return m_SuccesfulOptimizations; }
49 const Subgraphs& GetFailedSubgraphs() const { return m_FailedOptimizations; }
50 const Subgraphs& GetUntouchedSubgraphs() const { return m_UntouchedSubgraphs; }
51
52 Substitutions& GetSubstitutions() { return m_SuccesfulOptimizations; }
53 Subgraphs& GetFailedSubgraphs() { return m_FailedOptimizations; }
54 Subgraphs& GetUntouchedSubgraphs() { return m_UntouchedSubgraphs; }
55
Derek Lambertic2fe5fb2019-05-08 10:23:08 +010056 bool Validate(const SubgraphView& originalSubgraph) const;
57
Matteo Martincigh84924332019-05-09 12:46:16 +010058 Graph& GetGraph() { return m_Graph; }
Derek Lamberti8106b7c2019-05-07 21:33:30 +010059
Derek Lambertic2fe5fb2019-05-08 10:23:08 +010060private:
61 Substitutions m_SuccesfulOptimizations; ///< Proposed substitutions from successful optimizations
62 Subgraphs m_FailedOptimizations; ///< Subgraphs from the original subgraph which cannot be supported
63 Subgraphs m_UntouchedSubgraphs; ///< Subgraphs from the original subgraph which remain unmodified
Derek Lamberti8106b7c2019-05-07 21:33:30 +010064
Matteo Martincigh84924332019-05-09 12:46:16 +010065 /// Graph object used only as a container for any layer generated by the optimization process
Derek Lamberti8106b7c2019-05-07 21:33:30 +010066 Graph m_Graph;
Derek Lambertic2fe5fb2019-05-08 10:23:08 +010067};
Matteo Martincigh84924332019-05-09 12:46:16 +010068
Matteo Martincigh77ba3df2019-05-09 15:26:51 +010069} //namespace armnn