C++ – MPI an quick overview (which distribution is the best?)
MPI (for Message Passing Interface) is a specification to enable communication between process. It is a standard implemented by many libraries. Each one has its advantages and disadvantages. I will try in this post to give a quick MPI description and give some information about the different libraries.
MPI as a standard
MPI is not a library, it is a definition/specification. You can find the documentation and the description here :
http://www.mcs.anl.gov/research/projects/mpi/
As you can see there are two versions : 1.0 and 2.0
Nowadays most of libraries used the specification 2.0 (but some libraries have not been updated and use 1.0 standard).
MPI – Message Passing Interface – for parallel programming
From Wikipedia :
MPI is a specification for an API that allows many computers to communicate with one another. It is used in computer clusters and supercomputers.
In other words, if you need to solve a big problem or run a big simulation you may need to use parallel programming. To understand what is parallel programming I recommend you to start with multi threading. Then, you can use parallel computing (and finally if you want, why not look at distributed programming).
With parallel programming you will cut you problem in several tasks. This tasks may be “interdependent ” (somewhere in its algorithm a task may need a result/data from another task). So, they need to communicate, to synchronize and to be deployed. Using a MPI library makes this concepts very easy. You can send signals or data by calling one function without knowing if it used network or shared memory… Then your program can run on cluster or on one computer.
MPI Libraries (not all, but some of them…)
OpenMPI
Developers : Bull, IBM, Cisco, INRIA, Etc.
MPI Version : MPI-2
OS : Linux, OS X, Solaris (both 32 and 64 on all platforms) and Windows (Windows XP, Windows HPC Server 2003/2008 and also Windows 7 RC)
Comment : My choice. It is, with MPICH, the best one I think.
Url : http://www.open-mpi.org/
MPICH
Developers : Intel, IBM, INRIA, etc.
MPI Version : MPI-1 & MPI-2
OS : Linux (on IA32 and x86-64), Mac OS/X (PowerPC and Intel), Solaris (32- and 64-bit), and Windows
Comment : Many developer used this library.
Url : http://www.mcs.anl.gov/research/projects/mpich2/
MPI.NET
Developers : Indiana University
MPI Version : ?
OS : Windows, Work on other OS with Mono
Comment : Support all .Net languages, Seems to be very efficient on Windows!
Url : http://osl.iu.edu/research/mpi.net/
MPI Lib
Developer : Michael J. Fromberger
MPI Version : ?
OS : Linux on x86 and PowerPC, IRIX on MIPS, AIX on RS/6000 and POWER2, Digital Unix on Alpha), MacOS, and Windows 98
Comment : Seems to be a huge work for one man!
Url : http://spinning-yarns.org/michael/mpi/
OOMPI
Developers : Indiana University
MPI Version : MPI-1
OS : ?
Comment : it is object oriented! but not up to date
Url : https://osl.iu.edu/download/research/oompi/oompi.pdf
Boost.MPI
Developers : Boost Community (& Douglas Gregor, Matthias Troyer, Trustees of Indiana University)
MPI Version : ?
OS : ?
Comment : Well, I did not find a lot of information about it. I think that it can be a good solution in a program that already use Boost.
Url : http://www.boost.org/doc/libs/1_43_0/doc/html/mpi.html
MacMPI
Developers : Viktor Decyk, Dean Dauger, Pieter Kokelaar
MPI Version : ?
OS : Mac Os (of course)
Comment : Seems to be very good for Mac User!! But maybe a little old.
Url : http://exodus.physics.ucla.edu/appleseed/appleseed.html
LAM MPI
Developers : From Indiana University, University of Notre Dame & Ohio State University
MPI Version : MP-1 & MPI-2
OS : any POSIX-like operating systems
Comment : A good solution and works on heterogeneous environment (but posix-like only)
Url : http://www.lam-mpi.org/download/
Resources:
http://en.wikipedia.org/wiki/Message_Passing_Interface
http://www.mcsr.olemiss.edu/appssubpage.php?pagename=mpi.inc
Subscribe to the RSS feed and have all new posts delivered straight to you.
