CPU | Mobile Celeron 300MHz |
OS | Linux 2.2.14(Vine Linux 2.0) |
数値計算ソフト | GNU Octave, version 2.1.31(ATLASにより高速化) |
JAVAパッケージ | Jama Version 1.0.1 |
JDK | IBM Developer Kit for Linux,Java Technology Edition,Version 1.1.8 |
JDK | Java Development Kit Version JDK 1.1.8_005 |
JIT Compiler | shuJIT 0.6.9 |
Octave用mファイル | lusol.m |
3つのパッケージのうちJamaを選択した。
import java.util.*; import Jama.*; public class Solve1 { static final int n = 1000; public static void main(String[] args) { Matrix A,x,b; Date start,end; A = Matrix.random(n,n); b = Matrix.random(n,1); start = new Date(); x = A.solve(b); end = new Date(); System.out.println("" + (end.getTime() - start.getTime()) / 1000.0 +"[sec]"); } }Jamaの比較対象としてGNU Octave, version 2.1.31を用いた。 Octave用のプログラムは以下のとおり。
n = 1000; A = rand(n,n); b = rand(n,1); tic();x = A \ b;toc()またATLASにより高速化されたlusol()関数についても計測した。
n = 1000; A = rand(n,n); b = rand(n,1); tic();x = lusol(A,b);toc()
1 | Jama(JAVAインタープリタ) | 236.654[sec] |
2 | Jama(JITコンパイラ shuJIT) | 61.976[sec] |
3 | Jama(JITコンパイラ IBM JIT) | 29.808[sec] |
4 | Octave(x=A\b) | 23.932[sec] |
5 | Octave(x=lusol(A,b)) | 9.273[sec] |
2のshuJITは早稲田大学大学院理工学研究科村岡研究室の首藤一幸氏が開発した JITコンパイラ(同じ研究室なので試さないわけには・・・)、 3はIBM JDKに含まれる速度面で定評のあるJITコンパイラである。
なおshuJIT利用の際は、環境変数JAVA_COMPILER_OPTに cmplatload(クラスロード時に全てのメソッドをコンパイル)を設定した。
表のとおりATLASで最適化されたコードを利用している5は圧倒的に速い。 ただC(Fortran)で書かれている4とIBMのJITコンパイラを利用したJama(3)とでは さほど差がない。数値計算のような速度面のパフォーマンスが要求される アプリケーションにおいても、決してJavaは遅れをとっているわけではなさそうだ。
import Jama.*; public class Solve2 { public static void main(String[] args) { Matrix A; EigenvalueDecomposition ed; double[][] d = { {1.0,2.0,3.0}, {2.0,3.0,4.0}, {3.0,4.0,5.0}, }; A = new Matrix(d); ed = A.eig(); System.out.println("V ="); ed.getV().print(8,5); System.out.println("D ="); ed.getD().print(8,5); } }結果の比較のためにOctave用の以下のプログラムを利用した。
A = [1 2 3;2 3 4;3 4 5]; [V,D] = eig(A)
V = -0.82767 -0.40825 0.38509 -0.14241 0.81650 0.55951 0.54284 -0.40825 0.73393 D = -0.62348 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 9.62348Octaveの実行結果は以下のとおり。
V = 0.82767 0.40825 0.38509 0.14241 -0.81650 0.55951 -0.54284 0.40825 0.73393 D = -0.62348 0.00000 0.00000 0.00000 -0.00000 0.00000 0.00000 0.00000 9.62348ほぼ同じ結果だがVの1,2列目のベクトルの要素の正負が反転している。
|
[2]"http://www.shudo.net/jit/index-j.html", shuJIT.
[3]"http://www.trl.ibm.co.jp/projects/jit/index.html", Java JIT Compiler.
[4]"http://www.blackdown.org/java-linux.html", Java-Linux.
File translated from TEX by
TTH, version 2.80.
On 1 Jan 2001, 21:54.
©Waseda University
URI: http://www.oishi.info.waseda.ac.jp/~oishi/FAQ/main.html