From 7785ced96f9cd6d49a0e01977c9705ac8733e149 Mon Sep 17 00:00:00 2001 From: huanghui Date: Tue, 19 May 2020 10:47:35 +0800 Subject: [PATCH] optimize-backend-anf-ir-proto-dump --- .../ascend/ascend_backend_optimization.cc | 6 ++-- mindspore/ccsrc/session/ascend_session.cc | 31 +++++++++++++++++++ mindspore/ccsrc/session/ascend_session.h | 1 + 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/mindspore/ccsrc/pre_activate/ascend/ascend_backend_optimization.cc b/mindspore/ccsrc/pre_activate/ascend/ascend_backend_optimization.cc index 220b309200..0edc1e1e7f 100644 --- a/mindspore/ccsrc/pre_activate/ascend/ascend_backend_optimization.cc +++ b/mindspore/ccsrc/pre_activate/ascend/ascend_backend_optimization.cc @@ -89,8 +89,8 @@ void AddAscendBackendOptionalIRFusion(PassManager *ir_fusion_pm) { ir_fusion_pm->AddPass(std::make_shared()); ir_fusion_pm->AddPass(std::make_shared()); ir_fusion_pm->AddPass(std::make_shared()); - ir_fusion_pm->AddPass(std::make_shared()); ir_fusion_pm->AddPass(std::make_shared()); + ir_fusion_pm->AddPass(std::make_shared()); ir_fusion_pm->AddPass(std::make_shared()); ir_fusion_pm->AddPass(std::make_shared()); ir_fusion_pm->AddPass(std::make_shared()); @@ -201,7 +201,7 @@ void AscendBackendIRFusionOptimization(const std::shared_ptrgraph_id()) + ".ir"; DumpIR(file_path, kernel_graph); - DumpIRProto(kernel_graph, "before_hwopt"); + DumpIRProto(kernel_graph, "before_hwopt_" + std::to_string(kernel_graph->graph_id())); } auto optimizer = std::make_shared(); auto ir_fusion_pm = std::make_shared("ir_fusion_pm"); @@ -305,7 +305,7 @@ void AscendBackendOptimization(const std::shared_ptr &kern std::string file_path = save_graphs_path + "/" + "hwopt_d_end" + "_graph_" + std::to_string(kernel_graph->graph_id()) + ".ir"; DumpIR(file_path, kernel_graph, true); - DumpIRProto(kernel_graph, "after_hwopt"); + DumpIRProto(kernel_graph, "after_hwopt_" + std::to_string(kernel_graph->graph_id())); } } diff --git a/mindspore/ccsrc/session/ascend_session.cc b/mindspore/ccsrc/session/ascend_session.cc index 76bc0752f2..c2bdf8b221 100644 --- a/mindspore/ccsrc/session/ascend_session.cc +++ b/mindspore/ccsrc/session/ascend_session.cc @@ -263,6 +263,7 @@ void AscendSession::BuildGraph(GraphId graph_id) { } // sync the inital const tensor to device SyncInitialTenosrToDevice(); + ExportChildGraphs(graph_id); MS_LOG(INFO) << "end"; } @@ -558,6 +559,36 @@ void AscendSession::Dump(const std::shared_ptr &kernel_graph) const MS_LOG(INFO) << "Finish!"; } +void AscendSession::ExportChildGraphs(const GraphId graph_id) { +#ifdef ENABLE_DUMP_IR + auto context_ptr = MsContext::GetInstance(); + MS_EXCEPTION_IF_NULL(context_ptr); + bool save_graphs = context_ptr->save_graphs_flag(); + if (!save_graphs) { + return; + } + auto save_graphs_path = context_ptr->save_graphs_path(); + if (save_graphs_path.empty()) { + save_graphs_path = "."; + } + if (graph_id == final_graph_id_) { + auto &graph_order = GetGraphOrder(final_graph_id_); + auto &graph_type = GetGraphOrderType(final_graph_id_); + for (size_t i = 0; i < graph_order.size(); i++) { + if (graph_type[i] == BRANCH_END || graph_type[i] == BRANCH_START) { + continue; + } + auto child_graph = GetGraph(graph_order[i]); + MS_LOG(DEBUG) << "Start export child graph " << graph_order[i]; + std::string file_path = save_graphs_path + "/graph_build_" + std::to_string(child_graph->graph_id()) + ".ir"; + DumpIR(file_path, child_graph, true); + DumpIRProto(child_graph, "vm_build_" + std::to_string(child_graph->graph_id())); + MS_LOG(DEBUG) << "End export child graph " << graph_order[i]; + } + } +#endif +} + GraphId AscendSession::SetFinalGraphInput(const std::vector &args) { MS_LOG(INFO) << "Start! Args size " << args.size(); auto final_graph = NewKernelGraph(); diff --git a/mindspore/ccsrc/session/ascend_session.h b/mindspore/ccsrc/session/ascend_session.h index 5a7b50d7c5..6430691462 100755 --- a/mindspore/ccsrc/session/ascend_session.h +++ b/mindspore/ccsrc/session/ascend_session.h @@ -82,6 +82,7 @@ class AscendSession : public SessionBasic { void LoadTask(const std::shared_ptr &kernel_graph) const; void ExecTask(const std::shared_ptr &kernel_graph) const; void Dump(const std::shared_ptr &kernel_graph) const; + void ExportChildGraphs(const GraphId graph_id); // below functions are used for run op void RunOpHardwareOptimize(const std::shared_ptr &kernel_graph) const; void RunOpExecTask(const std::shared_ptr &kernel_graph) const;