雨谷の日和

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

JavaとCとの性能比較(行列式計算/再帰呼び出し有)

ということで、ここまでで再帰呼び出し有りの行列式計算での性能比較は一区切りとしたい。
出力処理の時と同じく、比較表にまとめておこう。

Pentium4:2.4GHz
WindowsXP(MS932)
cygwin
gcc3.3.1
JDK1.4
Java
最適化
最適化
インタ
プリタ
Hot
Spot
AOT
mallocallocamallocalloca最適化
最適化
配列
最適化
行列式
計算
動的メモリ確保 468434909555249
事前メモリ確保 55338181065
※単位はいずれも[sec]


・外部要因的な負荷の影響が少ない処理では、メモリの取り扱い方が性能に大きく影響する(メモリの取り扱いがボトルネックになりやすい)。
・CとJavaではメモリの取り扱いの思想が異なるため、その性能の特徴が異なる。
・Cの場合、動的にヒープ領域のメモリを確保する際のコストが高い。逆に事前にメモリを確保するなどしてヒープ領域のメモリ管理の手間を極力減らした場合、高い性能を発揮する。
Javaの場合、動的にヒープ領域のメモリを確保する際のコストはあまり高くない。その代わり、ヒープ領域のメモリ管理の手間を極力減らしても、それほど性能が向上するわけではない。
JavaのAOTコンパイラを用いた結果は、Cの結果に近い。


今後は再帰呼び出しの影響を調べるか、一次キャッシュなどの効果を調べるか、別途のプログラムを比較してみるか、ちょっと考えてみようと思う。