メニエスの名のもとに

プログラミング関係を中心としたぐだぐだブログ

dSFMTを元にした一様分布と正規分布

なんかね、コンパイルする度に速さが変わるんで、訳がわからない。
とりあえず、他の環境でもコンパイル出来るようにしたので、興味がある人はどれが速いのか試してみて欲しい。
github.com

一般的なautotoolsなので

./configure
make
make check

で作成とチェックをして、実行ファイルはインストールされないので、

cd src
./speed
speed [-n|-u] [-m|-M|-S|-d] [seed]
-n     normal distribution
-u     uniform distribution
-m     mersennetwister19937
-M     MersenneTwister19937
-S     SFMT19937
-d     dSFMT19937
seed   seed

と使用法が表示されるので

./speed -u -d

などとやると100000000回乱数を生成してその時間を表示する。しまった、回数も指定できるようにするべきだった。で、速度が早くても分布はどうなのよって話になるのでその時は output を使うと同じような指定で乱数を1000個出力するので、出力ファイルを R かなんかで検定して納得できたら使ってみるというのはどうでしょうか。

で、speed でうちの環境で測ってみると、前回とは大違い。なんでこう毎回違う結果になるのか
uniform_int の出力

std::mt19937 dSFMT
970ms 167ms

normal_distributionの出力

std::mt19937 dSFMT
2258ms 1044ms

前回は
manieth.hatenablog.com

もし、dSFMTなり、SFMTなりが速くて使いたいなら

make install

で、ヘッダファイルとライブラリがインストールされる。デフォルトだと/usr/localに入ってしまうので、./configureするときに--prefixでインストールディレクトリを指定した方がいいかも。