From 169a2bcd976992ba6b0ed0f2f8929f7f954fd348 Mon Sep 17 00:00:00 2001 From: zhangzhaoju Date: Fri, 21 May 2021 10:19:23 +0800 Subject: [PATCH] revert some vector to deque --- mindspore/ccsrc/frontend/optimizer/opt.cc | 28 ++++++++++------------- mindspore/core/ir/graph_utils.cc | 24 ++++++++----------- 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/mindspore/ccsrc/frontend/optimizer/opt.cc b/mindspore/ccsrc/frontend/optimizer/opt.cc index 9e585958f25..2fd2421680c 100644 --- a/mindspore/ccsrc/frontend/optimizer/opt.cc +++ b/mindspore/ccsrc/frontend/optimizer/opt.cc @@ -126,8 +126,8 @@ static AnfNodePtr DoTransform(const OptimizerPtr &optimizer, const AnfNodePtr &n return nullptr; } -static void UpdateTransformingList(const OptimizerPtr &optimizer, const AnfNodePtr &node, - std::vector *todo, bool change, size_t seen) { +static void UpdateTransformingList(const OptimizerPtr &optimizer, const AnfNodePtr &node, std::deque *todo, + bool change, size_t seen) { if (IsValueNode(node)) { (*todo).emplace_back(GetValueNode(node)->output()); } @@ -164,17 +164,15 @@ bool SubstitutionList::ApplyIRToSubstitutions(const OptimizerPtr &optimizer, con #endif FuncGraphManagerPtr manager = optimizer->manager(); auto seen = NewSeenGeneration(); - // 1024 is for the initial capacity of vector - std::vector todo; - todo.reserve(1024); + // 1024 is for the initial capacity of deque + std::deque todo; todo.emplace_back(func_graph->output()); bool changes = false; auto &all_nodes = manager->all_nodes(); - size_t node_idx = 0; - while (node_idx < todo.size()) { - AnfNodePtr node = todo[node_idx]; - node_idx++; + while (!todo.empty()) { + AnfNodePtr node = todo.front(); + todo.pop_front(); if (node == nullptr || node->seen_ == seen || !isTraversable(node) || !all_nodes.contains(node)) { continue; @@ -207,17 +205,15 @@ bool SubstitutionList::ApplySubstitutionToIR(const OptimizerPtr &optimizer, cons #endif FuncGraphManagerPtr manager = optimizer->manager(); auto seen = NewSeenGeneration(); - // 1024 is for the initial capacity of vector - std::vector todo(0); - todo.reserve(1024); + // 1024 is for the initial capacity of deque + std::deque todo; todo.emplace_back(root_node); bool changes = false; auto &all_nodes = manager->all_nodes(); - size_t node_idx = 0; - while (node_idx < todo.size()) { - AnfNodePtr node = todo[node_idx]; - node_idx++; + while (!todo.empty()) { + AnfNodePtr node = todo.front(); + todo.pop_front(); if (node == nullptr || node->seen_ == seen || !isTraversable(node) || !all_nodes.contains(node)) { continue; diff --git a/mindspore/core/ir/graph_utils.cc b/mindspore/core/ir/graph_utils.cc index 6c82f3bde7e..8c47965be13 100644 --- a/mindspore/core/ir/graph_utils.cc +++ b/mindspore/core/ir/graph_utils.cc @@ -37,12 +37,12 @@ namespace mindspore { std::vector TopoSort(const AnfNodePtr &root, const SuccFunc &succ, const IncludeFunc &include) { std::vector res; + res.reserve(1024); if (root == nullptr) { return res; } size_t seen = NewSeenGeneration(); - std::vector todo; - todo.reserve(1024); + std::deque todo; todo.push_back(root); while (!todo.empty()) { @@ -98,13 +98,11 @@ std::vector BroadFirstSearchGraphCNodes(const std::vector &s std::vector todo; todo.reserve(1024); todo.insert(todo.end(), starts.begin(), starts.end()); - std::vector sorted_nodes; auto seen = NewSeenGeneration(); size_t top_idx = 0; while (top_idx < todo.size()) { CNodePtr top = todo[top_idx]; top_idx++; - sorted_nodes.push_back(top); auto inputs = top->inputs(); for (auto &item : inputs) { if (item->seen_ == seen) { @@ -117,19 +115,17 @@ std::vector BroadFirstSearchGraphCNodes(const std::vector &s item->seen_ = seen; } } - return sorted_nodes; + return todo; } // search the cnode match the predicate inside this graph only CNodePtr BroadFirstSearchFirstOf(const std::vector &starts, const MatchFunc &match_predicate) { - std::vector todo; - todo.reserve(1024); + std::deque todo; todo.insert(todo.end(), starts.begin(), starts.end()); auto seen = NewSeenGeneration(); - size_t top_idx = 0; - while (top_idx < todo.size()) { - CNodePtr top = todo[top_idx]; - top_idx++; + while (!todo.empty()) { + CNodePtr top = todo.front(); + todo.pop_front(); if (match_predicate(top)) { return top; } @@ -152,14 +148,11 @@ std::vector BroadFirstSearchGraphUsed(FuncGraphPtr root) { std::vector todo; todo.reserve(128); todo.push_back(root); - std::vector sorted; - sorted.reserve(128); auto seen = NewSeenGeneration(); size_t top_idx = 0; while (top_idx < todo.size()) { FuncGraphPtr top = todo[top_idx]; top_idx++; - sorted.push_back(top); auto used = top->func_graphs_used(); for (auto &item : used) { if (item.first->seen_ == seen) { @@ -169,7 +162,7 @@ std::vector BroadFirstSearchGraphUsed(FuncGraphPtr root) { item.first->seen_ = seen; } } - return sorted; + return todo; } // PushSuccessors push cnode inputs to a vector as successors for topo sort. @@ -243,6 +236,7 @@ std::vector SuccIncoming(const AnfNodePtr &node) { std::vector SuccIncludeFV(const FuncGraphPtr &fg, const AnfNodePtr &node) { std::vector vecs; + vecs.reserve(128); if (node == nullptr) { return vecs; }