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