Browse Source

!14068 [GraphKernel] fix graph_split and checkcircle

From: @lingyunli63
Reviewed-by: @gaoxiong1,@dylangeng
Signed-off-by: @dylangeng
pull/14068/MERGE
mindspore-ci-bot Gitee 4 years ago
parent
commit
7f92400ebd
2 changed files with 11 additions and 3 deletions
  1. +8
    -0
      mindspore/ccsrc/backend/optimizer/graph_kernel/composite_ops_fusion.cc
  2. +3
    -3
      mindspore/ccsrc/backend/optimizer/graph_kernel/graph_kernel_splitter.cc

+ 8
- 0
mindspore/ccsrc/backend/optimizer/graph_kernel/composite_ops_fusion.cc View File

@@ -73,6 +73,14 @@ bool CheckCircle(const std::set<AnfNodePtr> &fused_op_set, const AnfNodePtr &che
return edges; return edges;
}; };


// consider prior depend both in fused_op_set
auto range = depend_prior.equal_range(check_node);
for (auto iter = range.first; iter != range.second; ++iter) {
if (fused_op_set.count(iter->second.first)) {
circle_nodes->push_back(iter->second.first);
}
}

std::set<AnfNodePtr> cached_done_set; std::set<AnfNodePtr> cached_done_set;
auto cnode = check_node->cast<CNodePtr>(); auto cnode = check_node->cast<CNodePtr>();
const auto &inputs = InputEdges(cnode); const auto &inputs = InputEdges(cnode);


+ 3
- 3
mindspore/ccsrc/backend/optimizer/graph_kernel/graph_kernel_splitter.cc View File

@@ -286,7 +286,7 @@ class AreaGraph {
} }
} }
auto new_main_cnode = main_func_graph->NewCNode(main_cnode_inputs); auto new_main_cnode = main_func_graph->NewCNode(main_cnode_inputs);
new_main_cnode->set_abstract(sub_func_graph->get_return()->abstract());
new_main_cnode->set_abstract(sub_func_graph->output()->abstract());
return new_main_cnode; return new_main_cnode;
} }


@@ -639,7 +639,7 @@ class CostModelSplitSchemer : public Splitter::SplitSchemer {
need_inline_.clear(); need_inline_.clear();
return; return;
} else { } else {
MS_LOG(INFO) << "CostModel split successed. The kernel is split to " << split_plan_.size() << " parts.";
MS_LOG(INFO) << "CostModel split succeeded. The kernel is split to " << split_plan_.size() << " parts.";
} }
MapNodeGroup(); MapNodeGroup();
GroupReturnNode(); GroupReturnNode();
@@ -740,7 +740,7 @@ bool GraphKernelSplitter::Run(const FuncGraphPtr &func_graph) {
auto todos = TopoSort(func_graph->get_return()); auto todos = TopoSort(func_graph->get_return());


// Split subgraphs in reversed topo order, // Split subgraphs in reversed topo order,
// since the nodes behind the processing node may be modified when spliting.
// since the nodes behind the processing node may be modified when splitting.
bool changed = false; bool changed = false;
for (auto iter = todos.crbegin(); iter != todos.crend(); ++iter) { for (auto iter = todos.crbegin(); iter != todos.crend(); ++iter) {
auto node = (*iter)->cast<CNodePtr>(); auto node = (*iter)->cast<CNodePtr>();


Loading…
Cancel
Save