Skip to content

WIP: Feature/convenient mpi

Nils-Arne Dreier requested to merge feature/convenient_mpi into master

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 with when_all and when_any and group the Futures, s.t. MPI_Wait[all|some|any] can be used for Futures that provide a MPI_Request.
  • overhaul naming (use CamelCase)
Edited by Nils-Arne Dreier

Merge request reports