Newer
Older
Thomas Steinreiter
committed
#include "CollectiveCommunicator.hpp"
void CollectiveCommunicator::Communicate(State* model) {
if (commDistGraph_ == MPI_COMM_NULL)
Thomas Steinreiter
committed
MpiReportErrorAbort("Communicator not initialized");
MPI_Neighbor_alltoallw(model, // sendbuf
sizes_.data(), // sendcounts
sendDisplacements_.data(), // sdispl
sendTypes_.data(), // sendtypes
Thomas Steinreiter
committed
model, // recvbuf
sizes_.data(), // recvcounts
recvDisplacements_.data(), // rdispls
recvTypes_.data(), // recvtypes
commDistGraph_ // comm
Thomas Steinreiter
committed
);
}
MpiRequest CollectiveCommunicator::AsyncCommunicate(State* model) {
if (commDistGraph_ == MPI_COMM_NULL)
Thomas Steinreiter
committed
MpiReportErrorAbort("Communicator not initialized");
MPI_Request req;
MPI_Ineighbor_alltoallw(model, // sendbuf
sizes_.data(), // sendcounts
sendDisplacements_.data(), // sdispl
sendTypes_.data(), // sendtypes
Thomas Steinreiter
committed
model, // recvbuf
sizes_.data(), // recvcounts
recvDisplacements_.data(), // rdispls
recvTypes_.data(), // recvtypes
commDistGraph_, // comm
Thomas Steinreiter
committed
&req); // request
return MpiRequest{{req}};
}