I want to know the answer of next question.
I think Java and Lisp (scheme) etc. is cool language. I wrote a program for solving a problem, not for memory management like C/C++. Java seems one of the solutions for solving a problem itself, because there is no need to memory management, high portability and with rich standard libraries. I am not bothered by debugging memory management code and I can concentrate to solve a problem. Such GC languages always have a defect of low speed. But, I heard that recently Java compiler technology overcomes the low speed defect.
However, I did not hear the existence of parallel, practical and numeric application of Java implementation in 1999. Can Java be usable for writing practical parallel applications? To get the answer of this question, I started to write this benchmark.
One of our researches is accelerating a lighting simulation program with parallel processing. There are some algorithms to create photo-realistic images. Fundamentally, to create photo-realistic images, you should solve the light energy transmission equation. Therefore, creating photo-realistic images is same as solving a physical problem by numeric calculation.
Because of high performane and considering some portability, I wrote my lighting simulator by C++ language. The first time, performance is most important concerning. However, when my simulator was comlicated and some venders withdrew the field of parallel computer, I have to consider about portability. When I changed parallel processing machine, I always must rewrite some part of my programns.
The Java language appeared with the slogan ``write once run anywhere''. However the early day's JVM was very slow. When I heard about Java Grande at first time, I thought that is some kind of a joke. On the other hand, my friend talked about the Java and that good part. I tried to write some programs with Java and I knew its high productivity and good portability. But,.. I did not think I write my simulator by Java.
In the June 1999, I joined the conference, JSPP 1999. Prof. MATUOKA Satoshi talked that Java implementation is not slow anymore. At that time, the best native Java compiler could achieve almost same performance with C++. The difference of elapsed time of matrix multiplication of Java and C++ was only less than 10%. Just after this panel discussion, I thought I tried to write my lighting simulation with Java.
I was looking for the other results of Java implementation of numerics application. However, at that time, I could not find a practical and parallel application written in Java. Most of Java numerics benchmark was micro benchmark. When I thought about matrix multiplication, there may be no need to the GC processing since only one large array allocation is needed. I wondered how much GC overhead is. Of course, micro benchmark is very good first approximation. But, when micro benchmark can be processed fast, is real application also fast? Especially I wanted to know about the behavior of a parallel, distributed and practical application written in Java. But I could not find such result in 1999.
Then, I tried to implement an application with Java under next assumptions. I already had had a C++ implementation.
After all, I want to know the answer of next question.
Question: ``Can Java be usable for writing practical parallel applications?''
This page provides a practical application with Java and C++ implementations as a benchmark. I may write all applications by Java when the day that there is no difference with the performance of these two implementations comes. I think that is one goal of the Java Grande Forum.
In the research of [Preshelt 1999], he compared 40 different implementations of the same program with C/C++ and Java, written by 38 different programmers. However, this paper also reports that the impact of difference of implementor is much larger than difference of language. Actually, the best implementation is 150 times faster than worst one on the same language. The code size of implementation is small (from 100 to 600 lines).
On the other side, this benchmark is implemented by same implementor. So, the difference of implementor is very small. Therefore, this benchamark shows the difference of language. The data structure and the algorithm is basically identical between two implementations.
There was a question at the Java Grande conference. ``Is our programming skill good or bad?'' This is natural question. Because, the skill of implementor is highly influential to the performance. However, it is very hard to answer the question for us.