很多情況下,性能是選擇隨機數生成器或分佈函數時需要考慮的重要因素。本節提供了 boost 庫中各種生成器和分佈的性能測試結果。
測試環境:Pentium Pro 200 MHz with gcc 2.95.2, Linux 2.2.13, glibc 2.1.2。速度的單位為兆隨機數每秒 (M rn/sec, million random numbers per second)。速度是由一個緊湊的循環測定的。
| 生成器 | M rn/sec | 每個隨機數所需時間 [微秒, usec] | 相對於最快生成器的速度 [百分比] |
|---|---|---|---|
| rand48 | 5.38 | 0.183 | 61% |
| rand48 run-time configurable | 1.48 | 0.677 | 17% |
| lrand48 glibc 2.1.2 | 1.19 | 0.843 | 13% |
| minstd_rand | 2.39 | 0.318 | 35% |
| ecuyer1988 | 1.12 | 0.892 | 13% |
| kreutzer1986 | 3.87 | 0.258 | 43% |
| hellekalek1995 (inversive) | 0.20 | 5.12 | 2% |
| mt11213b | 6.07 | 0.165 | 68% |
| mt19937 | 6.06 | 0.165 | 68% |
| mt19937 original | 5.33 | 0.188 | 60% |
| lagged_fibonacci607 | 8.90 | 0.112 | 100% |
| lagged_fibonacci4423 | 8.54 | 0.117 | 96% |
| lagged_fibonacci19937 | 7.49 | 0.133 | 84% |
| lagged_fibonacci23209 | 6.63 | 0.151 | 74% |
| lagged_fibonacci44497 | 4.01 | 0.250 | 45% |
注意 lagged-Fibonacci 生成器產生的是浮點數,而其它的生成器產生整數。
| [M rn/sec] | minstd_rand | kreutzer1986 | mt19937 | lagged_fibonacci607 |
|---|---|---|---|---|
| uniform_smallint | 1.26 | 1.55 | 1.93 | - |
| uniform_01 | 1.79 | 1.88 | 3.03 | 7.74 |
| uniform_real | 1.74 | 1.56 | 2.34 | 6.62 |
| geometric | 0.593 | 0.629 | 0.753 | 0.916 |
| triangle | 0.97 | 1.02 | 1.35 | 1.31 |
| exponential | 0.849 | 0.828 | 0.887 | 1.53 |
| normal (polar method) | 0.608 | 0.626 | 0.738 | 0.755 |
| lognormal | 0.417 | 0.442 | 0.470 | 0.481 |
| uniform_on_sphere | 0.154 | 0.155 | 0.174 | 0.218 |
注意在生成均勻分佈的浮點隨機數時,lagged-Fibonacci 比 Mersenne-twister 至少快 2.5 倍;對於更複雜的分佈,這一優勢就不那麼明顯了。也請注意這些分佈尚未進行性能優化。
Revised 05 December, 2006
Copyright © 2001 Jens Maurer
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
中文版修訂:2008/6/25
Copyright © 2008 xiaq
在 Boost Software License, Version 1.0 的條款下發佈。(參看文件 LICENSE_1_0.txt 或在線副本 http://www.boost.org/LICENSE_1_0.txt)