Loading...
Searching...
No Matches
mpihelper.hh File Reference
Common » Parallel Communication

Helpers for dealing with MPI. More...

`#include <cassert>`
`#include <mutex>`
`#include <mpi.h>`
`#include <dune/common/exceptions.hh>`
`#include <dune/common/visibility.hh>`
`#include <dune/common/parallel/communication.hh>`
`#include <dune/common/parallel/mpicommunication.hh>`
`#include <dune/common/stdstreams.hh>`

Go to the source code of this file.

## Classes

class | Dune::FakeMPIHelper
| A fake mpi helper. More...
class | Dune::MPIHelper
| A real mpi helper. More...

## Namespaces

namespace | Dune
| Dune namespace

## Detailed Description

Helpers for dealing with MPI.

Basically there are two helpers available:

FakeMPIHelper
  A class adhering to the interface of MPIHelper that does not need MPI at all. This can be used to create a sequential program even if MPI is used to compile it.
MPIHelper
  A real MPI helper. When the singleton gets instantiated MPI_Init will be called and before the program exits MPI_Finalize will be called.

Example of who to use these classes:

A program that is parallel if compiled with MPI and sequential otherwise:

int main(int argc, char** argv){
typedef Dune::MPIHelper MPIHelper;
MPIHelper::instance(argc, argv);
typename MPIHelper::MPICommunicator world =
MPIHelper::getCommunicator();
...
main
int main(int argc, char **argv)
Definition mpi_collective_benchmark.cc:297
Dune::MPIHelper
A real mpi helper.
Definition mpihelper.hh:169

If one wants to have sequential program even if the code is compiled with mpi then one simply has to exchange the typedef with

typedef Dune::MPIHelper FakeMPIHelper;

.

For checking whether we really use MPI or just fake please use MPIHelper::isFake (this is also possible at compile time!)