@@ -731,6 +731,9 @@ Status GraphManager::PreRunAfterOptimizeSubGraph(const GraphNodePtr &graph_node, | |||||
GeRootModelPtr &ge_root_model, uint64_t session_id) { | GeRootModelPtr &ge_root_model, uint64_t session_id) { | ||||
GE_CHECK_NOTNULL(graph_node); | GE_CHECK_NOTNULL(graph_node); | ||||
GE_CHECK_NOTNULL(compute_graph); | 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("Optimize2", OptimizeStage2, compute_graph); | ||||
GM_RUN_AND_DUMP_PERF("OptimizeGraphBeforeBuildForRts", | GM_RUN_AND_DUMP_PERF("OptimizeGraphBeforeBuildForRts", | ||||
GetCompilerStages(graph_node->GetGraphId()).optimizer.OptimizeGraphBeforeBuildForRts, | GetCompilerStages(graph_node->GetGraphId()).optimizer.OptimizeGraphBeforeBuildForRts, | ||||
@@ -336,4 +336,37 @@ Status GraphOptimize::IdentifyReference(ComputeGraphPtr &compute_graph) { | |||||
} | } | ||||
return SUCCESS; | 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 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 | } // namespace ge |
@@ -52,6 +52,9 @@ class GraphOptimize { | |||||
// for fe prepare optimize in quantize scene | // for fe prepare optimize in quantize scene | ||||
Status OptimizeOriginalGraphForQuantize(ComputeGraphPtr &compute_graph); | 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 | // for rts optimize before build to add attr and insert memcpy op | ||||
Status OptimizeGraphBeforeBuildForRts(ComputeGraphPtr &compute_graph); | Status OptimizeGraphBeforeBuildForRts(ComputeGraphPtr &compute_graph); | ||||