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