- Timestamp:
- 10/04/17 17:02:13 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_allgatherv.cpp
r1287 r1289 62 62 63 63 MPI_Gather_local(&sendcount, 1, MPI_INT, local_recvcounts.data(), 0, comm); 64 for(int i=1; i<num_ep; i++) local_displs[i] = local_displs[i-1] + local_recvcounts[i ];64 for(int i=1; i<num_ep; i++) local_displs[i] = local_displs[i-1] + local_recvcounts[i-1]; 65 65 66 66 67 67 if(is_master) 68 68 { 69 local_recvbuf = new void*[datasize * num_ep * count];69 local_recvbuf = new void*[datasize * std::accumulate(local_recvcounts.begin(), local_recvcounts.end(), 0)]; 70 70 tmp_recvbuf = new void*[datasize * std::accumulate(recvcounts, recvcounts+ep_size, 0)]; 71 71 } … … 81 81 std::vector<int>mpi_displs(mpi_size, 0); 82 82 83 int local_sendcount = num_ep * count;83 int local_sendcount = std::accumulate(local_recvcounts.begin(), local_recvcounts.end(), 0); 84 84 MPI_Allgather(&local_sendcount, 1, MPI_INT, mpi_recvcounts.data(), 1, MPI_INT, to_mpi_comm(comm.mpi_comm)); 85 85 … … 99 99 100 100 101 ::MPI_Allgatherv(local_recvbuf, num_ep *count, to_mpi_type(datatype), tmp_recvbuf, mpi_recvcounts.data(), mpi_displs.data(), to_mpi_type(datatype), to_mpi_comm(comm.mpi_comm));101 ::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)); 102 102 103 103 // if(ep_rank == 0)
Note: See TracChangeset
for help on using the changeset viewer.