MPIJ

Introduction

MPIJ is a completely Java-based implementation of the Message Passing Interface.  This enables MPIJ to run on multiple platforms (including web-browsers) without the need for a native MPI implementation.

Design goals

MPIJ is designed to be a fully compliant MPI implementation. Unfortunately, no formal Java MPI bindings exist.  As such, MPIJ is based closely on the C++ bindings.  In deriving Java bindings for MPI we have used the official Java code conventions from Sun (http://java.sun.com/docs/codeconv/html/).  The logic behind this is that Java MPI bindings should look and feel like natural Java.  This seems reasonable since the Fortran bindings look and feel like Fortran, and the C bindings look and feel like C.  Therefore, we feel Java bindings should not look and feel C, but like Java.  The most noticeable result of this is that (as per the Java coding standard) class names begin with upper-case letters and method names begin with lower-case letters.

See the bindings document for further information on the bindings used in MPIJ. Also note that in no way does MPIJ claim to be an official standard developed or endorsed by the MPI Forum.  MPIJ will fully support such a standard when it comes (although we certainly hope that the Java bindings are based on the official Java coding standard).

Performance

Java performance has been maligned to the point that there is a large body of people who refuse to consider high-performance Java as anything but an oxymoron.  However, our experience with current Java virtual machines has shown that while there are still many advances to be made in Java performance, Java performance can be quite good, and is definitely suitable for use in cluster-based parallel computing.

As an example, MPIJ communication (measured on Windows NT) has been shown to outperform WinMPI/CH, Linux MPICH, and PVM3.4 for Windows.  Also, MPIJ communication has been shown to be very comparable to that of WMPI (equivalent for double, worse for float, char, and short, and better for long and int).

Also, as Java virtual machines improve, MPIJ performance will improve.

Version history

MPIJ versions included in DOGMA release 0.7.1 or earlier were simple proof-of-concept implementations based on the C bindings.

This release of MPIJ is a complete redesign from previous versions.  It is designed to be a complete implementation.

Sample MPIJ applications

IBM Test Suite

Included in this release is our preliminary version of the IBM MPI Test Suite.  This test suite will be changed in the next release in order to reflect more definite bindings and more complete coverage.  We have not included all of the test suite or even all that has been ported and run under MPIJ.  The released subset is simply what was available for the release.  The MPIJ documentation should be considered the final word on what is or is not supported as of this release.

Note that the test suite compiles to the package mpij.ibmsuite.

Other

Simple example

Jacobi.java

Running an MPIJ application

Interactive:
    From the DOGMA system prompt type: runMPI <MPI application> <numNodes> <args...>

Process file:
    From the DOGMA system prompt type: runMPIP <process file name>

See also Basic Tasks or the sample process file.