| @@ -146,11 +146,13 @@ Status SubgraphPass::SubgraphOutputNode(const ComputeGraphPtr &graph, const Node | |||||
| // 2. AtomicOp->NetOutput in subgraph | // 2. AtomicOp->NetOutput in subgraph | ||||
| // 3. OutputContinuesRequiredOp->NetOutput in subgraph | // 3. OutputContinuesRequiredOp->NetOutput in subgraph | ||||
| // 4. Data->NetOutput in subgraph but parent_node is not while | // 4. Data->NetOutput in subgraph but parent_node is not while | ||||
| // 5. While->NetOutput in known subgraph | |||||
| std::string op_type; | std::string op_type; | ||||
| bool insert_flag = NodeUtils::GetConstOpType(in_node, op_type) || | bool insert_flag = NodeUtils::GetConstOpType(in_node, op_type) || | ||||
| IsAtomicRequired(in_node, peer_out_anchor->GetIdx()) || IsOutputContinuesRequired(in_node) || | IsAtomicRequired(in_node, peer_out_anchor->GetIdx()) || IsOutputContinuesRequired(in_node) || | ||||
| ((in_node->GetType() == DATA) && (kWhileOpTypes.count(graph->GetParentNode()->GetType()) == 0)) || | ((in_node->GetType() == DATA) && (kWhileOpTypes.count(graph->GetParentNode()->GetType()) == 0)) || | ||||
| (NodeUtils::IsDynamicShape(node) && (kWhileOpTypes.count(in_node->GetType()) != 0)); | |||||
| (!graph->GetGraphUnknownFlag() && NodeUtils::IsDynamicShape(node) && | |||||
| (kWhileOpTypes.count(in_node->GetType()) != 0)); | |||||
| if (insert_flag) { | if (insert_flag) { | ||||
| GELOGD("Insert MemcpyAsync node between %s and %s.", in_node->GetName().c_str(), node->GetName().c_str()); | GELOGD("Insert MemcpyAsync node between %s and %s.", in_node->GetName().c_str(), node->GetName().c_str()); | ||||
| std::string name = node->GetName() + "_input_" + std::to_string(in_data_anchor->GetIdx()) + "_Memcpy"; | std::string name = node->GetName() + "_input_" + std::to_string(in_data_anchor->GetIdx()) + "_Memcpy"; | ||||