From 95229c472953c1e25592b904076be1d552249674 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 5 Feb 2021 14:06:27 +0800 Subject: [PATCH 1/2] Add root_graph output_edges. --- ge/hybrid/model/hybrid_model_builder.cc | 43 +++++++++++++++++++------ ge/hybrid/model/hybrid_model_builder.h | 2 +- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/ge/hybrid/model/hybrid_model_builder.cc b/ge/hybrid/model/hybrid_model_builder.cc index c97636d3..8383347c 100755 --- a/ge/hybrid/model/hybrid_model_builder.cc +++ b/ge/hybrid/model/hybrid_model_builder.cc @@ -702,19 +702,42 @@ Status HybridModelBuilder::UnfoldSubgraph(ComputeGraph &root_graph, } Status HybridModelBuilder::BuildOutputMapping(GraphItem &graph_item, - const NodeItem &node_item) { - auto output_size = node_item.op_desc->GetAllInputsSize(); - GE_CHECK_LE(output_size, UINT32_MAX); - for (uint32_t i = 0; i < static_cast(output_size); ++i) { - uint32_t p_index = i; - // Net output of Subgraph of while do not have parent index - if (AttrUtils::GetInt(node_item.op_desc->GetInputDesc(i), ATTR_NAME_PARENT_NODE_INDEX, p_index)) { - GELOGD("[%s] Parent index not set for input[%u].", node_item.NodeName().c_str(), i); - } + const NodeItem &node_item, + bool is_root_graph) { + auto output_size = node_item.num_inputs; + graph_item.output_edges_.resize(output_size); + + for (auto &in_data_anchor : node_item.node->GetAllInDataAnchors()) { + auto peer_out_anchor = in_data_anchor->GetPeerOutAnchor(); + GE_CHECK_NOTNULL(peer_out_anchor); + auto src_node = peer_out_anchor->GetOwnerNode(); + GE_CHECK_NOTNULL(src_node); - graph_item.output_index_mapping_.emplace_back(p_index); + auto src_node_item = GetNodeItem(src_node); + GE_CHECK_NOTNULL(src_node_item); + auto output_idx = in_data_anchor->GetIdx(); + auto output_offset = src_node_item->output_start + peer_out_anchor->GetIdx(); + GELOGI("Output[%d], node = %s, output_index = %d, output_offset = %d ", + output_idx, + src_node_item->NodeName().c_str(), + peer_out_anchor->GetIdx(), + output_offset); + + GE_CHECK_LE(output_idx, output_size - 1); + graph_item.output_edges_[output_idx] = {src_node_item, peer_out_anchor->GetIdx()}; } + if (!is_root_graph) { + for (uint32_t i = 0; i < static_cast(output_size); ++i) { + uint32_t p_index = i; + // Net output of Subgraph of while do not have parent index + if (AttrUtils::GetInt(node_item.op_desc->GetInputDesc(i), ATTR_NAME_PARENT_NODE_INDEX, p_index)) { + GELOGD("[%s] Parent index not set for input[%u].", node_item.NodeName().c_str(), i); + } + + graph_item.output_index_mapping_.emplace_back(p_index); + } + } return SUCCESS; } diff --git a/ge/hybrid/model/hybrid_model_builder.h b/ge/hybrid/model/hybrid_model_builder.h index 107ace78..71663a6e 100644 --- a/ge/hybrid/model/hybrid_model_builder.h +++ b/ge/hybrid/model/hybrid_model_builder.h @@ -53,7 +53,7 @@ class HybridModelBuilder { std::vector &data_nodes, bool is_root_graph); static Status ResolveRefIo(NodeItem &node_item); - Status BuildOutputMapping(GraphItem &partitioned_call, const NodeItem &node_item); + Status BuildOutputMapping(GraphItem &partitioned_call, const NodeItem &node_item, bool is_root_graph); Status ValidateParams(); Status LoadGraph(); Status LoadGeModel(ComputeGraph &graph, const GeModelPtr &ge_model); From 6b2bf715a290481998255bb7f2e7649098f1047c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 5 Feb 2021 14:51:25 +0800 Subject: [PATCH 2/2] Add root_graph output_edges. --- ge/hybrid/model/hybrid_model_builder.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ge/hybrid/model/hybrid_model_builder.cc b/ge/hybrid/model/hybrid_model_builder.cc index 8383347c..d2862553 100755 --- a/ge/hybrid/model/hybrid_model_builder.cc +++ b/ge/hybrid/model/hybrid_model_builder.cc @@ -738,6 +738,7 @@ Status HybridModelBuilder::BuildOutputMapping(GraphItem &graph_item, graph_item.output_index_mapping_.emplace_back(p_index); } } + return SUCCESS; } @@ -1899,9 +1900,7 @@ Status HybridModelBuilder::LoadDynamicSubgraph(ComputeGraph &graph, bool is_root data_nodes.emplace_back(node_item); } else if (op_type == NETOUTPUT) { graph_item->output_node_ = node_item; - if (!is_root_graph) { - GE_CHK_STATUS_RET_NOLOG(BuildOutputMapping(*graph_item, *node_item)); - } + GE_CHK_STATUS_RET_NOLOG(BuildOutputMapping(*graph_item, *node_item, is_root_graph)); } GE_CHK_STATUS_RET_NOLOG(CreateProfilingNodeBefore(*graph_item, node)); graph_item->node_items_.emplace_back(node_item);