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 |
もし、dSFMTなり、SFMTなりが速くて使いたいなら
make install
で、ヘッダファイルとライブラリがインストールされる。デフォルトだと/usr/localに入ってしまうので、./configureするときに--prefixでインストールディレクトリを指定した方がいいかも。