Changeset 1520 for XIOS/dev/branch_openmp/extern/src_ep_dev/ep_scatterv.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_scatterv.cpp
r1365 r1520 25 25 ::MPI_Type_get_extent(to_mpi_type(sendtype), &lb, &datasize); 26 26 27 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;28 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;27 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 28 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 29 29 30 30 assert(recvcount == sendcounts[ep_rank_loc]); 31 31 32 32 if(ep_rank_loc == local_root) 33 comm .my_buffer->void_buffer[local_root] = const_cast<void*>(sendbuf);33 comm->my_buffer->void_buffer[local_root] = const_cast<void*>(sendbuf); 34 34 35 35 MPI_Barrier_local(comm); 36 36 37 37 #pragma omp critical (_scatterv) 38 memcpy(recvbuf, comm .my_buffer->void_buffer[local_root]+datasize*displs[ep_rank_loc], datasize * recvcount);38 memcpy(recvbuf, comm->my_buffer->void_buffer[local_root]+datasize*displs[ep_rank_loc], datasize * recvcount); 39 39 40 40 … … 45 45 MPI_Datatype recvtype, int root, MPI_Comm comm) 46 46 { 47 if(!comm .is_ep)47 if(!comm->is_ep) 48 48 { 49 return ::MPI_Scatterv(sendbuf, sendcounts, displs, to_mpi_type(sendtype), recvbuf, recvcount, to_mpi_type(recvtype), root, to_mpi_comm(comm .mpi_comm));49 return ::MPI_Scatterv(sendbuf, sendcounts, displs, to_mpi_type(sendtype), recvbuf, recvcount, to_mpi_type(recvtype), root, to_mpi_comm(comm->mpi_comm)); 50 50 } 51 51 52 52 assert(sendtype == recvtype); 53 53 54 int ep_rank = comm .ep_comm_ptr->size_rank_info[0].first;55 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;56 int mpi_rank = comm .ep_comm_ptr->size_rank_info[2].first;57 int ep_size = comm .ep_comm_ptr->size_rank_info[0].second;58 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;59 int mpi_size = comm .ep_comm_ptr->size_rank_info[2].second;54 int ep_rank = comm->ep_comm_ptr->size_rank_info[0].first; 55 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 56 int mpi_rank = comm->ep_comm_ptr->size_rank_info[2].first; 57 int ep_size = comm->ep_comm_ptr->size_rank_info[0].second; 58 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 59 int mpi_size = comm->ep_comm_ptr->size_rank_info[2].second; 60 60 61 int root_mpi_rank = comm .rank_map->at(root).second;62 int root_ep_loc = comm .rank_map->at(root).first;61 int root_mpi_rank = comm->ep_rank_map->at(root).second; 62 int root_ep_loc = comm->ep_rank_map->at(root).first; 63 63 64 64 bool is_master = (ep_rank_loc==0 && mpi_rank != root_mpi_rank ) || ep_rank == root; … … 90 90 for(int i=0; i<ep_size; i++) 91 91 { 92 recvcounts[comm .rank_map->at(i).second]++;92 recvcounts[comm->ep_rank_map->at(i).second]++; 93 93 } 94 94 … … 96 96 my_displs[i] = my_displs[i-1] + recvcounts[i-1]; 97 97 98 ::MPI_Gatherv(local_ranks.data(), num_ep, to_mpi_type(MPI_INT), ranks.data(), recvcounts.data(), my_displs.data(), to_mpi_type(MPI_INT), root_mpi_rank, to_mpi_comm(comm .mpi_comm));98 ::MPI_Gatherv(local_ranks.data(), num_ep, to_mpi_type(MPI_INT), ranks.data(), recvcounts.data(), my_displs.data(), to_mpi_type(MPI_INT), root_mpi_rank, to_mpi_comm(comm->mpi_comm)); 99 99 } 100 100 … … 124 124 local_sendbuf = new void*[datasize * local_sendcount]; 125 125 126 ::MPI_Gather(&local_sendcount, 1, to_mpi_type(MPI_INT), recvcounts.data(), 1, to_mpi_type(MPI_INT), root_mpi_rank, to_mpi_comm(comm .mpi_comm));126 ::MPI_Gather(&local_sendcount, 1, to_mpi_type(MPI_INT), recvcounts.data(), 1, to_mpi_type(MPI_INT), root_mpi_rank, to_mpi_comm(comm->mpi_comm)); 127 127 128 128 if(is_root) for(int i=1; i<mpi_size; i++) my_displs[i] = my_displs[i-1] + recvcounts[i-1]; 129 129 130 ::MPI_Scatterv(tmp_sendbuf, recvcounts.data(), my_displs.data(), to_mpi_type(sendtype), local_sendbuf, num_ep*count, to_mpi_type(recvtype), root_mpi_rank, to_mpi_comm(comm .mpi_comm));130 ::MPI_Scatterv(tmp_sendbuf, recvcounts.data(), my_displs.data(), to_mpi_type(sendtype), local_sendbuf, num_ep*count, to_mpi_type(recvtype), root_mpi_rank, to_mpi_comm(comm->mpi_comm)); 131 131 132 132 // printf("my_displs = %d %d %d %d\n", my_displs[0], my_displs[1], my_displs[2], my_displs[3] );
Note: See TracChangeset
for help on using the changeset viewer.