1
votes

I'm looking into various parallel programming models and I just stumbled upon MPI. There are a few things I'm not sure about. From what I understand:

  1. the main function of MPI is to allow communication between related processes running in parallel in a cluster. Is this correct?
  2. programs are run on the master node, which in turn communicates specific tasks to the worker nodes - and receives the results. There is no need for a copy of the code to be on each worker node.

Also, the few updated MPI frameworks I found only seem to support a restricted set of languages. I was looking at experimenting with this in Java but all the Java MPI libraries I found were either dated or didn't seem to have the maturity of those for C and Fortran. Why is that? I think that message passing would be a pretty useful feature for anyone who writes a parallel or distributed program, so why isn't MPI more popular outside of its niche?

1
MPI is more used in scientific programming, it has a history of use there and the language of choice (for a long time) of the scientific community has been/is C/Fortran.arynaq
(1) is correct; (2) isn't.Jonathan Dursi
so why isn't MPI more popular outside of its niche? Probably because the people who manage the development of MPI and its user community don't care about its popularity outside its niche, rather they care about its effectiveness and efficiency within its niche. MPI isn't the only message passing library around, Java programmers have other options available.High Performance Mark

1 Answers

3
votes

MPI is traditionally a SPMD model where one code runs on lots of processes (usually distributed over a number of nodes/processors/cores/etc.). Those processes explicitly pass messages using the calls in MPI (Message Passing Interface). Then the individual processes can go off to do their work and communicate again when necessary. It's not a task language where the jobs can be automatically distributed to the worker nodes. There are other languages that do that sort of thing (Hadoop/MapReduce, Charm++, etc. might fit more into that model).

In the MPI Standard (http://www.mpi-forum.org/docs/docs.html) that's decided on by the MPI Forum, there are specific language requirements that are specified. Up to now, there have only been three languages that are required for an MPI implementation: C, C++, and FORTRAN (and actually the C++ requirement has been removed). The reason for this is that these are the languages most commonly used by the scientific applications that use MPI. This doesn't prevent other language bindings from existing, but supporting every language is a big burden for implementations and not always feasible. There are lots of other language bindings available:

I'm sure there are more than this out there for some more exotic languages. Just search for MPI and you're sure to find information. MPI is actually pretty popular, even outside of the scientific community. There have been attempts to use it in the video game community, distributed databases, and others. However, scientific computing continues to be one of the biggest users of MPI and remains one of the Forum's main focuses.