6.6. まとめ

mt-liteおよび比較対象の疑似乱数アルゴリズムの性質・性能のまとめを以下に示す。

表 6.10. 疑似乱数アルゴリズムの比較

名称周期乱数生成個数 平均応答時間 [a] 定数時間応答? [b] thread safe? 状態の大きさ [c] コードの大きさ [d] 備考
mt19937ar 219937-1単一1nono2500350 - 500 
SFMT-mt19937-SIMD-seque 219937-1単一0.6 - 0.9nono2500250 - 400要AltiVec/SSE
SFMT-mt19937-SIMD-block 219937-1複数0.2 - 0.5-no2500600 - 900要AltiVec/SSE
SFMT-mt19937-noSIMD-seque 219937-1単一1.3 - 2.2nono2500900 - 1100 
SFMT-mt19937-noSIMD-block 219937-1複数0.4 - 1.4-no25002050 - 2600 
SFMT-mt607-SIMD-seque 2607-1単一0.5 - 0.6nono80350 - 400要AltiVec/SSE
SFMT-mt607-SIMD-block 2607-1複数0.2 - 0.5-no80750 - 850要AltiVec/SSE
SFMT-mt607-noSIMD-seque 2607-1単一1.4 - 3.1nono80950 - 2650 
SFMT-mt607-noSIMD-block 2607-1複数0.4 - 1.5-no802900 - 3800 
WELL512a 2512-1単一0.9 - 1.4yesno68150 - 250 
WELL1024a 21024-1単一0.9 - 1.4yesno132150 - 250 
xor128 2128-1単一0.5 - 0.7yesno1650 - 100 
LCG 232単一0.3 - 0.5yesno420 - 60性質は実装依存
mtlite-mt19937-loop 219937-1単一0.5 - 1.0noyes2500250 - 400 
mtlite-mt19937-loop-nt 219937-1単一0.4 - 0.8noyes2500250 - 350 
mtlite-mt19937-nonloop 219937-1単一0.9 - 1.7yesyes2500150 - 200 
mtlite-mt19937-nonloop-nt 219937-1単一0.7 - 1.4yesyes2500100 - 200 
mtlite-mt19937-block 219937-1複数0.7 - 1.0-yes2500650 - 800 
mtlite-mt19937-block-nt 219937-1複数0.4 - 0.6-yes2500400 - 550 
mtlite-mt607-loop 2607-1単一0.5 - 0.9noyes80300 - 1200 
mtlite-mt607-loop-nt 2607-1単一0.4 - 0.8noyes80250 - 1150 
mtlite-mt607-nonloop 2607-1単一0.8 - 1.7yesyes80150 - 200 
mtlite-mt607-nonloop-nt 2607-1単一0.6 - 1.5yesyes80100 - 150 
mtlite-mt607-block 2607-1複数0.7 - 1.0-yes80600 - 1700 
mtlite-mt607-block-nt 2607-1複数0.4 - 0.6-yes80400 - 1400 

[a] mt19937arを1とする時間比。値は項6.3. 「実行速度」に基づく

[b] 単一乱数生成において、常にほぼ同一の時間で応答するか否か

[c] 1つの疑似乱数生成器の状態保持のために必要なデータの大きさ。単位はバイト。値は項6.5. 「使用メモリ量」に基づく

[d] 乱数生成関数のコードの大きさ。単位はバイト。インライン関数を含む場合はインライン展開回数を1とする。値は項6.5. 「使用メモリ量」に基づく


疑似乱数生成アルゴリズムの実装を表内のものから選択する場合、すべての面において他よりも優れているものはない。目的を定めた上で、およそ次のように選択するのがよいだろう。