Browse Source

!848 add OptimizeWholeGraph

From: @ni100die
Reviewed-by: @sheng-nan,@wqtshg
Signed-off-by: @wqtshg
tags/v1.2.0
mindspore-ci-bot Gitee 3 years ago
parent
commit
0845e0ee9a
3 changed files with 39 additions and 0 deletions
  1. +3
    -0
      ge/graph/manager/graph_manager.cc
  2. +33
    -0
      ge/graph/optimize/graph_optimize.cc
  3. +3
    -0
      ge/graph/optimize/graph_optimize.h

+ 3
- 0
ge/graph/manager/graph_manager.cc View File

@@ -732,6 +732,9 @@ Status GraphManager::PreRunAfterOptimizeSubGraph(const GraphNodePtr &graph_node,
GeRootModelPtr &ge_root_model, uint64_t session_id) {
GE_CHECK_NOTNULL(graph_node);
GE_CHECK_NOTNULL(compute_graph);

CompilerStages &stages = GetCompilerStages(graph_node->GetGraphId());
GM_RUN_AND_DUMP_PERF("OptimizeWholeGraph", stages.optimizer.OptimizeWholeGraph, compute_graph);
GM_RUN_AND_DUMP_PERF("Optimize2", OptimizeStage2, compute_graph);
GM_RUN_AND_DUMP_PERF("OptimizeGraphBeforeBuildForRts",
GetCompilerStages(graph_node->GetGraphId()).optimizer.OptimizeGraphBeforeBuildForRts,


+ 33
- 0
ge/graph/optimize/graph_optimize.cc View File

@@ -336,4 +336,37 @@ Status GraphOptimize::IdentifyReference(ComputeGraphPtr &compute_graph) {
}
return SUCCESS;
}
Status GraphOptimize::OptimizeWholeGraph(ComputeGraphPtr &compute_graph) {
if (compute_graph == nullptr) {
GELOGE(GE_GRAPH_OPTIMIZE_COMPUTE_GRAPH_NULL, "[OptimizeWholeGraph]: compute_graph is nullptr.");
return GE_GRAPH_OPTIMIZE_COMPUTE_GRAPH_NULL;
}

std::shared_ptr<GELib> instance_ptr = ge::GELib::GetInstance();
if (instance_ptr == nullptr || !instance_ptr->InitFlag()) {
GELOGE(GE_CLI_GE_NOT_INITIALIZED, "OptimizeWholeGraph failed.");
return GE_CLI_GE_NOT_INITIALIZED;
}

auto graph_optimizer = instance_ptr->OpsKernelManagerObj().GetAllGraphOptimizerObjsByPriority();
GELOGI("optimize by opskernel in OptimizeWholeGraph. num of graph_optimizer is %zu.", graph_optimizer.size());
Status ret = SUCCESS;
string exclude_core_type = (core_type_ == kVectorCore) ? kAicoreEngine : kVectorEngine;
GELOGD("[OptimizeWholeGraph]: engine type will exclude: %s", exclude_core_type.c_str());
if (!graph_optimizer.empty()) {
for (auto &iter : graph_optimizer) {
if (iter.first == exclude_core_type || iter.second == nullptr) {
continue;
}
GELOGI("Begin to optimize whole graph by engine %s", iter.first.c_str());
ret = iter.second->OptimizeWholeGraph(*compute_graph);
GE_DUMP(compute_graph, "OptimizeWholeGraph" + iter.first);
if (ret != SUCCESS) {
GELOGE(ret, "[OptimizeWholeGraph]: graph optimize failed, ret:%u", ret);
return ret;
}
}
}
return ret;
}
} // namespace ge

+ 3
- 0
ge/graph/optimize/graph_optimize.h View File

@@ -52,6 +52,9 @@ class GraphOptimize {
// for fe prepare optimize in quantize scene
Status OptimizeOriginalGraphForQuantize(ComputeGraphPtr &compute_graph);

// for engine to optimize merged whole graph before ge Optimize2
Status OptimizeWholeGraph(ComputeGraphPtr &compute_graph);

// for rts optimize before build to add attr and insert memcpy op
Status OptimizeGraphBeforeBuildForRts(ComputeGraphPtr &compute_graph);



Loading…
Cancel
Save