ということで、Borland Cの場合も含めた、実測結果をまとめておく。
Pentium4:2.4GHz WindowsXP(MS932) cygwin gcc3.3.1 Borland C++5.5 JDK1.4 |
C | Java | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
gcc | Borland C | インタ プリタ | Hot Spot | AOT | |||||||||||
最適化 無 | 最適化 有 | 最適化 無 | 最適化 有 | 最適化 無 | 最適化 配列 | 最適化 有 | |||||||||
malloc | alloca | malloc | alloca | malloc | alloca | malloc | alloca | ||||||||
行列式 計算 | 再帰 有り | 動的メモリ確保 | 46 | 8 | 43 | 4 | 6 | 5 | 5 | 4 | 90 | 9 | 55 | 52 | 49 |
事前メモリ確保 | 5 | 5 | 3 | 3 | 4 | 4 | 4 | err | 81 | 8 | 10 | 6 | 5 | ||
再帰 無し | 動的メモリ確保 | 44 | 3 | 42 | 3 | 4 | 3 | 5 | 3 | 76 | 7 | 52 | 52 | 49 | |
事前メモリ確保 | 3 | 4 | 2 | 2 | 3 | 3 | 2 | err | 66 | 6 | 7 | 5 | 4 | ||
ループ | 動的メモリ確保 | 46 | - | 44 | - | 8 | - | 8 | - | 154 | 12 | 64 | 52 | 52 | |
事前メモリ確保 | 7 | 7 | 4 | 4 | 5 | 5 | 6 | err | 159 | 11 | 19 | 8 | 6 |
まず、gccとBorland Cとで、mallocに関する性能が著しく違うことがはっきりとわかる。
Solarisでの実測では、gccの場合でもmallocとallocaの違いはそれほど顕著ではなかったので、Windows版(cygwin)のgccのmallocが極端に遅いということのような気がしないではない。
また、全体として単にループに展開するだけでは逆に遅くなるという傾向はBorland Cでも同じということも見て取れる。
今後、上記の実測の中でSolarisでまだやっていないものを行ってみたい。が、それは今のところ予定が立っていないので、実測できしだいここに掲載したい。
とりあえず、今後は行列式計算のアルゴリズムの高速化という別の取り組みを主なネタにして、日記を続けていこうと思う。