#include "P2PCommunicator.hpp" void P2PCommunicator::Communicate(State* model) { AsyncCommunicate(model).Wait(); } Communicator::MpiRequest P2PCommunicator::AsyncCommunicate(State* model) { Communicator::MpiRequest::DoubleVector 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}; }