Changeset 1500 for XIOS/dev/branch_openmp/extern/ep_dev/ep_merge.cpp
- Timestamp:
- 05/28/18 09:54:32 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/ep_dev/ep_merge.cpp
r1381 r1500 18 18 int ep_size, num_ep, mpi_size; 19 19 20 ep_rank = inter_comm .ep_comm_ptr->size_rank_info[0].first;21 ep_rank_loc = inter_comm .ep_comm_ptr->size_rank_info[1].first;22 mpi_rank = inter_comm .ep_comm_ptr->size_rank_info[2].first;23 ep_size = inter_comm .ep_comm_ptr->size_rank_info[0].second;24 num_ep = inter_comm .ep_comm_ptr->size_rank_info[1].second;25 mpi_size = inter_comm .ep_comm_ptr->size_rank_info[2].second;20 ep_rank = inter_comm->ep_comm_ptr->size_rank_info[0].first; 21 ep_rank_loc = inter_comm->ep_comm_ptr->size_rank_info[1].first; 22 mpi_rank = inter_comm->ep_comm_ptr->size_rank_info[2].first; 23 ep_size = inter_comm->ep_comm_ptr->size_rank_info[0].second; 24 num_ep = inter_comm->ep_comm_ptr->size_rank_info[1].second; 25 mpi_size = inter_comm->ep_comm_ptr->size_rank_info[2].second; 26 26 27 27 int local_high = high; 28 28 int remote_high; 29 29 30 int remote_ep_size = inter_comm .ep_comm_ptr->intercomm->remote_rank_map->size();30 int remote_ep_size = inter_comm->ep_comm_ptr->intercomm->remote_rank_map->size(); 31 31 32 32 int local_ep_rank, local_ep_rank_loc, local_mpi_rank; 33 33 int local_ep_size, local_num_ep, local_mpi_size; 34 34 35 local_ep_rank = inter_comm .ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[0].first;36 local_ep_rank_loc = inter_comm .ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[1].first;37 local_mpi_rank = inter_comm .ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[2].first;38 local_ep_size = inter_comm .ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[0].second;39 local_num_ep = inter_comm .ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[1].second;40 local_mpi_size = inter_comm .ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[2].second;35 local_ep_rank = inter_comm->ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[0].first; 36 local_ep_rank_loc = inter_comm->ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[1].first; 37 local_mpi_rank = inter_comm->ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[2].first; 38 local_ep_size = inter_comm->ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[0].second; 39 local_num_ep = inter_comm->ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[1].second; 40 local_mpi_size = inter_comm->ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[2].second; 41 41 42 42 … … 45 45 MPI_Status status[2]; 46 46 MPI_Request request[2]; 47 MPI_Isend(&local_high, 1, MPI_INT, 0, inter_comm .ep_comm_ptr->intercomm->intercomm_tag, inter_comm, &request[0]);48 MPI_Irecv(&remote_high, 1, MPI_INT, 0, inter_comm .ep_comm_ptr->intercomm->intercomm_tag, inter_comm, &request[1]);47 MPI_Isend(&local_high, 1, MPI_INT, 0, inter_comm->ep_comm_ptr->intercomm->intercomm_tag, inter_comm, &request[0]); 48 MPI_Irecv(&remote_high, 1, MPI_INT, 0, inter_comm->ep_comm_ptr->intercomm->intercomm_tag, inter_comm, &request[1]); 49 49 50 50 MPI_Waitall(2, request, status); … … 52 52 53 53 54 MPI_Bcast(&remote_high, 1, MPI_INT, 0, *(inter_comm.ep_comm_ptr->intercomm->local_comm));54 MPI_Bcast(&remote_high, 1, MPI_INT, 0, inter_comm->ep_comm_ptr->intercomm->local_comm); 55 55 56 56 … … 64 64 int intra_ep_size, intra_num_ep, intra_mpi_size; 65 65 66 intra_ep_rank = newintracomm->ep_comm_ptr->size_rank_info[0].first;67 intra_ep_rank_loc = newintracomm->ep_comm_ptr->size_rank_info[1].first;68 intra_mpi_rank = newintracomm->ep_comm_ptr->size_rank_info[2].first;69 intra_ep_size = newintracomm->ep_comm_ptr->size_rank_info[0].second;70 intra_num_ep = newintracomm->ep_comm_ptr->size_rank_info[1].second;71 intra_mpi_size = newintracomm->ep_comm_ptr->size_rank_info[2].second;66 intra_ep_rank = (*newintracomm)->ep_comm_ptr->size_rank_info[0].first; 67 intra_ep_rank_loc = (*newintracomm)->ep_comm_ptr->size_rank_info[1].first; 68 intra_mpi_rank = (*newintracomm)->ep_comm_ptr->size_rank_info[2].first; 69 intra_ep_size = (*newintracomm)->ep_comm_ptr->size_rank_info[0].second; 70 intra_num_ep = (*newintracomm)->ep_comm_ptr->size_rank_info[1].second; 71 intra_mpi_size = (*newintracomm)->ep_comm_ptr->size_rank_info[2].second; 72 72 73 73 … … 85 85 if(intra_ep_rank_loc == 0) 86 86 { 87 ::MPI_Bcast(reorder, intra_ep_size, to_mpi_type(MPI_INT), 0, to_mpi_comm( newintracomm->mpi_comm));87 ::MPI_Bcast(reorder, intra_ep_size, to_mpi_type(MPI_INT), 0, to_mpi_comm((*newintracomm)->mpi_comm)); 88 88 89 89 vector< pair<int, int> > tmp_rank_map(intra_ep_size); … … 92 92 for(int i=0; i<intra_ep_size; i++) 93 93 { 94 tmp_rank_map[reorder[i]] = newintracomm->rank_map->at(i) ;94 tmp_rank_map[reorder[i]] = (*newintracomm)->rank_map->at(i) ; 95 95 } 96 96 97 newintracomm->rank_map->swap(tmp_rank_map);97 (*newintracomm)->rank_map->swap(tmp_rank_map); 98 98 99 99 tmp_rank_map.clear(); … … 102 102 MPI_Barrier_local(*newintracomm); 103 103 104 (*newintracomm) .ep_comm_ptr->size_rank_info[0].first = my_ep_rank;104 (*newintracomm)->ep_comm_ptr->size_rank_info[0].first = my_ep_rank; 105 105 106 106 if(intra_ep_rank_loc == 0) … … 119 119 { 120 120 121 assert(inter_comm .is_intercomm);122 123 if(inter_comm .ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->comm_label == -99)121 assert(inter_comm->is_intercomm); 122 123 if(inter_comm->ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->comm_label == -99) 124 124 { 125 125 return MPI_Intercomm_merge_unique_leader(inter_comm, high, newintracomm); … … 132 132 int num_ep; 133 133 134 ep_rank_loc = inter_comm .ep_comm_ptr->size_rank_info[1].first;135 num_ep = inter_comm .ep_comm_ptr->size_rank_info[1].second;136 137 138 139 int remote_ep_size = inter_comm .ep_comm_ptr->intercomm->remote_rank_map->size();134 ep_rank_loc = inter_comm->ep_comm_ptr->size_rank_info[1].first; 135 num_ep = inter_comm->ep_comm_ptr->size_rank_info[1].second; 136 137 138 139 int remote_ep_size = inter_comm->ep_comm_ptr->intercomm->remote_rank_map->size(); 140 140 141 141 … … 149 149 { 150 150 151 ::MPI_Comm mpi_comm = to_mpi_comm(inter_comm .ep_comm_ptr->intercomm->mpi_inter_comm);151 ::MPI_Comm mpi_comm = to_mpi_comm(inter_comm->ep_comm_ptr->intercomm->mpi_inter_comm); 152 152 153 153 ::MPI_Intercomm_merge(mpi_comm, high, mpi_intracomm); … … 155 155 MPI_Comm_create_endpoints(mpi_intracomm, num_ep, info, ep_intracomm); 156 156 157 inter_comm .ep_comm_ptr->comm_list->mem_bridge = ep_intracomm;157 inter_comm->ep_comm_ptr->comm_list[0]->mem_bridge = ep_intracomm; 158 158 159 159 } … … 165 165 166 166 int my_ep_rank = high? inter_rank+remote_ep_size : inter_rank; 167 int my_ep_rank_loc = inter_comm .ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[1].first;168 int my_num_ep_loc = inter_comm .ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[1].second;169 int my_num_ep_total = inter_comm .ep_comm_ptr->comm_list->mem_bridge[0].ep_comm_ptr->size_rank_info[1].second;170 int my_ep_size = inter_comm .ep_comm_ptr->comm_list->mem_bridge[0].ep_comm_ptr->size_rank_info[0].second;167 int my_ep_rank_loc = inter_comm->ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[1].first; 168 int my_num_ep_loc = inter_comm->ep_comm_ptr->intercomm->local_comm->ep_comm_ptr->size_rank_info[1].second; 169 int my_num_ep_total = inter_comm->ep_comm_ptr->comm_list[0]->mem_bridge[0]->ep_comm_ptr->size_rank_info[1].second; 170 int my_ep_size = inter_comm->ep_comm_ptr->comm_list[0]->mem_bridge[0]->ep_comm_ptr->size_rank_info[0].second; 171 171 172 172 int tmp_intra_ep_rank_loc = high?my_ep_rank_loc+my_num_ep_total-my_num_ep_loc: my_ep_rank_loc; 173 173 174 174 175 *newintracomm = inter_comm .ep_comm_ptr->comm_list->mem_bridge[tmp_intra_ep_rank_loc];176 177 int newintracomm_ep_rank = (*newintracomm) .ep_comm_ptr->size_rank_info[0].first;178 int newintracomm_ep_rank_loc = (*newintracomm) .ep_comm_ptr->size_rank_info[1].first;179 int newintracomm_mpi_rank = (*newintracomm) .ep_comm_ptr->size_rank_info[2].first;180 int newintracomm_ep_size = (*newintracomm) .ep_comm_ptr->size_rank_info[0].second;181 int newintracomm_num_ep = (*newintracomm) .ep_comm_ptr->size_rank_info[1].second;182 int newintracomm_mpi_size = (*newintracomm) .ep_comm_ptr->size_rank_info[2].second;175 *newintracomm = inter_comm->ep_comm_ptr->comm_list[0]->mem_bridge[tmp_intra_ep_rank_loc]; 176 177 int newintracomm_ep_rank = (*newintracomm)->ep_comm_ptr->size_rank_info[0].first; 178 int newintracomm_ep_rank_loc = (*newintracomm)->ep_comm_ptr->size_rank_info[1].first; 179 int newintracomm_mpi_rank = (*newintracomm)->ep_comm_ptr->size_rank_info[2].first; 180 int newintracomm_ep_size = (*newintracomm)->ep_comm_ptr->size_rank_info[0].second; 181 int newintracomm_num_ep = (*newintracomm)->ep_comm_ptr->size_rank_info[1].second; 182 int newintracomm_mpi_size = (*newintracomm)->ep_comm_ptr->size_rank_info[2].second; 183 183 184 184 … … 186 186 buf[0] = my_ep_rank; 187 187 buf[1] = tmp_intra_ep_rank_loc; 188 buf[2] = newintracomm->ep_comm_ptr->size_rank_info[2].first;188 buf[2] = (*newintracomm)->ep_comm_ptr->size_rank_info[2].first; 189 189 190 190 // printf("my_ep_rank = %d, tmp_intra_ep_rank_loc = %d, mpi_rank = %d\n", my_ep_rank, tmp_intra_ep_rank_loc, newintracomm->ep_comm_ptr->size_rank_info[2].first); … … 206 206 for(int i=0; i<newintracomm_ep_size; i++) 207 207 { 208 (*newintracomm) .rank_map->at(rankmap_buf[3*i]).first = rankmap_buf[3*i+1];209 (*newintracomm) .rank_map->at(rankmap_buf[3*i]).second = rankmap_buf[3*i+2];210 } 211 212 213 (*newintracomm) .ep_comm_ptr->size_rank_info[0].first = my_ep_rank;214 (*newintracomm) .ep_comm_ptr->size_rank_info[1].first = tmp_intra_ep_rank_loc;208 (*newintracomm)->rank_map->at(rankmap_buf[3*i]).first = rankmap_buf[3*i+1]; 209 (*newintracomm)->rank_map->at(rankmap_buf[3*i]).second = rankmap_buf[3*i+2]; 210 } 211 212 213 (*newintracomm)->ep_comm_ptr->size_rank_info[0].first = my_ep_rank; 214 (*newintracomm)->ep_comm_ptr->size_rank_info[1].first = tmp_intra_ep_rank_loc; 215 215 216 216
Note: See TracChangeset
for help on using the changeset viewer.