このBenchmarkを作った動機は以下の疑問に対する回答が欲しかったためで ある.
Javaやlisp(scheme)はcoolな言語だと思う.私はある問題を解きたいがた めにプログラムを書くのであって,メモリ管理をするために書くのではない. CやC++ではついメモリ管理のコードのデバッグに時間をとられ,問題そのもの を解くということだけにコーディングの時間を避くのは難しい.メモリ管理の 自動化,ポータビリティの高さ,豊富で規格化されたライブラリなどからJava は良い回答であると思う.最近は性能面も様々な技術によって改善されている と聞く.しかし,並列の実用的な数値演算アプリケーションをJavaで書いたと いう話を,1999年当時には聞かなかった.Javaはこれらを書くのにも利用でき るのであろうか? この疑問に対する回答を得るため,このBenchmarkを作成し た.
私の研究テーマの一つにCGの分野のlighting simulationの高速化の研究が ある.リアルな世界を計算機の中に創造するためのアルゴリズムはいくつか存 在するが,基本的には光の伝搬を物理的にシミュレートすることでリアルさを 表現する.つまりリアルなCGとは物理学の問題を数値的に解くことと同じであ る.
以前から私は性能と生産性から,C++言語でシミュレータを構築してきた. 最初は性能が第1であった.しかし,シミュレータが複雑化, あるいはベンダが並列計算機の分野から撤退するなどを見るにつけ, ポータビリティと生産性を重視するようになった.
そこにJavaが登場した.しかし,最初のJVMは遅かった. そのため,Java Grandeの話を最初に聞いた時には,Jokeかとおもっていた. 一方,友人からJavaのすばらしさを毎日のように聞きJavaでいくつかのプ ログラムを書いてその生産性の高さや,coolな部分に惣れこんでもいた. それでも自分のシミュレータをJavaで書くことまでは思い至らなかった.
1999年の6月の初めに,JSPP 1999に参加し,松岡聡先生がパネルディスカッ ションにて,Javaが遅いというのは既に過去の話になりつつあるという話をした. その時点の最高のJava の native compilerが示したmatrix multiplicationの 経過時間は,C++ 版とわずか 10% しか違わないものであった.この時,初めて 自分のlighting simulatorをJavaで書こうと考えた.
しかし,これまで提供されているJavaの数値計算のBenchmarkは小さなもの が基本であり,また,並列というものはなかなかみあたらない. ふとmatrixのmultiplicationを考えてみると,一度大きな配列を確保すれば, あとは計算終了までGCの発生する機会もなさそうであり,そのオーバーヘッド などはどうなっているのかという疑問が湧いた.また,このようなベンチマー クが高速であるかと言って実際のアプリケーションは高速なのかということに 関しても疑問が残った.しかし,残念ながら当時探した範囲では分散メモリを 基本にした並列数値計算アプリケーションで,ある程度実用的なものとなると, Javaで書かれたものがみあたらなかった.
そこで今回以下のような仮定の数値計算アプリケーションをJavaで 実装してみることにした.既にこれまでの研究でC++の実装は存在した.
結局,次の疑問に対する答えが知りたかったのだ.
疑問:Java は実際の並列数値演算アプリケーションを書くのにも使えるのだろうか?
このPageではJava と C++ で書いた実用的並列アプリケーションを1つの Benchmarkとして提供する.もし,この2つの実装がほぼ同等の性能を出す日が 来たら,その時にはJavaで全てを書くことができるだろう.Java Grandeの目 標もそこにあると思う.
また,このPageではJava と C++ で書いた実用的並列アプリケーションを1つの Benchmarkとして提供する.もし,この2つの実装がほぼ同等の性能を出す日が 来たら,その時にはJavaで全てを書くことができるだろう.Java Grandeの目 標もそこにあると思う.
[Preshelt 1999]の研究では,同 一の仕様の辞書を引くプログラムを複数の人間に実装させ,C/C++とJavaの違 いを比較している.しかし,この研究では言語の違いよりもプログラマの違い の方が大きすぎることが報告されている.実際,同じ言語の同じ仕様に対する 実装が実装者によって150倍も異なることが報告されている.また,結果のプ ログラムのサイズは100から600行程度と小さい.
これに対し,ここでのプログラムは同一のプログラマが2通りの実装を行なっ ている.そのため,人による実装のskillの違いというものはない.そのため, 言語の違いというものがでるはずである.データ構造もアルゴリズムも基本的 に同一なものを採用している.
ただし,Java Grandeの発表で質 問があったが,私のプログラミングスキルはどうかということは,確かに疑問 である.しかし,これは私には答えにくい質問である.