bool NcclTreeFlowModel::init_recv_ready()

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;
}