Projects related to this work include development of MPI, HPF, and other parallel languages such as ZPL and Spar. Here, we explain the background and future developments of our own project.
The work originated in our compilation practices for HPF. As described in , our compiler emphasizes run-time support. Adlib, a PCRC run-time library, provides a rich set of collective communication functions. It was realized that by raising the run-time interface to the user level, a rather straightforward (compared to HPF) compiler could be developed to translate the high level language code to a node program calling the run-time functions.
Currently, a Java interface has been implemented on top of the Adlib library. With classes such as Group, Range, and Location in the Java interface, one can write Java programs quite similar to HPJava proposed here. But a program executed in this way will have large overhead due to function calls (such as address translation) when accessing data inside loop constructs. Given the knowledge of data distribution plus inquiry functions inside the run-time library, one can substitute address translation calls with linear operations on the loop variable, and keep inquiry function calls ``outside the loop.''
At the present time, we are implementing the translator. Further research work will include optimization and safety-checking techniques in the compiler for HPspmd programming.
Figure 1.8 shows a preliminary benchmark for a hand-translated versions of our examples. The parallel programs are executed on 4 sparc-sun-solaris2.5.1 with MPICH and the Java JIT compiler in JDK 1.2Beta2. For Jacobi iteration, the timing is for about 90 iterations; the array size is 1024X1024.
We also compared the sequential Java, C++, and Fortran version of the code, all with -O flag when compiling. The dotted lines shown in the figure only represent times for the one processor case. We can see that on a single processor, Java program use language supported mechanism for calculating array element address; hence, it is slower than HPJava (as HPJava uses an optimized address calculation scheme). We emphasize again that in the picture we are comparing sequential Fortran, etc., with parallel HPJava. This is not supposed to be an comparative evaluation of the various languages. It is just supposed to give an impression of the performance ballpark Java is currently operating in.