WIP: Feature/convenient mpi
Hi, we propose here a more convenient interface to MPI, which implements the following features:
- non-blocking communications using future-concept (oriented at std::future)
- supporting exceptions
- MPIErrors are treat by exceptions
- extending existing MPIGuard capabilities
- using ULFM if available
- fallback to blackchannel approach, which is used to propagate an error state through the communicator and prevent deadlocks.
- resource management for MPI_Comm
- Datatypes
- communication of dynamic datatypes that are stored in consecutive memory (e.g. std::vector)
- MPIPack represents MPI_Pack. It can collocate objects of different types and send it within a single statement.
- Point to point communication (blocking and nonblocking)
- Collective communication (blocking and non-blocking)
- Low-level wrapper for MPI_IO (File IO)
- Low-level wrapper for MPI_Win (Remote memory access)
- high-level methods
- Generic ring communication
- NeighborIndexMapping construction
Sometimes we where a little bit rough when remove old interfaces. E.g.
- CollectiveCommunication<MPI_Comm>
- GuardCommunicator Whats you opinion?
I'm try to put sufficient documentation in the code, please let me know where things are not clear.
I'm looking forward to comments.
Best, Nils
Merge request reports
Activity
@nils.dreier It would be very nice if you could push this branch onto the core repository. That way people can check it out locally much easier. I granted you sufficient rights.
Nils is on holidays for the week and asked me to copy the branch to core. It is now available at https://gitlab.dune-project.org/core/dune-common/tree/feature/convenient_mpi (I seem to be unable to change the source branch for this MR, so you'll have to live with the core version of the branch not being associated to a MR)