| 183 | } |
| 184 | |
| 185 | std::function<TaskNode*(const std::string&)> MakeGetterTaskNode4SoleOpName( |
| 186 | const HashSet<TaskNode*>& task_nodes) { |
| 187 | auto op_name2task_nodes = std::make_shared<HashMap<std::string, HashSet<TaskNode*>>>(); |
| 188 | for (TaskNode* task_node : task_nodes) { |
| 189 | if (task_node->exec_gph().node_num() == 1) { |
| 190 | ExecNode* exec_node = task_node->exec_gph().SoleNode(); |
| 191 | CHECK((*op_name2task_nodes)[exec_node->op()->op_name()].emplace(task_node).second); |
| 192 | } |
| 193 | } |
| 194 | return [op_name2task_nodes](const std::string& op_name) -> TaskNode* { |
| 195 | const auto& iter = op_name2task_nodes->find(op_name); |
| 196 | if (iter == op_name2task_nodes->end()) { return nullptr; } |
| 197 | if (iter->second.size() > 1) { return nullptr; } |
| 198 | return *iter->second.begin(); |
| 199 | }; |
| 200 | } |
| 201 | |
| 202 | bool IsLbiOnTaskEdge(const TaskEdge* edge, const LogicalBlobId& lbi) { |
| 203 | for (const auto& regst_desc : edge->GetRegsts()) { |