diff --git a/mindspore/ccsrc/session/ascend_session.cc b/mindspore/ccsrc/session/ascend_session.cc index 2f1c221883..45f02d7548 100755 --- a/mindspore/ccsrc/session/ascend_session.cc +++ b/mindspore/ccsrc/session/ascend_session.cc @@ -770,7 +770,7 @@ void AscendSession::MergeSwitchCompile() { } void AscendSession::InsertAllAssigns() { - std::set> assigns; + std::vector> assigns; for (auto assign : assigns_) { auto front_anf = std::get<0>(assign); auto to_graph_id = std::get<1>(assign); @@ -782,9 +782,10 @@ void AscendSession::InsertAllAssigns() { MS_LOG(EXCEPTION) << "input_index " << input_idx << " out of range size " << graph_inputs.size(); } auto backend_parameter = graph_inputs[input_idx]; - (void)assigns.insert(std::pair(front_anf, backend_parameter)); + assigns.emplace_back(std::pair(front_anf, backend_parameter)); } // erase the repeat assign + std::set> inserted_nodes; for (auto &assign : assigns) { auto front_anf = assign.first; auto backend_parameter = assign.second; @@ -792,7 +793,10 @@ void AscendSession::InsertAllAssigns() { auto from_graph = GetGraph(from_graph_id); MS_EXCEPTION_IF_NULL(from_graph); auto backend_arg = from_graph->GetBackendAnfByFrontAnf(front_anf); - InsertAssignToGraph(from_graph_id, backend_arg, backend_parameter); + if (inserted_nodes.find(assign) == inserted_nodes.end()) { + InsertAssignToGraph(from_graph_id, backend_arg, backend_parameter); + (void)inserted_nodes.insert(assign); + } } } @@ -857,7 +861,7 @@ void AscendSession::SetChildGraphParameter(const AnfNodePtr &front_anf, GraphId } MS_LOG(INFO) << "Assign of node" << backend_arg->DebugString() << " of graph " << from_graph_id << " to node" << backend_parameter->DebugString() << "of graph " << to_graph_id; - (void)assigns_.insert(std::tuple(front_anf, to_graph_id, input_idx)); + assigns_.emplace_back(std::tuple(front_anf, to_graph_id, input_idx)); } void AscendSession::SetChildGraphParameter(const tensor::TensorPtr &front_tensor, GraphId to_graph_id, diff --git a/mindspore/ccsrc/session/ascend_session.h b/mindspore/ccsrc/session/ascend_session.h index 635003d97c..4f695b2436 100755 --- a/mindspore/ccsrc/session/ascend_session.h +++ b/mindspore/ccsrc/session/ascend_session.h @@ -140,7 +140,7 @@ class AscendSession : public SessionBasic { std::unordered_map> switches_; std::unordered_map condition_output_; // share parameters - std::set> assigns_; + std::vector> assigns_; // initial tensors, these tensor will sync data to device before run graph std::map, tensor::TensorPtr> initial_tenosrs_; // final_graph_id is used in every root graph has it's own session situation