in astra-sim-alibabacloud/astra-sim/system/collective/NcclTreeFlowModel.cc [297:331]
bool NcclTreeFlowModel::init_recv_ready() {
std::map<std::pair<int,std::vector<int>>,std::vector<int>> recv_ready_flows;
for(auto flow : _flow_models){
if(flow.second.src!=id) continue;
if(flow.second.chunk_id!=0)continue;
if (flow.second.parent_flow_id.size() == 0)
continue;
std::pair<int, std::vector<int>> cur =
std::make_pair(flow.second.channel_id, flow.second.prev);
if (recv_ready_flows.count(cur) == 0) {
recv_ready_flows[cur] = {flow.second.flow_id};
} else {
std::vector<int> flow_ids = recv_ready_flows[cur];
bool flag = true;
for (int flow_id : flow_ids) {
MockNccl::SingleFlow old_flow =
_flow_models[std::make_pair(flow.second.channel_id, flow_id)];
if (old_flow.parent_flow_id == flow.second.parent_flow_id) {
flag = false;
break;
}
}
if (flag) {
recv_ready_flows[cur].push_back(flow.second.flow_id);
}
}
}
std::map<std::pair<int,std::vector<int>>,std::vector<int>>::iterator recv_ready_flow_it;
for(recv_ready_flow_it = recv_ready_flows.begin();recv_ready_flow_it!=recv_ready_flows.end();recv_ready_flow_it++){
for(int flow_id: recv_ready_flow_it->second){
recv_ready(recv_ready_flow_it->first.first,flow_id);
}
}
return true;
}