Changeset 1520 for XIOS/dev/branch_openmp/extern/src_ep_dev/ep_gatherv.cpp
- Timestamp:
- 06/04/18 19:25:08 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_gatherv.cpp
r1365 r1520 23 23 ::MPI_Type_get_extent(to_mpi_type(datatype), &lb, &datasize); 24 24 25 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;26 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;25 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 26 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 27 27 28 28 29 29 #pragma omp critical (_gatherv) 30 comm .my_buffer->void_buffer[ep_rank_loc] = const_cast< void* >(sendbuf);30 comm->my_buffer->void_buffer[ep_rank_loc] = const_cast< void* >(sendbuf); 31 31 32 32 MPI_Barrier_local(comm); … … 35 35 { 36 36 for(int i=0; i<num_ep; i++) 37 memcpy(recvbuf + datasize*displs[i], comm .my_buffer->void_buffer[i], datasize*recvcounts[i]);37 memcpy(recvbuf + datasize*displs[i], comm->my_buffer->void_buffer[i], datasize*recvcounts[i]); 38 38 39 39 } … … 46 46 { 47 47 48 if(!comm .is_ep)48 if(!comm->is_ep) 49 49 { 50 50 return ::MPI_Gatherv(const_cast<void*>(sendbuf), sendcount, to_mpi_type(sendtype), recvbuf, const_cast<int*>(input_recvcounts), const_cast<int*>(input_displs), 51 to_mpi_type(recvtype), root, to_mpi_comm(comm .mpi_comm));51 to_mpi_type(recvtype), root, to_mpi_comm(comm->mpi_comm)); 52 52 } 53 53 … … 56 56 57 57 58 int ep_rank = comm .ep_comm_ptr->size_rank_info[0].first;59 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;60 int mpi_rank = comm .ep_comm_ptr->size_rank_info[2].first;61 int ep_size = comm .ep_comm_ptr->size_rank_info[0].second;62 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;63 int mpi_size = comm .ep_comm_ptr->size_rank_info[2].second;58 int ep_rank = comm->ep_comm_ptr->size_rank_info[0].first; 59 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 60 int mpi_rank = comm->ep_comm_ptr->size_rank_info[2].first; 61 int ep_size = comm->ep_comm_ptr->size_rank_info[0].second; 62 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 63 int mpi_size = comm->ep_comm_ptr->size_rank_info[2].second; 64 64 65 int root_mpi_rank = comm .rank_map->at(root).second;66 int root_ep_loc = comm .rank_map->at(root).first;65 int root_mpi_rank = comm->ep_rank_map->at(root).second; 66 int root_ep_loc = comm->ep_rank_map->at(root).first; 67 67 68 68 ::MPI_Aint datasize, lb; … … 126 126 for(int i=0; i<ep_size; i++) 127 127 { 128 mpi_recvcounts[comm .rank_map->at(i).second]+=recvcounts[i];128 mpi_recvcounts[comm->ep_rank_map->at(i).second]+=recvcounts[i]; 129 129 } 130 130 … … 133 133 134 134 135 ::MPI_Gatherv(local_recvbuf, sendcount*num_ep, to_mpi_type(sendtype), tmp_recvbuf, mpi_recvcounts.data(), mpi_displs.data(), to_mpi_type(recvtype), root_mpi_rank, to_mpi_comm(comm .mpi_comm));135 ::MPI_Gatherv(local_recvbuf, sendcount*num_ep, to_mpi_type(sendtype), tmp_recvbuf, mpi_recvcounts.data(), mpi_displs.data(), to_mpi_type(recvtype), root_mpi_rank, to_mpi_comm(comm->mpi_comm)); 136 136 } 137 137 … … 144 144 { 145 145 int extra = 0; 146 for(int j=0, k=0; j<ep_size, k<comm .rank_map->at(i).first; j++)147 if(comm .rank_map->at(i).second == comm.rank_map->at(j).second)146 for(int j=0, k=0; j<ep_size, k<comm->ep_rank_map->at(i).first; j++) 147 if(comm->ep_rank_map->at(i).second == comm->ep_rank_map->at(j).second) 148 148 { 149 149 extra += recvcounts[j]; … … 151 151 } 152 152 153 offset = mpi_displs[comm .rank_map->at(i).second] + extra;153 offset = mpi_displs[comm->ep_rank_map->at(i).second] + extra; 154 154 155 155 memcpy(recvbuf+displs[i]*datasize, tmp_recvbuf+offset*datasize, recvcounts[i]*datasize);
Note: See TracChangeset
for help on using the changeset viewer.