#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}}; }