メルセンヌツイスタ実装速度比較

メルセンヌツイスタのJava実装いろいろあるけど、どれが一番速いの?ということで比較実験をしてみた。

10の9乗個の乱数を生成し合計を加算に要した時間を計測。実験環境はPen3の1G+メモリ256M+WinXP+JRE1.4.2。

結果。

  • java.util.Random(比較用): 7.351sec
  • ECJ: 6.509sec
  • mantissa: 7.180sec
  • Colt: 6.960sec
  • David Beaumont: 8.702sec

一番速かったのはECJの高速化バージョン実装。何をしているのかとソースコードを覗いてみると、標準のRandomを継承せず、非同期でマルチスレッド対応せず、さらに共通ルーチンを関数コールせず、手動でinline展開してハードコーディングすることで関数コールのオーバーヘッド削減がワロタwJavaにはC/C++のinline展開最適化が言語として存在しないから、コピペでやるという気合に感動した(つД`)
それにしても標準のRandom速えぇぇぇぇ。線形合同法なので統計的に問題ありだけど、ここまで速いとは想定外。