Changeset 1500 for XIOS/dev/branch_openmp/extern/ep_dev/ep_dup.cpp
- Timestamp:
- 05/28/18 09:54:32 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/ep_dev/ep_dup.cpp
r1499 r1500 9 9 int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) 10 10 { 11 if(!comm .is_ep)11 if(!comm->is_ep) 12 12 { 13 13 Debug("Comm_dup MPI\n"); 14 14 newcomm = new MPI_Comm; 15 newcomm->is_ep = comm.is_ep;15 (*newcomm)->is_ep = comm->is_ep; 16 16 17 ::MPI_Comm input = to_mpi_comm(comm .mpi_comm);17 ::MPI_Comm input = to_mpi_comm(comm->mpi_comm); 18 18 ::MPI_Comm *output = new ::MPI_Comm; 19 19 … … 21 21 ::MPI_Comm_dup(input, output); 22 22 23 newcomm->mpi_comm = output;23 (*newcomm)->mpi_comm = output; 24 24 25 25 return 0; 26 26 } 27 27 28 if(comm .is_intercomm) return MPI_Comm_dup_intercomm(comm, newcomm);28 if(comm->is_intercomm) return MPI_Comm_dup_intercomm(comm, newcomm); 29 29 30 30 // for intracomm 31 if(comm .mpi_comm == static_cast< ::MPI_Comm* >(MPI_COMM_NULL.mpi_comm)) return 0;31 if(comm->mpi_comm == static_cast< ::MPI_Comm* >(MPI_COMM_NULL->mpi_comm)) return 0; 32 32 33 33 34 int my_rank = comm .ep_comm_ptr->size_rank_info[1].first;35 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;34 int my_rank = comm->ep_comm_ptr->size_rank_info[1].first; 35 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 36 36 37 37 … … 42 42 ::MPI_Comm *mpi_dup = new ::MPI_Comm; 43 43 44 ::MPI_Comm in_comm = to_mpi_comm(comm .mpi_comm);44 ::MPI_Comm in_comm = to_mpi_comm(comm->mpi_comm); 45 45 46 46 ::MPI_Comm_dup(in_comm, mpi_dup); 47 47 48 48 MPI_Comm_create_endpoints(mpi_dup, num_ep, info, out_comm); 49 comm .ep_comm_ptr->comm_list->mem_bridge = out_comm;49 comm->ep_comm_ptr->comm_list[0]->mem_bridge = out_comm; 50 50 } 51 51 52 52 MPI_Barrier(comm); 53 53 54 *newcomm = (comm .ep_comm_ptr->comm_list->mem_bridge[my_rank]);54 *newcomm = (comm->ep_comm_ptr->comm_list[0]->mem_bridge[my_rank]); 55 55 56 56 return MPI_SUCCESS; … … 60 60 { 61 61 62 if(comm .mpi_comm == static_cast< ::MPI_Comm* >(MPI_COMM_NULL.mpi_comm)) return 0;62 if(comm->mpi_comm == static_cast< ::MPI_Comm* >(MPI_COMM_NULL->mpi_comm)) return 0; 63 63 64 int my_rank = comm .ep_comm_ptr->size_rank_info[1].first;65 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;64 int my_rank = comm->ep_comm_ptr->size_rank_info[1].first; 65 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 66 66 67 67 … … 72 72 ::MPI_Comm *mpi_dup = new ::MPI_Comm; 73 73 74 ::MPI_Comm in_comm = to_mpi_comm(comm .mpi_comm);74 ::MPI_Comm in_comm = to_mpi_comm(comm->mpi_comm); 75 75 76 76 ::MPI_Comm_dup(in_comm, mpi_dup); … … 80 80 ::MPI_Comm *mpi_inter = new ::MPI_Comm; 81 81 82 ::MPI_Comm_dup(to_mpi_comm(comm .ep_comm_ptr->intercomm->mpi_inter_comm), mpi_inter);82 ::MPI_Comm_dup(to_mpi_comm(comm->ep_comm_ptr->intercomm->mpi_inter_comm), mpi_inter); 83 83 84 84 for(int i=0; i<num_ep; i++) 85 85 { 86 out_comm[i] .ep_comm_ptr->comm_label = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->comm_label;87 out_comm[i] .ep_comm_ptr->intercomm = new ep_intercomm;86 out_comm[i]->ep_comm_ptr->comm_label = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->comm_label; 87 out_comm[i]->ep_comm_ptr->intercomm = new ep_intercomm; 88 88 89 out_comm[i] .ep_comm_ptr->intercomm->mpi_inter_comm = mpi_inter;90 out_comm[i] .is_intercomm = true;89 out_comm[i]->ep_comm_ptr->intercomm->mpi_inter_comm = mpi_inter; 90 out_comm[i]->is_intercomm = true; 91 91 92 out_comm[i] .ep_comm_ptr->intercomm->intercomm_rank_map = new RANK_MAP;93 out_comm[i] .ep_comm_ptr->intercomm->local_rank_map = new RANK_MAP;94 out_comm[i] .ep_comm_ptr->intercomm->remote_rank_map = new RANK_MAP;92 out_comm[i]->ep_comm_ptr->intercomm->intercomm_rank_map = new RANK_MAP; 93 out_comm[i]->ep_comm_ptr->intercomm->local_rank_map = new RANK_MAP; 94 out_comm[i]->ep_comm_ptr->intercomm->remote_rank_map = new RANK_MAP; 95 95 96 96 int map_size = 0; 97 map_size = comm .ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->intercomm_rank_map->size();98 out_comm[i] .ep_comm_ptr->intercomm->intercomm_rank_map->resize(map_size);97 map_size = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->intercomm_rank_map->size(); 98 out_comm[i]->ep_comm_ptr->intercomm->intercomm_rank_map->resize(map_size); 99 99 for(int ii=0; ii<map_size; ii++) 100 out_comm[i] .ep_comm_ptr->intercomm->intercomm_rank_map->at(ii) = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->intercomm_rank_map->at(ii);100 out_comm[i]->ep_comm_ptr->intercomm->intercomm_rank_map->at(ii) = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->intercomm_rank_map->at(ii); 101 101 102 map_size = comm .ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->local_rank_map->size();103 out_comm[i] .ep_comm_ptr->intercomm->local_rank_map->resize(map_size);102 map_size = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->local_rank_map->size(); 103 out_comm[i]->ep_comm_ptr->intercomm->local_rank_map->resize(map_size); 104 104 for(int ii=0; ii<map_size; ii++) 105 out_comm[i] .ep_comm_ptr->intercomm->local_rank_map->at(ii) = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->local_rank_map->at(ii);105 out_comm[i]->ep_comm_ptr->intercomm->local_rank_map->at(ii) = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->local_rank_map->at(ii); 106 106 107 map_size = comm .ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->remote_rank_map->size();108 out_comm[i] .ep_comm_ptr->intercomm->remote_rank_map->resize(map_size);107 map_size = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->remote_rank_map->size(); 108 out_comm[i]->ep_comm_ptr->intercomm->remote_rank_map->resize(map_size); 109 109 for(int ii=0; ii<map_size; ii++) 110 out_comm[i] .ep_comm_ptr->intercomm->remote_rank_map->at(ii) = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->remote_rank_map->at(ii);110 out_comm[i]->ep_comm_ptr->intercomm->remote_rank_map->at(ii) = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->remote_rank_map->at(ii); 111 111 112 112 113 //out_comm[i] .ep_comm_ptr->intercomm->intercomm_rank_map = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->intercomm_rank_map;114 //out_comm[i] .ep_comm_ptr->intercomm->local_rank_map = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->local_rank_map;115 //out_comm[i] .ep_comm_ptr->intercomm->remote_rank_map = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->remote_rank_map;113 //out_comm[i]->ep_comm_ptr->intercomm->intercomm_rank_map = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->intercomm_rank_map; 114 //out_comm[i]->ep_comm_ptr->intercomm->local_rank_map = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->local_rank_map; 115 //out_comm[i]->ep_comm_ptr->intercomm->remote_rank_map = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->remote_rank_map; 116 116 117 out_comm[i] .ep_comm_ptr->intercomm->local_comm = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->local_comm;118 out_comm[i] .ep_comm_ptr->intercomm->intercomm_tag = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->intercomm_tag;117 out_comm[i]->ep_comm_ptr->intercomm->local_comm = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->local_comm; 118 out_comm[i]->ep_comm_ptr->intercomm->intercomm_tag = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->intercomm_tag; 119 119 120 120 for(int j =0; j<3; j++) 121 121 { 122 out_comm[i] .ep_comm_ptr->intercomm->size_rank_info[j] = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->size_rank_info[j];122 out_comm[i]->ep_comm_ptr->intercomm->size_rank_info[j] = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->size_rank_info[j]; 123 123 } 124 124 125 125 } 126 126 127 comm .ep_comm_ptr->comm_list->mem_bridge = out_comm;127 comm->ep_comm_ptr->comm_list[0]->mem_bridge = out_comm; 128 128 } 129 129 130 130 MPI_Barrier(comm); 131 131 132 *newcomm = comm .ep_comm_ptr->comm_list->mem_bridge[my_rank];132 *newcomm = comm->ep_comm_ptr->comm_list[0]->mem_bridge[my_rank]; 133 133 134 134
Note: See TracChangeset
for help on using the changeset viewer.