|
|
@@ -131,6 +131,8 @@ const int64_t kInvalidDynaimcDimsType = -1; |
|
|
|
const char *const kSubstrOfGetNextNosinkName = "IteratorGetNext"; |
|
|
|
const char *const kShapeDataName = "ascend_mbatch_shape_data"; |
|
|
|
const char *const kGetNextName = "IteratorV2"; |
|
|
|
const char *const kExtAttrDataNodes = "data_nodes"; |
|
|
|
const char *const kExtAttrGetNextNoSink = "getnext_no_sink"; |
|
|
|
|
|
|
|
bool IsTailingOptimization() { |
|
|
|
string is_tailing_optimization_option; |
|
|
@@ -2731,37 +2733,6 @@ void GraphManager::PreRunThread(GraphManager *graph_manager) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
Status GraphManager::DistinguishGetNextAndData(ComputeGraphPtr &graph, vector<NodePtr> &data_nodes, |
|
|
|
vector<NodePtr> &getnext_nosink_nodes, |
|
|
|
vector<NodePtr> &getnext_sink_nodes) { |
|
|
|
GELOGD("Start distinguish getnext and data node."); |
|
|
|
for (NodePtr &input_node : graph->GetDirectNode()) { |
|
|
|
GE_CHECK_NOTNULL(input_node); |
|
|
|
OpDescPtr op_desc = input_node->GetOpDesc(); |
|
|
|
GE_CHECK_NOTNULL(op_desc); |
|
|
|
if (op_desc->GetType() == DATA && op_desc->GetName() != kShapeDataName) { |
|
|
|
if (op_desc->GetName().find(kSubstrOfGetNextNosinkName) == string::npos) { |
|
|
|
data_nodes.emplace_back(input_node); |
|
|
|
} else { |
|
|
|
getnext_nosink_nodes.emplace_back(input_node); |
|
|
|
} |
|
|
|
} |
|
|
|
std::string op_type; |
|
|
|
auto ret = GetOriginalType(input_node, op_type); |
|
|
|
if (ret != SUCCESS) { |
|
|
|
GELOGE(FAILED, "Failed to get node %s original type.", input_node->GetName().c_str()); |
|
|
|
return FAILED; |
|
|
|
} |
|
|
|
if (op_type == kGetNextName) { |
|
|
|
GELOGD("Name of getnext sink is %s.", op_desc->GetName().c_str()); |
|
|
|
getnext_sink_nodes.emplace_back(input_node); |
|
|
|
} |
|
|
|
} |
|
|
|
GELOGI("data count is %zu, getnext nosink count is %zu, getnext sink count is %zu.", data_nodes.size(), |
|
|
|
getnext_nosink_nodes.size(), getnext_sink_nodes.size()); |
|
|
|
return SUCCESS; |
|
|
|
} |
|
|
|
|
|
|
|
void GraphManager::ParseInputsDimsForData(const std::vector<InputTensorInfo> &input_tensor) { |
|
|
|
GELOGD("Start parse input dims from data."); |
|
|
|
for (size_t i = 0; i < input_tensor.size(); ++i) { |
|
|
@@ -2804,11 +2775,8 @@ Status GraphManager::ParseInputsDims(const std::vector<InputTensorInfo> &input_t |
|
|
|
if (!GetLocalOmgContext().dynamic_node_type.empty()) { |
|
|
|
vector<NodePtr> data_nodes; |
|
|
|
vector<NodePtr> getnext_nosink_nodes; |
|
|
|
vector<NodePtr> getnext_sink_nodes; |
|
|
|
if (DistinguishGetNextAndData(compute_graph_, data_nodes, getnext_nosink_nodes, getnext_sink_nodes) != SUCCESS) { |
|
|
|
GELOGE(PARAM_INVALID, "Failed to distinguish getnext and data node."); |
|
|
|
return PARAM_INVALID; |
|
|
|
} |
|
|
|
data_nodes = compute_graph_->TryGetExtAttr(kExtAttrDataNodes, data_nodes); |
|
|
|
getnext_nosink_nodes = compute_graph_->TryGetExtAttr(kExtAttrGetNextNoSink, getnext_nosink_nodes); |
|
|
|
if (GetLocalOmgContext().dynamic_node_type == DATA) { |
|
|
|
if (getnext_nosink_nodes.empty()) { |
|
|
|
// just data or data+getnext_sink |
|
|
|