xorshiftとmt19937の速度比較
なんかxorshiftが、速くて、簡単で、美味いとのことなので実装してみた。
で、ついでにstd:mt19937と比較。
xorshift.cppソースコード
https://github.com/murasesyuka/misc-lang-snippet/blob/master/cpp/xorshift/xorshift.cpp
マイクロベンチマーク実効
$ g++ -O3 -Wall -std=gnu++1z xorshift.cpp $ ./a.out 31 msec : xorshift32 15 msec : xorshift128 1064 msec : std::random 18 msec : std::mt19937 $ ./a.out 25 msec : xorshift32 18 msec : xorshift128 1052 msec : std::random 15 msec : std::mt19937 $ ./a.out 31 msec : xorshift32 18 msec : xorshift128 1064 msec : std::random 16 msec : std::mt19937
結果
xorshift128とmt19937は上記マイクロベンチだと、同じくらい。
std:randomは使わない方がいいな。
結論
一先ずmt19937でいいかな(まあ、ARMとかでやったらまた結果違うんだろうけど^^)
測定環境
$ gcc --version gcc (Debian 5.3.1-5) 5.3.1 20160101 $ cat /etc/debian_version stretch/sid $ cat /proc/cpuinfo ... model name : Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz ...
P.S. 2017/02/20
試しに図ってみた。
Coretex-A57
LinuxKernel4.6くらいだったような。
/dev/urandomが遅い?
$ aarch64-linux-gnu-g++ -O3 -Wall -std=gnu++1y xorshift.cpp $ ./a.out 40 msec : xorshift32 26 msec : xorshift128 27771 msec : std::random 55 msec : std::mt19937
P.S. 2017/02/28
結果が安定してない。
Coretex-A7 700MHz
rasberry pi 2
- LinuxKernel4.9.11-v7+
- g++ (Raspbian 4.9.2-10) 4.9.2
$ g++ -O3 -Wall --std=gnu++1y xorshift.cpp $ ./a.out 72 msec : xorshift32 107 msec : xorshift128 35439 msec : std::random 160 msec : std::mt19937 $ ./a.out 102 msec : xorshift32 83 msec : xorshift128 35637 msec : std::random 160 msec : std::mt19937