A new procedure for dynamic adaption of three-dimensional unstructured grids
Applied Numerical Mathematics
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Distributed-memory computing with the Langley aerothermodynamic upwind relaxation algorithm (LAURA)
Advances in Engineering Software - Special issue; special issue on large-scale analysis and design on high-performance computers and workstations
Practical guidelines for boosting Java server performance
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
Performance limitations of the Java core libraries
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
The Jalapeño dynamic optimizing compiler for Java
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
Proceedings of the ACM 2000 conference on Java Grande
AJaPACK: experiments in performance portable parallel Java numerical libraries
Proceedings of the ACM 2000 conference on Java Grande
Design and evaluation of a linear algebra package for Java
Proceedings of the ACM 2000 conference on Java Grande
From flop to megaflops: Java for technical computing
ACM Transactions on Programming Languages and Systems (TOPLAS)
Adaptive optimization in the Jalapeño JVM
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Parallelization of a Dynamic Unstructured Algorithm Using Three Leading Programming Paradigms
IEEE Transactions on Parallel and Distributed Systems
Java programming for high-performance numerical computing
IBM Systems Journal
IBM Systems Journal
An evaluation of Java for numerical computing
Scientific Programming
Hi-index | 0.00 |
The computational science community is reluctant to write large-scale computationally-intensive applications in Java due to concerns over Java's poor performance, despite the claimed software engineering advantages of its object-oriented features. Naive Java implementations of numerical algorithms can perform poorly compared to corresponding Fortran or C implementations. To achieve high performance, Java applications must be designed with good performance as a primary goal. This paper presents the object-oriented design and implementation of two real-world applications from the field of Computational Fluid Dynamics (CFD): a finite-volume fluid flow solver (LAURA, from NASA Langley Research Center), and an unstructured mesh adaptation algorithm (2D_TAG, from NASA Ames Research Center). This work builds on our previous experience with the design of high-performance numerical libraries in Java. We examine the performance of the applications using the currently available Java infrastructure and show that the Java version of the flow solver LAURA performs almost within a factor of 2 of the original procedural version. Our Java version of the mesh adaptation algorithm 2D_TAG performs within a factor of 1.5 of its original procedural version on certain platforms. Our results demonstrate that object-oriented software design principles are not necessarily inimical to high performance.