- 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_allgatherv.cpp
r1354 r1520 20 20 { 21 21 22 if(!comm .is_ep && comm.mpi_comm)22 if(!comm->is_ep && comm->mpi_comm) 23 23 { 24 return ::MPI_Allgatherv(sendbuf, sendcount, to_mpi_type(sendtype), recvbuf, recvcounts, displs, to_mpi_type(recvtype), to_mpi_comm(comm .mpi_comm));24 return ::MPI_Allgatherv(sendbuf, sendcount, to_mpi_type(sendtype), recvbuf, recvcounts, displs, to_mpi_type(recvtype), to_mpi_comm(comm->mpi_comm)); 25 25 } 26 26 27 if(!comm .mpi_comm) return 0;27 if(!comm->mpi_comm) return 0; 28 28 29 29 … … 38 38 39 39 40 int ep_rank = comm .ep_comm_ptr->size_rank_info[0].first;41 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;42 int mpi_rank = comm .ep_comm_ptr->size_rank_info[2].first;43 int ep_size = comm .ep_comm_ptr->size_rank_info[0].second;44 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;45 int mpi_size = comm .ep_comm_ptr->size_rank_info[2].second;40 int ep_rank = comm->ep_comm_ptr->size_rank_info[0].first; 41 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 42 int mpi_rank = comm->ep_comm_ptr->size_rank_info[2].first; 43 int ep_size = comm->ep_comm_ptr->size_rank_info[0].second; 44 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 45 int mpi_size = comm->ep_comm_ptr->size_rank_info[2].second; 46 46 47 47 assert(sendcount == recvcounts[ep_rank]); … … 79 79 80 80 int local_sendcount = std::accumulate(local_recvcounts.begin(), local_recvcounts.end(), 0); 81 ::MPI_Allgather(&local_sendcount, 1, to_mpi_type(MPI_INT), mpi_recvcounts.data(), 1, to_mpi_type(MPI_INT), to_mpi_comm(comm .mpi_comm));81 ::MPI_Allgather(&local_sendcount, 1, to_mpi_type(MPI_INT), mpi_recvcounts.data(), 1, to_mpi_type(MPI_INT), to_mpi_comm(comm->mpi_comm)); 82 82 83 83 for(int i=1; i<mpi_size; i++) … … 85 85 86 86 87 ::MPI_Allgatherv(local_recvbuf, local_sendcount, to_mpi_type(datatype), tmp_recvbuf, mpi_recvcounts.data(), mpi_displs.data(), to_mpi_type(datatype), to_mpi_comm(comm .mpi_comm));87 ::MPI_Allgatherv(local_recvbuf, local_sendcount, to_mpi_type(datatype), tmp_recvbuf, mpi_recvcounts.data(), mpi_displs.data(), to_mpi_type(datatype), to_mpi_comm(comm->mpi_comm)); 88 88 89 89 // reorder … … 92 92 { 93 93 int extra = 0; 94 for(int j=0, k=0; j<ep_size, k<comm .rank_map->at(i).first; j++)95 if(comm .rank_map->at(i).second == comm.rank_map->at(j).second)94 for(int j=0, k=0; j<ep_size, k<comm->ep_rank_map->at(i).first; j++) 95 if(comm->ep_rank_map->at(i).second == comm->ep_rank_map->at(j).second) 96 96 { 97 97 extra += recvcounts[j]; … … 99 99 } 100 100 101 offset = mpi_displs[comm .rank_map->at(i).second] + extra;101 offset = mpi_displs[comm->ep_rank_map->at(i).second] + extra; 102 102 103 103 memcpy(recvbuf+displs[i]*datasize, tmp_recvbuf+offset*datasize, recvcounts[i]*datasize);
Note: See TracChangeset
for help on using the changeset viewer.