Browse Source

Remove subgraph control only const

tags/v1.2.0
zhangxiaokun 4 years ago
parent
commit
c4496510d0
1 changed files with 19 additions and 4 deletions
  1. +19
    -4
      ge/graph/passes/subgraph_const_migration_pass.cc

+ 19
- 4
ge/graph/passes/subgraph_const_migration_pass.cc View File

@@ -145,6 +145,7 @@ Status SubgraphConstMigrationPass::ClassifyGraphNodes(const ComputeGraphPtr &gra
return GE_GRAPH_EMPTY_SUBGRAPH; return GE_GRAPH_EMPTY_SUBGRAPH;
} }


set<NodePtr> ctrl_only_const_nodes;
auto &data_nodes = all_data_nodes[subgraph]; auto &data_nodes = all_data_nodes[subgraph];
auto &const_nodes = all_const_nodes[subgraph]; auto &const_nodes = all_const_nodes[subgraph];
for (auto &node : subgraph->GetDirectNode()) { for (auto &node : subgraph->GetDirectNode()) {
@@ -178,15 +179,26 @@ Status SubgraphConstMigrationPass::ClassifyGraphNodes(const ComputeGraphPtr &gra
peer_name_list.insert(fixed_name + ":" + std::to_string(in_anchor->GetIdx())); peer_name_list.insert(fixed_name + ":" + std::to_string(in_anchor->GetIdx()));
} }


if (peer_name_list.empty()) {
ctrl_only_const_nodes.insert(node);
GELOGI("%s, Const: %s, no data link will removed", subgraph->GetName().c_str(), node->GetName().c_str());
continue;
}

string key_of_const; string key_of_const;
for (const string &name : peer_name_list) { for (const string &name : peer_name_list) {
key_of_const += (key_of_const.empty() ? name : "_" + name); key_of_const += (key_of_const.empty() ? name : "_" + name);
} }


const_nodes[key_of_const] = node; const_nodes[key_of_const] = node;
GELOGD("%s, Key: %s, Const: %s", subgraph->GetName().c_str(), key_of_const.c_str(), node->GetName().c_str());
GELOGD("%s, Const: %s, Key: %s", subgraph->GetName().c_str(), node->GetName().c_str(), key_of_const.c_str());
} }
} }

for (auto &node : ctrl_only_const_nodes) {
GE_CHK_GRAPH_STATUS_RET(GraphUtils::RemoveNodeWithoutRelink(subgraph, node),
"Remove node without relink failed, node: %s", node->GetName().c_str());
}
} }


return SUCCESS; return SUCCESS;
@@ -352,7 +364,8 @@ Status SubgraphConstMigrationPass::DetachParallelNode(const ComputeGraphPtr &gra
const auto owner_node = out_anchor->GetOwnerNode(); const auto owner_node = out_anchor->GetOwnerNode();
GELOGI("Remove Edge: %s %s", owner_node->GetName().c_str(), const_node->GetName().c_str()); GELOGI("Remove Edge: %s %s", owner_node->GetName().c_str(), const_node->GetName().c_str());
if (owner_node->GetInAllNodes().empty() && owner_node->GetOutAllNodes().empty() && owner_node != data_node) { if (owner_node->GetInAllNodes().empty() && owner_node->GetOutAllNodes().empty() && owner_node != data_node) {
graph->RemoveNode(owner_node);
GE_CHK_GRAPH_STATUS_RET(GraphUtils::RemoveNodeWithoutRelink(graph, owner_node),
"Remove node without relink failed, node: %s", owner_node->GetName().c_str());
} }
} }


@@ -414,7 +427,8 @@ Status SubgraphConstMigrationPass::AttachParallelNode(const ComputeGraphPtr &gra
const auto owner_node = out_anchor->GetOwnerNode(); const auto owner_node = out_anchor->GetOwnerNode();
GELOGI("Remove Edge: %s %s", owner_node->GetName().c_str(), func_node->GetName().c_str()); GELOGI("Remove Edge: %s %s", owner_node->GetName().c_str(), func_node->GetName().c_str());
if (owner_node->GetInAllNodes().empty() && owner_node->GetOutAllNodes().empty()) { if (owner_node->GetInAllNodes().empty() && owner_node->GetOutAllNodes().empty()) {
graph->RemoveNode(owner_node);
GE_CHK_GRAPH_STATUS_RET(GraphUtils::RemoveNodeWithoutRelink(graph, owner_node),
"Remove node without relink failed, node: %s", owner_node->GetName().c_str());
} }
} }
GE_CHK_GRAPH_STATUS_RET(GraphUtils::AddEdge(const_node->GetOutDataAnchor(kZeroIndex), in_anchor), "Add edge failed"); GE_CHK_GRAPH_STATUS_RET(GraphUtils::AddEdge(const_node->GetOutDataAnchor(kZeroIndex), in_anchor), "Add edge failed");
@@ -472,7 +486,8 @@ Status SubgraphConstMigrationPass::MoveNodeToParent(const ComputeGraphPtr &graph
return FAILED; return FAILED;
} }


GE_CHK_GRAPH_STATUS_RET(subgraph->RemoveNode(move_node), "Remove node failed");
GE_CHK_GRAPH_STATUS_RET(GraphUtils::RemoveNodeWithoutRelink(subgraph, move_node),
"Remove node without relink failed, node: %s", move_node->GetName().c_str());
GELOGI("Remove Node: %s %s", subgraph->GetName().c_str(), move_node->GetName().c_str()); GELOGI("Remove Node: %s %s", subgraph->GetName().c_str(), move_node->GetName().c_str());
} }




Loading…
Cancel
Save