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