[Dune] MPI Handling in dgfparser

Thimo Neubauer thimo.neubauer at iwr.uni-heidelberg.de
Sat Jul 15 13:44:32 CEST 2006


Hi,

On Fri, Jul 14, 2006 at 02:16:05PM +0200, Andreas Dedner wrote:
> Die Idee war ein und denselben Code benutzen zu koennen, falls
> 1) kein mpi gefunden wurde
> 2) mpi gefunden wurde aber nicht benutzt wird
> 3) mpi gefunden wurde und parallel gearbeitet wird
> Seit der --enable-mpi flag existiert hat sich das ganze entschaerft -
> deswegen wurde er ja auch eingefuerht.
> Ich wuerd allerdings trotzdem gern schreiben:
>   MPISTART
>   ...
>   grid("name.dgf",MPI_COMM_WORLD);
>   ...
>   MPIEND
> 
> statt
>   #if HAVE_MPI
>     MPI_Init();
>   #endif
>   ...
>   #if HAVE_MPI
>     grid("name",MPI_COMM_WORLD;
>   #else
>     grid("name");
>   #endif
>   ...
>   #if HAVE_MPI
>     MPI_End();
>   #endif
> Wahrscheinlich weil ich finde wir muessen dem Anwedner nicht zu viele
> defines zumuten.

How about wrapping the MPI-startup in a helper class? This would allow
for something as easy to write as the first pattern (and without any
defines):

  MPIHelper mpihelper;

  grid("name", mpihelper::MPI_COMM_WORLD);
  // or grid("name", mpihelper)
  
With active MPI the helper does the classic RAII (resource acquisition
is initialization), i.e. calls MPI_Init() in the constructor and
MPI_End() in the destructor. Without MPI an empty dummy
initialization is used and the -1 semantic of MPI_COMM_WORLD could
also be expressed in a simple way.

Just my 2 cents

Cheers
   Thimo




More information about the Dune mailing list