Java for Computational Science and Engineering - Simulation and Modeling

Geoffrey Fox, 25 January 97

NPAC, Syracuse University, 111 College Place, Syracuse NY 13244

Several groups in CRPC (Argonne, Boston, Caltech, Indiana, Maryland, Rice, Syracuse, Tennessee) have been investigating the use of Web Technology for computing over the last two years. A fruitful recent focus has been on the role of Java in Science and Engineering Simulation. We have involved the HPCC community through a Birds of a Feather Session at the Supercomputing 96 Conference and a workshop with 45 participants at Syracuse Dec 16-17, 1996.

We have established an email discussion list and are collecting papers for a special issue of the journal "Concurrency: Practice and Experience". The web site http://www.npac.syr.edu/projects/javaforcse contains further material including the December Workshop presentations.

Java and Web technology can be used in many areas of science and engineering computation. These include sophisticated user interfaces and coarse-grain integration of different modules in complex meta-applications. However most interesting (and controversial) is perhaps the use of Java as the language used to code the computationally intense parts of a scientific code. All these areas were discussed at the workshop with promising initial results and studies reported in each case. Again applications were described both for large scale event driven and time stepped simulations and also to smaller client side applets aimed at education.

The appeal of Java as a simulation language includes its object oriented characteristics, elegant applet software distribution model and natural support of graphical user interfaces. Most skepticism about Java for simulation is centered on performance issues. Here we should distinguish two ways of processing Java code. Currently Java is typically compiled to the "JavaVM - Virtual Machine" which are universal bytecodes downloaded from the server and interpreted on the client. Such invocation of Java applications suffers today from a performance penalty of between 5 (PC JIT Compiler) and 50 (Unenhanced Interpreter) compared to comparable native compiled C code. As JIT (Just in Time) compilers improve in quality and become generally available, we can expect that this way of using Java will improve but always lie some factor of two in performance lower than conventional compiled code. However one can also build native Java compilers and the workshop discussion indicated that with some restrictions on coding practice, one can expect native compiled Java to have a comparable performance to that from state of the art C or Fortran compilers. Note that Java lacks pointers and operator overloading and this aids compiler optimization. Zoran Budimlic from Kennedy's group at Rice, pointed out in his presentation that the complex user defined exception handlers allowed by Java, prevent several important optimizations and their use would need to be restricted in performance critical parts of compiled Java code.

Note that Java can be an important simulation language in both parallel and sequential environments. There are a rich set of issues in parallel Java which were initially explored by the Arpa funded PCRC activity in the context of evaluating the re-use by parallel Java of runtime libraries designed originally for HPF. Applications exhibit many forms of parallelism. Java and its associated Web infrastructure naturally supports thread based concurrency built into the language - this is perhaps not suitable for large scale data parallelism but can be used for overlap of communication and computation and similar functional parallelism. The Java applet mechanism supports object parallelism as seen in event driven simulation while coarser grain metacomputing can be addressed by emerging commercial concepts such as JavaBeans. Notice Java probably has superior support in these aspects of concurrency to other languages. However data parallelism cannot be expressed directly in Java and its support requires additional runtime and language features which can be expected to resemble the way shared memory and data parallel extensions are added to Fortran (HPF) and C++(HPC++). Of course much parallel computing uses message passing and here Java has excellent intrinsic support.

We are planning a follow-up workshop on June 21,1997 associated with the PPoPP conference in Las Vegas and again we will try to broadly involve the HPCC community in identifying critical issues. Currently it appears that Java promises the computational scientist programming environments which have both attractive user interfaces and high performance execution.