続・擬似乱数の計算時間

前回の結果

前回の実験結果はこんな感じ。縦軸は1秒あたりの乱数生成回数です。
条件等は、前回の記事を参照してください。


考察っぽいこと

以下のことは、私の妄想かもしれません。嘘を言っている可能性も多分にあります。
ご注意ください。 # 詳しい人いたら教えてください(^q^)

最も速いsfmtは、1秒間に10億回近くも乱数を生成できます。
使用したCPUが3.5GHzなので、1秒で35億クロック分計算ができるということになります。
したがって、sfmtは3.5〜4clock程で計算できるということになります。
xorやmseqでも、5〜6clock、boostのメルセンヌ・ツイスタでも、8clock以下程度です。

今回は、forループを使って連続で乱数生成をしているので、キャッシュ効率とか最善の状況だと思いますので、実際にはもうちょっと遅くなるのでしょうが、これはなかなか驚異的な数値だと思います。

まとめ

  • SSEが使えるなら、sfmtを使う
  • 数クロックの差が大きい場合、xorshiftやM系列乱数を使う
  • その他の場合は、周期のことを考えて、メルセンヌ・ツイスターを使っておけば、間違いない