Newer
Older
Thomas Steinreiter
committed
#include "P2PCommunicator.hpp"
void P2PCommunicator::Communicate(State* model) {
AsyncCommunicate(model).Wait();
}
Communicator::MpiRequest P2PCommunicator::AsyncCommunicate(State* model) {
Communicator::MpiRequest::DoubleVector<MPI_Request> reqs;
for (std::size_t i{0}; i < _neighbors.size(); ++i) {
{
MPI_Request req;
MPI_Isend(model + _sendDisplacements[i], // buf
1, // count
_sendTypes[i], // datatype
_neighbors[i], // dest
0, // tag
MPI_COMM_WORLD, // comm
&req); // request
reqs.push_back(req);
}
{
MPI_Request req;
MPI_Irecv(model + _recvDisplacements[i], // buf
1, // count
_recvTypes[i], // datatype
_neighbors[i], // source
0, // tag
MPI_COMM_WORLD, // comm
&req); // request
reqs.push_back(req);
}
}
return MpiRequest{reqs};
}