Boost logo

Boost Users :

Subject: Re: [Boost-users] What's so cool about Boost.MPI?
From: Riccardo Murri (riccardo.murri_at_[hidden])
Date: 2010-11-05 15:04:33


On Fri, Nov 5, 2010 at 3:51 PM, Peter Foelsche <foelsche_at_[hidden]> wrote:
> Can somebody explain to me, what is so great about mpi or boost/mpi?

Daunting task, but I'll give it a try :-)

MPI is a library interface[1] to ease some common communication
patterns in scientific/HPC software. In particular, MPI provides
library functions for:

  1. Reliable delivery of messages between two concurrent processes;
     there are functions for both synchronous and asynchronous
     communication.

  2. Collective communication of the running processes: e.g., one
     process broadcasting a message to all others; all processes
     broadcasting to all; scattering a large array to all running
     processes, etc.

  3. "Remote shared memory": a process can expose a memory buffer that
     all others can directly read/write.

  4. Parallel I/O, where many processes access (possibly interleaved)
     portions of a file independently.

Despite being non-trivial features to implement on top of a standard
TCP socket interface, MPI implementations are mostly into performance:
they can usually take advantage of special hardware (e.g., Infiniband
or Myrinet interconnects) and use the native protocols (instead of
TCP/IP) to provide faster communication speed.

A "message" in usual socket programming is just a flat array of bytes.
A "message" in MPI is a (potentially non-contiguous portion) of a C or
FORTRAN data structure; MPI can handle C structures and
multi-dimensional C-style arrays, and multi-dimensional arrays of C
structures (containing multi-dimensional arrays, etc.). However,
since MPI is implemented as a library, you have to tdescribe to MPI
the in-memory layout of the data structures you want to send as a
message; thus "duplicating" work that is done by the compiler. You
can imagine that this quickly gets tedious and unwieldy once you start
having non-trivial data structures, possibly with members of unknown
length (e.g., a list).

This is where Boost.MPI comes to the rescue: if you can provide
Boost.Serialization support for your classes, you can send them as MPI
messages with no extra effort: no need for lengthy calls to
MPI_Type_create_struct() etc. And it does this with minimal or even
no overhead! (Plus you also get a nice C++ interface to MPI
functionality, whereas the MPI C calls are quite low-level.)

.. [1] MPI proper is a specification; there are several
   implementations of the spec (e.g., OpenMPI, MPICH, MVAPICH, plus
   many vendor/proprietary one), but they are all compatible at the
   source level.

Best regards,
Riccardo


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net