1 // 2 // Copyright © 2017 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #pragma once 7 8 #include <SubgraphView.hpp> 9 10 namespace armnn 11 { 12 13 class OptimizationViews 14 { 15 public: 16 OptimizationViews() = default; 17 OptimizationViews(const OptimizationViews&) = delete; 18 OptimizationViews& operator=(const OptimizationViews&) = delete; 19 OptimizationViews(OptimizationViews&&) = default; 20 OptimizationViews& operator=(OptimizationViews&&) = default; 21 22 struct SubstitutionPair 23 { 24 /// Subgraph of Layers from the original graph which should be replaced 25 SubgraphView m_SubstitutableSubgraph; 26 27 /// A subgraph of new layers which will replace layers in m_SubstitutableSubgraph 28 SubgraphView m_ReplacementSubgraph; 29 }; 30 31 using Subgraphs = std::vector<SubgraphView>; 32 using Substitutions = std::vector<SubstitutionPair>; 33 AddSubstitution(SubstitutionPair && substitution)34 void AddSubstitution(SubstitutionPair&& substitution) 35 { 36 m_SuccesfulOptimizations.emplace_back(substitution); 37 } 38 AddFailedSubgraph(SubgraphView && subgraph)39 void AddFailedSubgraph(SubgraphView&& subgraph) 40 { 41 m_FailedOptimizations.emplace_back(subgraph); 42 } 43 AddUntouchedSubgraph(SubgraphView && subgraph)44 void AddUntouchedSubgraph(SubgraphView&& subgraph) 45 { 46 m_UntouchedSubgraphs.emplace_back(subgraph); 47 } 48 GetSubstitutions() const49 const Substitutions& GetSubstitutions() const { return m_SuccesfulOptimizations; } GetFailedSubgraphs() const50 const Subgraphs& GetFailedSubgraphs() const { return m_FailedOptimizations; } GetUntouchedSubgraphs() const51 const Subgraphs& GetUntouchedSubgraphs() const { return m_UntouchedSubgraphs; } 52 GetSubstitutions()53 Substitutions& GetSubstitutions() { return m_SuccesfulOptimizations; } GetFailedSubgraphs()54 Subgraphs& GetFailedSubgraphs() { return m_FailedOptimizations; } GetUntouchedSubgraphs()55 Subgraphs& GetUntouchedSubgraphs() { return m_UntouchedSubgraphs; } 56 57 bool Validate(const SubgraphView& originalSubgraph) const; 58 GetGraph()59 Graph& GetGraph() { return m_Graph; } 60 61 private: 62 Substitutions m_SuccesfulOptimizations; ///< Proposed substitutions from successful optimizations 63 Subgraphs m_FailedOptimizations; ///< Subgraphs from the original subgraph which cannot be supported 64 Subgraphs m_UntouchedSubgraphs; ///< Subgraphs from the original subgraph which remain unmodified 65 66 /// Graph object used only as a container for any layer generated by the optimization process 67 Graph m_Graph; 68 }; 69 70 } //namespace armnn 71