From Flop to MegaFlops: Java for Technical Computing

Although there has been some experimentation with Java as a language for numerically intensive computing, there is a perception by many that the language is not suited for such work. In this paper we show how optimizing array bounds checks and null pointer checks creates loop nests on which aggressive optimizations can be used. Applying these optimizations by hand to a simple matrix-multiply test case leads to Java compliant programs whose performance is in excess of 500 Mflops on an RS/6000 SP 332MHz SMP node. We also report in this paper the effect that each optimization has on performance. Since all of these optimizations can be automated, we conclude that Java will soon be a serious contender for numerically intensive computing.

[1]  Michael Wolfe,et al.  Elimination of redundant array subscript range checks , 1995, PLDI '95.

[2]  Vivek Sarkar,et al.  On Estimating and Enhancing Cache Effectiveness , 1991, LCPC.

[3]  Matthias Schwab,et al.  Algebraic Java classes for numerical optimization , 1998 .

[4]  David Orchard Better performance with exceptions in Java , 1998 .

[5]  Monica S. Lam,et al.  A Loop Transformation Theory and an Algorithm to Maximize Parallelism , 1991, IEEE Trans. Parallel Distributed Syst..

[6]  Aart J. C. Bik,et al.  javar: A prototype Java restructuring compiler , 1997 .

[7]  Walter Kirchgässner,et al.  An optimizer for Ada - design, experiences and results , 1988, PLDI '88.

[8]  Jack Dongarra,et al.  Developing numerical libraries in Java , 1998 .

[9]  Michael Wolfe,et al.  Iteration Space Tiling for Memory Hierarchies , 1987, PPSC.

[10]  Rajiv Gupta,et al.  Optimizing array bound checks using flow analysis , 1993, LOPL.

[11]  Samuel P. Midkiff,et al.  Optimizing Array Reference Checking in Java Programs , 1998, IBM Syst. J..

[12]  William H. Harrison,et al.  Compiler Analysis of the Value Ranges for Variables , 1977, IEEE Transactions on Software Engineering.

[13]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[14]  Jack J. Dongarra,et al.  Solving linear systems on vector and shared memory computers , 1990 .

[15]  Zoran Budimlic,et al.  Optimizing Java: theory and practice , 1997, Concurr. Pract. Exp..

[16]  Rajat P. Garg,et al.  A prototype computational fluid dynamics case study in Java , 1997 .

[17]  Patrick Cousot,et al.  Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints , 1977, POPL.

[18]  Steven M. German,et al.  Automating proofs of the absence of common runtime errors , 1978, POPL.

[19]  Vivek Sarkar,et al.  Automatic selection of high-order transformations in the IBM XL FORTRAN compilers , 1997, IBM J. Res. Dev..

[20]  Johnathan M. Asuru Optimization of array subscript range checks , 1992, LOPL.

[21]  Rajiv Gupta A fresh look at optimizing array bound checking , 1990, PLDI '90.

[22]  Nicolas Halbwachs,et al.  Automatic discovery of linear restraints among variables of a program , 1978, POPL.