| @@ -651,62 +651,13 @@ Status GraphManager::ReplaceSubgraphWithOriGraph(const ComputeGraphPtr &compute_ | |||
| Status GraphManager::SetSubgraph(uint64_t session_id, ComputeGraphPtr compute_graph, GraphPartitioner &partitioner) { | |||
| GE_CHECK_NOTNULL(compute_graph); | |||
| auto sub_graph_map = partitioner.GetSubGraphMap(); | |||
| std::string buffer_optimize; | |||
| graphStatus graph_status = ge::GetContext().GetOption(BUFFER_OPTIMIZE, buffer_optimize); | |||
| bool need_lx_fusion = (graph_status == GRAPH_SUCCESS) && (buffer_optimize != kOffOptimize); | |||
| if (options_.build_mode.empty() && need_lx_fusion) { | |||
| GELOGI("Enter normal mode with buffer_optimize:%s.", buffer_optimize.c_str()); | |||
| /// 1. Copy subgraph for buffer optimize while lx fusion failed. | |||
| /// 2. Set graph with attr "lx_fusion" for fusion optimize. | |||
| std::unordered_map<std::string, ComputeGraphPtr> copy_graphs; | |||
| GE_TIMESTAMP_START(CopySubGraphAndMarkFusion); | |||
| Status ret = CopySubGraphAndMarkFusion(compute_graph, sub_graph_map, copy_graphs); | |||
| GE_TIMESTAMP_EVENT_END(CopySubGraphAndMarkFusion, "SetSubgraph:CopySubGraphAndMarkFusion"); | |||
| if (ret != SUCCESS) { | |||
| GELOGE(ret, "CopySubGraphAndMarkFusion failed."); | |||
| return ret; | |||
| } | |||
| // Multiply optimize subgraph with lx fusion | |||
| ret = OptimizeSubGraphWithMultiThreads(compute_graph, sub_graph_map, session_id); | |||
| if (ret != SUCCESS) { | |||
| GELOGE(ret, "Multiply optimize subgraph with lx fusion failed."); | |||
| return ret; | |||
| } | |||
| // Check whether all subgraph lx fusion success | |||
| GE_TIMESTAMP_START(CheckAllFusionOptimizeSuccess); | |||
| if (CheckAllFusionOptimizeSuccess(compute_graph, sub_graph_map)) { | |||
| GE_TIMESTAMP_EVENT_END(CheckAllFusionOptimizeSuccess, "SetSubgraph:CheckAllFusionOptimizeSuccess"); | |||
| return SUCCESS; | |||
| } | |||
| // Replace subgraph with original graph for lx buffer | |||
| ret = ReplaceSubgraphWithOriGraph(compute_graph, sub_graph_map, copy_graphs); | |||
| if (ret != SUCCESS) { | |||
| GELOGE(ret, "Replace subgraph with original graph failed."); | |||
| return ret; | |||
| } | |||
| // Multiply optimize subgraph with lx buffer | |||
| ret = OptimizeSubGraphWithMultiThreads(compute_graph, sub_graph_map, session_id); | |||
| if (ret != SUCCESS) { | |||
| GELOGE(ret, "Multiply optimize subgraph with lx buffer failed."); | |||
| return ret; | |||
| } | |||
| } else { | |||
| /// Multiply optimize subgraph: | |||
| /// 1. run lx buffer while build_mode is normal and buffer_optimize is empty or "off_optimize"; | |||
| /// 2. run lx fusion or buffer according build_mode and build_step in fe. | |||
| GELOGD("Directly optimize subgraph with build mode:%s, and step:%s, buffer_optimize:%s.", | |||
| options_.build_mode.c_str(), | |||
| options_.build_step.c_str(), | |||
| buffer_optimize.c_str()); | |||
| Status ret = OptimizeSubGraphWithMultiThreads(compute_graph, sub_graph_map, session_id); | |||
| if (ret != SUCCESS) { | |||
| GELOGE(ret, "Multiply optimize subgraph with lx buffer"); | |||
| return ret; | |||
| } | |||
| GELOGD("Directly optimize subgraph with build mode:%s, and step:%s.", | |||
| options_.build_mode.c_str(), | |||
| options_.build_step.c_str()); | |||
| Status ret = OptimizeSubGraphWithMultiThreads(compute_graph, sub_graph_map, session_id); | |||
| if (ret != SUCCESS) { | |||
| GELOGE(ret, "Multiply optimize subgraph failed"); | |||
| return ret; | |||
| } | |||
| return SUCCESS; | |||
| } | |||