Is Java Suitable for Portable High-Performance Computing?
We are currently working on making Java a suitable portable platform for high-performance computing, based on our OpenJIT project. This paper reports on some initial results in our benchmarking and performance analysis results. There, we found that traditional user-level optimizations for numerical computing such as stripmining, do not always properly apply due to unpredictability of both the JIT compiler and the VM sruntime. To be more specific, most traditional comilers for high-performance computing on RISC-based processors apply various optimization techniques to allow efficient scheduling of in-processor resources for fine-grained parallelism, and also to utilize the cache as much as possible to overcome the memory wall problem. However, it is not obvious whether such optimization techniques, especially those performed at the source-code level by the compiler or a user, will be effective for Java language implementations. Some of the potential problems could be largely categorized into language specification problems, compiler problems and the runtime problems (In the full paper we discuss the issues in more detail): aliasing of multi-dimensional arrays; array bounds-checking; intervention of stack-based bytecode; iompiler not tailored for high-performance computing; handling of exceptions; restricted space/time resources of JIT compilers; unpredictable memory allocation; overhead of multithreading; low performance of RMI; restrictions of VM-based execution; and ther reasons.