From a747a1e29ef75872e3292ec399f1d933441ffee0 Mon Sep 17 00:00:00 2001 From: wenchunjiang Date: Mon, 17 Aug 2020 10:37:56 +0800 Subject: [PATCH] fix codedex and reviewbot --- .../backend/session/ascend_control_parser.cc | 42 ++++++++++--------- .../backend/session/ascend_control_parser.h | 4 ++ .../session/ascend_inference_session.cc | 1 - .../ccsrc/backend/session/ascend_session.cc | 8 ++-- .../ccsrc/backend/session/gpu_session.cc | 1 - .../ccsrc/backend/session/infer_session.cc | 15 +++++-- .../ccsrc/backend/session/infer_session.h | 2 +- .../ccsrc/backend/session/kernel_graph.cc | 34 ++++++++------- .../ccsrc/backend/session/kernel_graph.h | 3 ++ 9 files changed, 66 insertions(+), 44 deletions(-) diff --git a/mindspore/ccsrc/backend/session/ascend_control_parser.cc b/mindspore/ccsrc/backend/session/ascend_control_parser.cc index ef1f5f9f47..08b23f3d67 100644 --- a/mindspore/ccsrc/backend/session/ascend_control_parser.cc +++ b/mindspore/ccsrc/backend/session/ascend_control_parser.cc @@ -261,6 +261,15 @@ void AscendControlParser::EraseParameter(NotNull root_graph, } } + EraseAssign(all_nodes, para_to_written_node, root_graph); + root_graph->set_execution_order(exec_order); +} + +void AscendControlParser::EraseAssign(const std::set &all_nodes, + const std::map ¶_to_written_node, + NotNull root_graph) { + std::vector exec_order = root_graph->execution_order(); + ReferenceCounter parameter_count([](int32_t read, int32_t write) -> bool { return write == 1; }); while (parameter_count.HasValidElem()) { auto [para, read, written] = parameter_count.GetOneValidElem(); MS_LOG(INFO) << para->DebugString() << " was read " << read << " times, written " << written << " times."; @@ -293,7 +302,6 @@ void AscendControlParser::EraseParameter(NotNull root_graph, } } } - root_graph->set_execution_order(exec_order); } void AscendControlParser::EraseLabel(NotNull root_graph) { @@ -740,6 +748,18 @@ std::vector AscendControlParser::RecurseGraph(NotNull std::vector execution_order; uint32_t child_order_index = 0; + auto recurse_child_graph = [&](uint32_t index, uint32_t label_index, const CNodePtr &node) { + if (!CheckLabelIndex(index, label_index, node)) { + MS_LOG(EXCEPTION) << "Check label index fail"; + } + if (child_order_index >= graph->child_graph_order().size()) { + MS_LOG(EXCEPTION) << "Index out of range:" << graph->child_graph_order().size(); + } + auto child_graph = graph->child_graph_order()[child_order_index++]; + auto child_execution_order = RecurseGraph(NOT_NULL(child_graph), memo); + execution_order.insert(execution_order.end(), child_execution_order.begin(), child_execution_order.end()); + }; + for (auto &node : cnodes) { uint32_t child_graph_index = 0; execution_order.push_back(node); @@ -749,27 +769,11 @@ std::vector AscendControlParser::RecurseGraph(NotNull if (AnfAlgo::CheckPrimitiveType(node, prim::kPrimLabelSwitch)) { std::vector label_switch_list = AnfAlgo::GetNodeAttr>(node, kAttrLabelSwitchList); for (auto iter = label_switch_list.rbegin(); iter != label_switch_list.rend(); ++iter) { - if (!CheckLabelIndex(child_graph_index++, *iter, node)) { - MS_LOG(EXCEPTION) << "Check label index fail"; - } - if (child_order_index >= graph->child_graph_order().size()) { - MS_LOG(EXCEPTION) << "Index out of range:" << graph->child_graph_order().size(); - } - auto child_graph = graph->child_graph_order()[child_order_index++]; - auto child_execution_order = RecurseGraph(NOT_NULL(child_graph), memo); - execution_order.insert(execution_order.end(), child_execution_order.begin(), child_execution_order.end()); + recurse_child_graph(child_graph_index++, *iter, node); } } else if (AnfAlgo::CheckPrimitiveType(node, prim::kPrimLabelGoto)) { uint32_t label_index = AnfAlgo::GetNodeAttr(node, kAttrLabelIndex); - if (!CheckLabelIndex(child_graph_index, label_index, node)) { - MS_LOG(EXCEPTION) << "Check label index fail"; - } - if (child_order_index >= graph->child_graph_order().size()) { - MS_LOG(EXCEPTION) << "Index out of range:" << graph->child_graph_order().size(); - } - auto child_graph = graph->child_graph_order()[child_order_index++]; - auto child_execution_order = RecurseGraph(NOT_NULL(child_graph), memo); - execution_order.insert(execution_order.end(), child_execution_order.begin(), child_execution_order.end()); + recurse_child_graph(child_graph_index, label_index, node); } } graph->set_execution_order(execution_order); diff --git a/mindspore/ccsrc/backend/session/ascend_control_parser.h b/mindspore/ccsrc/backend/session/ascend_control_parser.h index ae64bd8d3a..555de41622 100644 --- a/mindspore/ccsrc/backend/session/ascend_control_parser.h +++ b/mindspore/ccsrc/backend/session/ascend_control_parser.h @@ -44,6 +44,9 @@ class AscendControlParser { class ReferenceCounter; static void EraseParameter(NotNull root_graph, const std::set &graph_list); + static void EraseAssign(const std::set &all_nodes, + const std::map ¶_to_written_node, + NotNull root_graph); static void EraseLabel(NotNull root_graph); static void ChildGraphDataAssign(NotNull kg, const NotNull> *> link_list, @@ -77,6 +80,7 @@ class AscendControlParser { class AscendControlParser::ReferenceCounter { public: explicit ReferenceCounter(std::function func) : predicate_(func), count_() {} + ~ReferenceCounter() = default; void AddReadCount(const AnfNodePtr &key, int32_t num); void AddWriteCount(const AnfNodePtr &key, int32_t num); void EraseElem(const AnfNodePtr &key); diff --git a/mindspore/ccsrc/backend/session/ascend_inference_session.cc b/mindspore/ccsrc/backend/session/ascend_inference_session.cc index 421c5a10ad..736f4e9d16 100644 --- a/mindspore/ccsrc/backend/session/ascend_inference_session.cc +++ b/mindspore/ccsrc/backend/session/ascend_inference_session.cc @@ -236,6 +236,5 @@ void AscendInferenceSession::GetModelInputsInfo(uint32_t graph_id, std::vector &kernel_graph tensor_loader->EmptyPrevTensor(); } #endif - } // namespace gpu } // namespace session } // namespace mindspore diff --git a/mindspore/ccsrc/backend/session/infer_session.cc b/mindspore/ccsrc/backend/session/infer_session.cc index 02bed639d3..1cff6a3b7c 100644 --- a/mindspore/ccsrc/backend/session/infer_session.cc +++ b/mindspore/ccsrc/backend/session/infer_session.cc @@ -33,7 +33,8 @@ using std::string; using std::vector; namespace py = pybind11; -namespace mindspore::inference { +namespace mindspore { +namespace inference { std::shared_ptr InferSession::CreateSession(const std::string &device, uint32_t device_id) { try { @@ -153,7 +154,10 @@ Status ServingTensor2MSTensor(size_t index, const InferTensorBase &out_tensor, t MSI_LOG_ERROR << "invalid data buffer"; return FAILED; } - memcpy_s(ms_tensor->data_c(), ms_tensor->Size(), out_tensor.data(), out_tensor.data_size()); + auto ret_code = memcpy_s(ms_tensor->data_c(), ms_tensor->Size(), out_tensor.data(), out_tensor.data_size()); + if (ret_code != 0) { + MS_LOG(ERROR) << "Failed to copy data from ms_tensor to out_tensor."; + } return SUCCESS; } @@ -272,6 +276,10 @@ void MSInferSession::RegAllOp() { return; } PyObject *c_expression_dict = PyModule_GetDict(c_expression); + if (c_expression_dict == nullptr) { + MS_LOG(EXCEPTION) << "Failed to get dict from mindspore._c_expression module."; + return; + } PyObject *op_info_loader_class = PyDict_GetItemString(c_expression_dict, "OpInfoLoaderPy"); if (op_info_loader_class == nullptr) { @@ -392,4 +400,5 @@ Status MSInferSession::GetModelInputsInfo(uint32_t model_id, std::vector session_impl_ = nullptr; std::vector graph_id_; std::string device_type_; - int32_t device_id_; + int32_t device_id_ = 0; #ifdef ENABLE_D rtContext_t context_ = nullptr; #endif diff --git a/mindspore/ccsrc/backend/session/kernel_graph.cc b/mindspore/ccsrc/backend/session/kernel_graph.cc index 4f2484ba2c..ce57baa1dd 100644 --- a/mindspore/ccsrc/backend/session/kernel_graph.cc +++ b/mindspore/ccsrc/backend/session/kernel_graph.cc @@ -246,6 +246,10 @@ void KernelGraph::SetExecOrderByDefault() { } CheckLoop(); // resort start label / end goto + execution_order_ = SortStartLabelAndEndGoto(); +} + +std::vector KernelGraph::SortStartLabelAndEndGoto() { std::vector re_order; if (start_label_ != nullptr) { re_order.push_back(start_label_); @@ -272,7 +276,7 @@ void KernelGraph::SetExecOrderByDefault() { if (end_goto_ != nullptr) { re_order.push_back(end_goto_); } - execution_order_ = re_order; + return re_order; } void KernelGraph::CheckLoop() { @@ -736,27 +740,29 @@ void KernelGraph::UpdateControlDependRelations(const std::vector &de for (const auto &tmp : prior_nodes) { GetAllFatherRealNode(tmp, &real_prior_nodes, &prior_visited); } - std::vector real_depend_nodes; std::set depend_visited; for (const auto &tmp : depend_nodes) { GetAllFatherRealNode(tmp, &real_depend_nodes, &depend_visited); } + UpdateNodeInputOutputEdges(real_prior_nodes, real_depend_nodes); + } +} - for (auto &first_node : real_prior_nodes) { - if (AnfAlgo::CheckPrimitiveType(first_node, prim::kPrimControlDepend)) { +void KernelGraph::UpdateNodeInputOutputEdges(const std::vector &real_prior_nodes, + const std::vector &real_depend_nodes) { + for (auto &first_node : real_prior_nodes) { + if (AnfAlgo::CheckPrimitiveType(first_node, prim::kPrimControlDepend)) { + continue; + } + for (auto &second_node : real_depend_nodes) { + if (AnfAlgo::CheckPrimitiveType(second_node, prim::kPrimControlDepend)) { continue; } - for (auto &second_node : real_depend_nodes) { - if (AnfAlgo::CheckPrimitiveType(second_node, prim::kPrimControlDepend)) { - continue; - } - MS_EXCEPTION_IF_NULL(first_node); - MS_EXCEPTION_IF_NULL(second_node); - MS_LOG(DEBUG) << "Add first node:" << first_node->DebugString() - << ",second node:" << second_node->DebugString(); - AddDependEdge(second_node, first_node, 1); - } + MS_EXCEPTION_IF_NULL(first_node); + MS_EXCEPTION_IF_NULL(second_node); + MS_LOG(DEBUG) << "Add first node:" << first_node->DebugString() << ",second node:" << second_node->DebugString(); + AddDependEdge(second_node, first_node, 1); } } } diff --git a/mindspore/ccsrc/backend/session/kernel_graph.h b/mindspore/ccsrc/backend/session/kernel_graph.h index 6f22aff3e2..c2cce88b70 100644 --- a/mindspore/ccsrc/backend/session/kernel_graph.h +++ b/mindspore/ccsrc/backend/session/kernel_graph.h @@ -174,6 +174,8 @@ class KernelGraph : public FuncGraph { void UpdateNodeEdgeList(std::queue *seed_nodes); // add node depend edge by data edge or control depend void AddDependEdge(const AnfNodePtr &node, const AnfNodePtr &input, size_t depend_edge_num); + void UpdateNodeInputOutputEdges(const std::vector &real_prior_nodes, + const std::vector &real_depend_nodes); // handle control depend std::vector GetOutputNodes(const AnfNodePtr &node); bool HandleControlDependNode(const AnfNodePtr &node, std::queue *que, @@ -183,6 +185,7 @@ class KernelGraph : public FuncGraph { AnfNodePtr TransParameterTuple(const AbstractBasePtr &abstract); AnfNodePtr TransCNodeTuple(const CNodePtr &node); AnfNodePtr CreatTupleGetItemNode(const AnfNodePtr &node, size_t output_idx); + std::vector SortStartLabelAndEndGoto(); std::shared_ptr> inputs_; std::vector child_graph_result_;