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?
TODO
-
Threading support -
replace wait[all|some|any]
methods withwhen_all
andwhen_any
and group the Futures, s.t.MPI_Wait[all|some|any]
can be used forFutures
that provide a MPI_Request. -
overhaul naming (use CamelCase)
Edited by Nils-Arne Dreier