Several parallel programming languages and libraries have been implemented using Converse. The number of these languages and the ease with which we were able to implement them strongly demonstrates the utility of Converse. In this section, we describe several languages and libraries implemented on top of Converse.
We have implemented both MPI and PVM on top of Converse. This makes it possible for modules written in PVM or MPI to coexist within a single application. The MPI implementation [9] is based on MPICH [75]. The Converse port of MPICH (MICE) is very close in efficiency to the native port of MPICH on the machines we tested. In addition, MICE gains all the interoperability benefits of Converse. Our version of PVM is a from-scratch re-implementation of much of the PVM 3.3 C library. It is currently used in NAMD, a production quality molecular dynamics application (See section 2.6).
Charm [49] and Charm++ [50] were developed before Converse. They were later retargeted to Converse. Charm and Charm++ contained dynamic load balancing facilities. However, in an application with multiple language modules, load balancing should be done in the global context taking into account the entire load across all the language modules. Thus load-balancing facilities were moved into Converse, and Charm++ runtime was written to use them. We also developed a Java binding for the Charm++ constructs and entities such as remote objects with global name space, and asynchronous method invocation using Converse [42].
DP [54], a subset of High Performance FORTRAN (HPF) was implemented on top of Charm++ before the development of Converse. After Charm++ was retargeted to Converse, DP was automatically retargeted and is available for programming data parallel algorithms in a multilingual application. pC++ [15] is an object-parallel extension to C++. The method execution semantics of C++ objects is extended to include method invocation in parallel on a collection of objects. The pC++ implementation consists of a translator that converts pC++ constructs into ANSI C, and generates calls to the runtime system functions. The runtime system of pC++ offers a subset of Converse functionality. Implementing pC++ on top of Converse involved minor changes to the translator to insert calls to equivalent functionality of Converse.
Several experimental languages have been implemented on top of Converse. Import [46] is a simulation language based on MODSIM [8]. Import models a simulation system as a set of objects. The implementation relies upon the Converse messaging primitives, and its priority mechanisms. Speedups for our sample simulations have been excellent. Agents [78] is an experimental object-oriented language dedicated to exploring the idea of immutable, static networks of objects. The language supports remote method invocation, and thus, its implementation is much like the implementation of Charm++. The runtime system of the language took only a few hundred lines of code, though the compiler and optimizer were much more complex. mdPerl is a package for Perl, a popular scripting language. It allows writing message-driven parallel programs in Perl. The basic capability provided by mdPerl is to invoke Perl subroutines on remote processors. For typical Perl programs such as analyzing the log information of a web server, we have obtained a near linear speedup using mdPerl.