| 718 | } |
| 719 | |
| 720 | void TaskGraph::GetInplaceOpBlobArgList( |
| 721 | InplaceObasInfo* obas_info, const HashSet<TaskNode*>& dev_nodes, |
| 722 | const std::function<const TaskNode*(const std::string&)>& TaskNode4OpName) const { |
| 723 | auto AddMutableInplaceArgPair = [&](TaskNode* node, const std::string& ibn, |
| 724 | const std::string& obn, const std::string& op_name) { |
| 725 | if (IsInplaceAllowed(node, {ibn, obn}, TaskNode4OpName)) { |
| 726 | auto* pair = obas_info->mut_inplace_oba_pairs.mutable_pair()->Add(); |
| 727 | *pair->mutable_first() = GenOpBlobArg(op_name, ibn); |
| 728 | *pair->mutable_second() = GenOpBlobArg(op_name, obn); |
| 729 | } |
| 730 | }; |
| 731 | auto AddConstInplaceArgPair = [&](TaskNode* node, const std::string& ibn, const std::string& obn, |
| 732 | const std::string& op_name) { |
| 733 | if (IsInplaceAllowed(node, {ibn, obn}, TaskNode4OpName)) { |
| 734 | auto* pair = obas_info->con_inplace_oba_pairs.mutable_pair()->Add(); |
| 735 | *pair->mutable_first() = GenOpBlobArg(op_name, ibn); |
| 736 | *pair->mutable_second() = GenOpBlobArg(op_name, obn); |
| 737 | } |
| 738 | }; |
| 739 | |
| 740 | for (TaskNode* task_node : dev_nodes) { |
| 741 | if (task_node->exec_gph().node_num() != 1) { continue; } |
| 742 | const auto& op = *task_node->exec_gph().SoleNode()->op(); |
| 743 | for (const std::string& ibn : op.input_bns()) { |
| 744 | if (op.InputBlobModifier4Ibn(ibn).is_mutable()) { |
| 745 | CHECK(IsInplaceAllowed(task_node, {ibn}, TaskNode4OpName)); |
| 746 | *obas_info->mut_in_obas.mutable_oba()->Add() = GenOpBlobArg(op.op_name(), ibn); |
| 747 | } |
| 748 | } |
| 749 | for (const auto& pair : task_node->exec_gph().SoleNode()->mut_inplace_obn2ibn()) { |
| 750 | AddMutableInplaceArgPair(task_node, pair.second, pair.first, op.op_name()); |
| 751 | } |
| 752 | for (const auto& pair : task_node->exec_gph().SoleNode()->con_inplace_obn2ibn()) { |
| 753 | AddConstInplaceArgPair(task_node, pair.second, pair.first, op.op_name()); |
| 754 | } |
| 755 | } |
| 756 | } |
| 757 | |
| 758 | void TaskGraph::GetSafeInplaceOpBlobArgList( |
| 759 | InplaceObasInfo* safe_obas_info, const HashSet<TaskNode*>& dev_nodes, |
nothing calls this directly
no test coverage detected