We have discussed the design and development of mpiJava--a pure Java interface to MPI. Our performance tests have shown that mpiJava should fulfill the needs of MPI programmers not only in terms of functionality but also in terms of good performance when compared to similar C MPI programs.
In both shared memory and distributed memory modes mpiJava adds a fairly constant overhead compared to normal native MPI. In an environment like WMPI, which has been optimized for Windows NT, the actual overheads of using mpiJava are relatively small at around 100ms. Under MPICH the situation is not quite so good, here the use of mpiJava introduces an extra overheads of between 250-300s. It should be noted that these results compare codes running directly under the operating system with those running in the JVM. For example, according to a single 200 MHz PentiumPro will achieve in excess of 62 Mflop/s on a Fortran version of LinPack. A test of the Java LinPack code gave a peak performance of 22 Mflop/s for the same processor running the JVM. The difference in performance will account for much of the additional overhead that mpiJava imposes on C MPI codes. The quality and performance of JVM on each platform will have the greatest effect on the usefulness of mpiJava for scientific computation.
We also suggested required environment to make mpiJava run on different platforms including Linux. On these platforms, several parallel applications including Potts model simulation using Java AWT for GUI have been implemented. These applications will be covered in Chapter 6 with their performance evaluation.