From 2dfaed0e849a3bd22702ae9e8c60aab26b35ef12 Mon Sep 17 00:00:00 2001 From: "gengchao4@huawei.com" Date: Thu, 31 Dec 2020 16:44:35 +0800 Subject: [PATCH 1/2] add OptimizeWholeGraph --- ge/graph/manager/graph_manager.cc | 3 +++ ge/graph/optimize/graph_optimize.cc | 33 +++++++++++++++++++++++++++++ ge/graph/optimize/graph_optimize.h | 3 +++ 3 files changed, 39 insertions(+) diff --git a/ge/graph/manager/graph_manager.cc b/ge/graph/manager/graph_manager.cc index beb7cd42..a0d598f3 100755 --- a/ge/graph/manager/graph_manager.cc +++ b/ge/graph/manager/graph_manager.cc @@ -731,6 +731,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, diff --git a/ge/graph/optimize/graph_optimize.cc b/ge/graph/optimize/graph_optimize.cc index c94408de..d2e45195 100644 --- a/ge/graph/optimize/graph_optimize.cc +++ b/ge/graph/optimize/graph_optimize.cc @@ -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 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 refine running format 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 diff --git a/ge/graph/optimize/graph_optimize.h b/ge/graph/optimize/graph_optimize.h index 78d580b7..3a1960f7 100755 --- a/ge/graph/optimize/graph_optimize.h +++ b/ge/graph/optimize/graph_optimize.h @@ -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); From 3bbe8c7d04824a0b206e115c8a1e3b46575ad8de Mon Sep 17 00:00:00 2001 From: "gengchao4@huawei.com" Date: Thu, 31 Dec 2020 16:58:17 +0800 Subject: [PATCH 2/2] add OptimizeWholeGraph --- ge/graph/optimize/graph_optimize.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ge/graph/optimize/graph_optimize.cc b/ge/graph/optimize/graph_optimize.cc index d2e45195..cd80a956 100644 --- a/ge/graph/optimize/graph_optimize.cc +++ b/ge/graph/optimize/graph_optimize.cc @@ -358,7 +358,7 @@ Status GraphOptimize::OptimizeWholeGraph(ComputeGraphPtr &compute_graph) { if (iter.first == exclude_core_type || iter.second == nullptr) { continue; } - GELOGI("Begin to refine running format by engine %s", iter->first.c_str()); + 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) {