雨谷の日和

過去12年で1,600を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

Javaでの行列式計算(動的メモリ確保での実装/AOT)結果

では、まず2003.03.31付で提示した、動的メモリ確保して行列式を計算させるソースコードコンパイルし、実行してみよう。
コンパイルは以下のようにして行った。

gcj -o jtest.exe --main=Test Test.java
gcj -o jtest1.exe -fno-bounds-check -fno-store-check --main=Test Test.java
gcj -o jtest2.exe -O3 -fno-bounds-check -fno-store-check --main=Test Test.java

jtest.exeは最適化無し、jtest1.exeは配列関連のチェックについて最適化した場合、jtest2.exeはそれに加えてCと同様な最適化を行った場合ということになる。
こうして作成された実行バイナリを、以下のようにして実行した。

date '+%H:%M:%S'
jtest.exe
date '+%H:%M:%S'
jtest1.exe
date '+%H:%M:%S'
jtest2.exe
date '+%H:%M:%S'

この結果は、以下の通りである。

20:28:46
result: 489261678
20:29:41
result: 489261678
20:30:33
result: 489261678
20:31:22

最適化無しで約55秒、配列チェック無しが約52秒、最適化有りで約49秒となった。
これは最適化無しのJavaよりはかなり速いが、HotSpotでの結果よりは10倍程度遅いことになる。
むしろ、Cでの結果にかなり近いもののように見えなくも無い。


次は、事前メモリ確保での実装の場合を見てみよう。