The Java Parallel Virtual Machine

If you are currently using JPVM, please download the latest version below (v0.2.1, released Feb.2, 1999). It contains an important bug fix to pvm_recv.

JPVM is a PVM-like library of object classes implemented in and for use with the Java Programming language. PVM is a popular message passing interface used in numerous heterogeneous hardware environments ranging from distributed memory parallel machines to networks of workstations. Java is the popular object oriented programming language from Sun Microsystems that has become a hot-spot of development on the Web. JPVM, thus, is the combination of both - ease of programming inherited from Java, high performance through parallelism inherited from PVM.

Why a Java PVM?

The reasons against are obvious - Java programs suffer from poor performance, running more than 10 times slower than C and Fortran counterparts in a number of tests I ran on simple numerical kernels. Why then would anyone want to do parallel programming in Java? The answer for me lies in a combination of issues including the difficulty of programming - parallel programming in particular, the increasing gap between CPU and communications performance, and the increasing availability of idle workstations.

Is JPVM interoperable with standard PVM?

The answer (sadly) is no. JPVM is a completely separate, non-interoperable implementation. I didn't take the time to reverse-engineer PVM and make JPVM interoperable because JPVM is really just an experimental toy for me at this point - a rough prototype that can be used to experiment with parallel programming in Java on a network of workstations.

On the other side of the non-interoperability coin, JPVM supports a number of great features that simply aren't available in standard PVM. For example:

Why not just Java bindings to the standard PVM library?

Java bindings to the standard PVM library are a great idea. Such a tool would allow programmers with existing PVM applications in a variety of languages to link in Java graphical user interface front ends. In fact, such a library exists and is available: JavaPVM. This library uses the Java "native methods" functionality to allow Java programs to access the standard PVM library.

The reason I didn't take this approach with JPVM is portability. While Java and PVM are available on many systems, using native methods restricts tasks to run only on systems where both Java and PVM are supported. An important part of the JPVM concept involves leveraging the portability of Java to make more types of PC and workstation machines viable hosts for PVM tasks.

More Information?

A brief report about the interface, design, implementation, and performance of JPVM is available in postscript form: A smaller version of this report appeared at the Java'98 poster session: A paper by Narendar Yalamanchilli and William Cohen (of U. Alabama Huntsville) describing performance measurements of JPVM (also appeared at Java'98) is available:

Where can I get JPVM?

The current version (v0.2.1) requires Java 1.1. Recent updates... Older updates...

JPVM questions, comments and problems should be directed to Adam Ferrari,

Additional Information About Java and PVM
Last update: ajf2j Mon Feb 1 13:37:25 EST 1999