ArmNN
 25.11
Loading...
Searching...
No Matches
OptimizationViews.cpp
Go to the documentation of this file.
1//
2// Copyright © 2017,2022 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
7
8namespace armnn
9{
10
11bool OptimizationViews::Validate(const armnn::SubgraphView& originalSubgraph) const
12{
13 //This needs to verify that:
14 // 1) the sum of m_SuccesfulOptimizations & m_FailedOptimizations & m_UntouchedSubgraphs contains subgraphviews
15 // which cover the entire space of the originalSubgraph.
16 // 2) Each SubstitutionPair contains matching inputs and outputs
17 bool valid = true;
18
19 // Create a copy of the layer list from the original subgraph and sort it
20 SubgraphView::IConnectableLayers originalLayers = originalSubgraph.GetIConnectableLayers();
21 originalLayers.sort();
22
23 // Create a new list based on the sum of all the subgraphs and sort it
25 for (auto& failed : m_FailedOptimizations)
26 {
27 countedLayers.insert(countedLayers.end(),
28 failed.GetIConnectableLayers().begin(),
29 failed.GetIConnectableLayers().end());
30 }
31 for (auto& untouched : m_UntouchedSubgraphs)
32 {
33 countedLayers.insert(countedLayers.end(),
34 untouched.GetIConnectableLayers().begin(),
35 untouched.GetIConnectableLayers().end());
36 }
37 for (auto& successful : m_SuccesfulOptimizations)
38 {
39 countedLayers.insert(countedLayers.end(),
40 successful.m_SubstitutableSubgraph.GetIConnectableLayers().begin(),
41 successful.m_SubstitutableSubgraph.GetIConnectableLayers().end());
42 }
43 for (auto& successful : m_DeletedSubgraphs)
44 {
45 countedLayers.insert(countedLayers.end(),
46 successful.GetIConnectableLayers().begin(),
47 successful.GetIConnectableLayers().end());
48 }
49 countedLayers.sort();
50
51 // Compare the two lists to make sure they match
52 valid &= originalLayers.size() == countedLayers.size();
53
54 auto oIt = originalLayers.begin();
55 auto cIt = countedLayers.begin();
56 for (size_t i=0; i < originalLayers.size() && valid; ++i, ++oIt, ++cIt)
57 {
58 valid &= (*oIt == *cIt);
59 }
60
61 // Compare the substitution subgraphs to ensure they are compatible
62 if (valid)
63 {
64 for (auto& substitution : m_SuccesfulOptimizations)
65 {
66 bool validSubstitution = true;
67 const SubgraphView& replacement = substitution.m_ReplacementSubgraph;
68 const SubgraphView& old = substitution.m_SubstitutableSubgraph;
69 validSubstitution &= replacement.GetIInputSlots().size() == old.GetIInputSlots().size();
70 validSubstitution &= replacement.GetIOutputSlots().size() == old.GetIOutputSlots().size();
71 valid &= validSubstitution;
72 }
73 }
74 return valid;
75}
76} //namespace armnn
bool Validate(const SubgraphView &originalSubgraph) const
The SubgraphView class represents a subgraph of a Graph.
const IConnectableLayers & GetIConnectableLayers() const
std::list< IConnectableLayer * > IConnectableLayers
const IInputSlots & GetIInputSlots() const
const IOutputSlots & GetIOutputSlots() const
Copyright (c) 2021 ARM Limited and Contributors.