Changeset 1500 for XIOS/dev/branch_openmp/extern/ep_dev/ep_scatter.cpp
- Timestamp:
- 05/28/18 09:54:32 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/ep_dev/ep_scatter.cpp
r1381 r1500 24 24 ::MPI_Type_get_extent(to_mpi_type(sendtype), &lb, &datasize); 25 25 26 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;27 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;26 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 27 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 28 28 29 29 30 30 if(ep_rank_loc == local_root) 31 comm .my_buffer->void_buffer[local_root] = const_cast<void*>(sendbuf);31 comm->my_buffer->void_buffer[local_root] = const_cast<void*>(sendbuf); 32 32 33 33 MPI_Barrier_local(comm); 34 34 35 35 #pragma omp critical (_scatter) 36 memcpy(recvbuf, comm .my_buffer->void_buffer[local_root]+datasize*ep_rank_loc*sendcount, datasize * recvcount);36 memcpy(recvbuf, comm->my_buffer->void_buffer[local_root]+datasize*ep_rank_loc*sendcount, datasize * recvcount); 37 37 38 38 … … 42 42 int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) 43 43 { 44 if(!comm .is_ep)44 if(!comm->is_ep) 45 45 { 46 return ::MPI_Scatter(sendbuf, sendcount, to_mpi_type(sendtype), recvbuf, recvcount, to_mpi_type(recvtype), root, to_mpi_comm(comm .mpi_comm));46 return ::MPI_Scatter(sendbuf, sendcount, to_mpi_type(sendtype), recvbuf, recvcount, to_mpi_type(recvtype), root, to_mpi_comm(comm->mpi_comm)); 47 47 } 48 48 49 49 assert(sendcount == recvcount); 50 50 51 int ep_rank = comm .ep_comm_ptr->size_rank_info[0].first;52 int ep_rank_loc = comm .ep_comm_ptr->size_rank_info[1].first;53 int mpi_rank = comm .ep_comm_ptr->size_rank_info[2].first;54 int ep_size = comm .ep_comm_ptr->size_rank_info[0].second;55 int num_ep = comm .ep_comm_ptr->size_rank_info[1].second;56 int mpi_size = comm .ep_comm_ptr->size_rank_info[2].second;51 int ep_rank = comm->ep_comm_ptr->size_rank_info[0].first; 52 int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first; 53 int mpi_rank = comm->ep_comm_ptr->size_rank_info[2].first; 54 int ep_size = comm->ep_comm_ptr->size_rank_info[0].second; 55 int num_ep = comm->ep_comm_ptr->size_rank_info[1].second; 56 int mpi_size = comm->ep_comm_ptr->size_rank_info[2].second; 57 57 58 int root_mpi_rank = comm .rank_map->at(root).second;59 int root_ep_loc = comm .rank_map->at(root).first;58 int root_mpi_rank = comm->rank_map->at(root).second; 59 int root_ep_loc = comm->rank_map->at(root).first; 60 60 61 61 bool is_master = (ep_rank_loc==0 && mpi_rank != root_mpi_rank ) || ep_rank == root; … … 87 87 for(int i=0; i<ep_size; i++) 88 88 { 89 recvcounts[comm .rank_map->at(i).second]++;89 recvcounts[comm->rank_map->at(i).second]++; 90 90 } 91 91 … … 93 93 displs[i] = displs[i-1] + recvcounts[i-1]; 94 94 95 ::MPI_Gatherv(local_ranks.data(), num_ep, to_mpi_type(MPI_INT), ranks.data(), recvcounts.data(), displs.data(), to_mpi_type(MPI_INT), root_mpi_rank, to_mpi_comm(comm .mpi_comm));95 ::MPI_Gatherv(local_ranks.data(), num_ep, to_mpi_type(MPI_INT), ranks.data(), recvcounts.data(), displs.data(), to_mpi_type(MPI_INT), root_mpi_rank, to_mpi_comm(comm->mpi_comm)); 96 96 } 97 97 … … 121 121 { 122 122 int local_sendcount = num_ep * count; 123 ::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));123 ::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)); 124 124 125 125 if(is_root) for(int i=1; i<mpi_size; i++) displs[i] = displs[i-1] + recvcounts[i-1]; 126 126 127 ::MPI_Scatterv(tmp_sendbuf, recvcounts.data(), displs.data(), to_mpi_type(sendtype), local_recvbuf, num_ep*count, to_mpi_type(recvtype), root_mpi_rank, to_mpi_comm(comm .mpi_comm));127 ::MPI_Scatterv(tmp_sendbuf, recvcounts.data(), displs.data(), to_mpi_type(sendtype), local_recvbuf, num_ep*count, to_mpi_type(recvtype), root_mpi_rank, to_mpi_comm(comm->mpi_comm)); 128 128 129 129 // printf("local_recvbuf = %d %d %d %d\n", static_cast<int*>(local_recvbuf)[0], static_cast<int*>(local_recvbuf)[1], static_cast<int*>(local_recvbuf)[2], static_cast<int*>(local_recvbuf)[3]);
Note: See TracChangeset
for help on using the changeset viewer.