![]()  | 
Home | Libraries | People | FAQ | More | 
For some people, performance of random number generation is an important consideration when choosing a random number generator or a particular distribution function. This page provides numerous performance tests with the wide variety of generators and distributions available in the boost library.
The performance has been evaluated on an Intel(R) Core(TM) i7 CPU Q 840 @ 1.87GHz, 1867 Mhz with Visual C++ 2010, Microsoft Windows 7 Professional and with gcc 4.4.5, Ubuntu Linux 2.6.35-25-generic. The speed is reported in million random numbers per second (M rn/sec), generated in a tight loop.
Table 17.11. Basic Generators (Linux)
| 
               generator  | 
               M rn/sec  | 
               time per random number [nsec]  | 
               relative speed compared to fastest [percent]  | 
|---|---|---|---|
| 
               rand48  | 
               149.254  | 
               6.7  | 
               59%  | 
| 
               lrand48 run-time  | 
               158.73  | 
               6.3  | 
               63%  | 
| 
               minstd_rand0  | 
               22.9885  | 
               43.5  | 
               9%  | 
| 
               minstd_rand  | 
               22.0751  | 
               45.3  | 
               8%  | 
| 
               ecuyer combined  | 
               42.735  | 
               23.4  | 
               17%  | 
| 
               kreutzer1986  | 
               151.515  | 
               6.6  | 
               60%  | 
| 
               taus88  | 
               250  | 
               4  | 
               100%  | 
| 
               knuth_b  | 
               19.6078  | 
               51  | 
               7%  | 
| 
               hellekalek1995 (inversive)  | 
               4.54545  | 
               220  | 
               1%  | 
| 
               mt11213b  | 
               204.082  | 
               4.9  | 
               81%  | 
| 
               mt19937  | 
               204.082  | 
               4.9  | 
               81%  | 
| 
               mt19937_64  | 
               60.6061  | 
               16.5  | 
               24%  | 
| 
               lagged_fibonacci607  | 
               126.582  | 
               7.9  | 
               50%  | 
| 
               lagged_fibonacci1279  | 
               129.87  | 
               7.7  | 
               51%  | 
| 
               lagged_fibonacci2281  | 
               129.87  | 
               7.7  | 
               51%  | 
| 
               lagged_fibonacci3217  | 
               131.579  | 
               7.6  | 
               52%  | 
| 
               lagged_fibonacci4423  | 
               128.205  | 
               7.8  | 
               51%  | 
| 
               lagged_fibonacci9689  | 
               128.205  | 
               7.8  | 
               51%  | 
| 
               lagged_fibonacci19937  | 
               131.579  | 
               7.6  | 
               52%  | 
| 
               lagged_fibonacci23209  | 
               131.579  | 
               7.6  | 
               52%  | 
| 
               lagged_fibonacci44497  | 
               131.579  | 
               7.6  | 
               52%  | 
| 
               subtract_with_carry  | 
               147.059  | 
               6.8  | 
               58%  | 
| 
               subtract_with_carry_01  | 
               105.263  | 
               9.5  | 
               42%  | 
| 
               ranlux3  | 
               15.748  | 
               63.5  | 
               6%  | 
| 
               ranlux4  | 
               9.11577  | 
               109.7  | 
               3%  | 
| 
               ranlux3_01  | 
               10.5708  | 
               94.6  | 
               4%  | 
| 
               ranlux4_01  | 
               6.27353  | 
               159.4  | 
               2%  | 
| 
               ranlux64_3  | 
               15.8983  | 
               62.9  | 
               6%  | 
| 
               ranlux64_4  | 
               9.14913  | 
               109.3  | 
               3%  | 
| 
               ranlux64_3_01  | 
               10.9409  | 
               91.4  | 
               4%  | 
| 
               ranlux64_4_01  | 
               6.32911  | 
               158  | 
               2%  | 
| 
               ranlux24  | 
               15.1976  | 
               65.8  | 
               6%  | 
| 
               ranlux48  | 
               8.88099  | 
               112.6  | 
               3%  | 
| 
               mt19937ar.c  | 
               111.111  | 
               9  | 
               44%  | 
Table 17.12. Basic Generators (Windows)
| 
               generator  | 
               M rn/sec  | 
               time per random number [nsec]  | 
               relative speed compared to fastest [percent]  | 
|---|---|---|---|
| 
               rand48  | 
               152.672  | 
               6.55  | 
               64%  | 
| 
               lrand48 run-time  | 
               24.3724  | 
               41.03  | 
               10%  | 
| 
               minstd_rand0  | 
               39.8248  | 
               25.11  | 
               16%  | 
| 
               minstd_rand  | 
               39.0778  | 
               25.59  | 
               16%  | 
| 
               ecuyer combined  | 
               16.7813  | 
               59.59  | 
               7%  | 
| 
               kreutzer1986  | 
               89.0472  | 
               11.23  | 
               37%  | 
| 
               taus88  | 
               237.53  | 
               4.21  | 
               100%  | 
| 
               knuth_b  | 
               30.8166  | 
               32.45  | 
               12%  | 
| 
               hellekalek1995 (inversive)  | 
               5.28457  | 
               189.23  | 
               2%  | 
| 
               mt11213b  | 
               237.53  | 
               4.21  | 
               100%  | 
| 
               mt19937  | 
               221.239  | 
               4.52  | 
               93%  | 
| 
               mt19937_64  | 
               91.5751  | 
               10.92  | 
               38%  | 
| 
               lagged_fibonacci607  | 
               142.45  | 
               7.02  | 
               59%  | 
| 
               lagged_fibonacci1279  | 
               142.45  | 
               7.02  | 
               59%  | 
| 
               lagged_fibonacci2281  | 
               145.56  | 
               6.87  | 
               61%  | 
| 
               lagged_fibonacci3217  | 
               149.031  | 
               6.71  | 
               62%  | 
| 
               lagged_fibonacci4423  | 
               142.45  | 
               7.02  | 
               59%  | 
| 
               lagged_fibonacci9689  | 
               145.773  | 
               6.86  | 
               61%  | 
| 
               lagged_fibonacci19937  | 
               142.45  | 
               7.02  | 
               59%  | 
| 
               lagged_fibonacci23209  | 
               145.773  | 
               6.86  | 
               61%  | 
| 
               lagged_fibonacci44497  | 
               142.45  | 
               7.02  | 
               59%  | 
| 
               subtract_with_carry  | 
               136.24  | 
               7.34  | 
               57%  | 
| 
               subtract_with_carry_01  | 
               90.3342  | 
               11.07  | 
               38%  | 
| 
               ranlux3  | 
               13.1631  | 
               75.97  | 
               5%  | 
| 
               ranlux4  | 
               7.60398  | 
               131.51  | 
               3%  | 
| 
               ranlux3_01  | 
               8.62738  | 
               115.91  | 
               3%  | 
| 
               ranlux4_01  | 
               4.99625  | 
               200.15  | 
               2%  | 
| 
               ranlux64_3  | 
               13.1631  | 
               75.97  | 
               5%  | 
| 
               ranlux64_4  | 
               7.5861  | 
               131.82  | 
               3%  | 
| 
               ranlux64_3_01  | 
               8.63931  | 
               115.75  | 
               3%  | 
| 
               ranlux64_4_01  | 
               5.01958  | 
               199.22  | 
               2%  | 
| 
               ranlux24  | 
               13.1631  | 
               75.97  | 
               5%  | 
| 
               ranlux48  | 
               7.5861  | 
               131.82  | 
               3%  | 
| 
               mt19937ar.c  | 
               200.401  | 
               4.99  | 
               84%  | 
Note that the lagged Fibonacci and ranlux_01 generators produce floating-point numbers, whereas all others produce integers.
Table 17.13. Distributions (Linux)
| 
               [M rn/sec]  | 
               minstd_rand  | 
               kreutzer1986  | 
               mt19937  | 
               lagged_fibonacci607  | 
|---|---|---|---|---|
| 
               uniform_int  | 
               16.2338  | 
               48.7805  | 
               21.5517  | 
               23.8663  | 
| 
               uniform_smallint  | 
               18.9036  | 
               114.943  | 
               25.3165  | 
               74.6269  | 
| 
               bernoulli  | 
               21.322  | 
               85.4701  | 
               23.2558  | 
               125  | 
| 
               geometric  | 
               9.42507  | 
               11.7925  | 
               7.38007  | 
               15.528  | 
| 
               binomial  | 
               13.4953  | 
               29.7619  | 
               12.7877  | 
               38.7597  | 
| 
               negative_binomial  | 
               1.69549  | 
               2.29305  | 
               1.65563  | 
               2.45098  | 
| 
               poisson  | 
               13.7552  | 
               34.1297  | 
               13.369  | 
               43.8596  | 
| 
               uniform_real  | 
               18.2815  | 
               44.4444  | 
               19.8413  | 
               119.048  | 
| 
               uniform_01  | 
               21.692  | 
               72.4638  | 
               17.1233  | 
               116.279  | 
| 
               triangle  | 
               15.2207  | 
               29.3255  | 
               11.9904  | 
               51.2821  | 
| 
               exponential  | 
               10.5374  | 
               17.0068  | 
               10.8814  | 
               22.2222  | 
| 
               normal polar  | 
               8.82613  | 
               12.9199  | 
               9.00901  | 
               14.771  | 
| 
               lognormal  | 
               6.15764  | 
               7.50188  | 
               5.68182  | 
               8.61326  | 
| 
               chi squared  | 
               2.07297  | 
               2.8401  | 
               2.10926  | 
               3.07409  | 
| 
               cauchy  | 
               9.18274  | 
               14.8368  | 
               7.37463  | 
               17.3913  | 
| 
               fisher f  | 
               1.04646  | 
               1.47449  | 
               1.08026  | 
               1.61186  | 
| 
               student t  | 
               1.60927  | 
               2.18245  | 
               1.65207  | 
               2.34192  | 
| 
               gamma  | 
               2.1097  | 
               2.87439  | 
               2.13538  | 
               3.01296  | 
| 
               weibull  | 
               4.73709  | 
               5.77367  | 
               4.20521  | 
               6.33312  | 
| 
               extreme value  | 
               7.40192  | 
               10.101  | 
               6.23441  | 
               11.5741  | 
| 
               uniform_on_sphere  | 
               2.22222  | 
               2.78552  | 
               2.28311  | 
               2.7933  | 
Table 17.14. Distributions (Windows)
| 
               [M rn/sec]  | 
               minstd_rand  | 
               kreutzer1986  | 
               mt19937  | 
               lagged_fibonacci607  | 
|---|---|---|---|---|
| 
               uniform_int  | 
               27.049  | 
               79.1139  | 
               29.8151  | 
               34.8432  | 
| 
               uniform_smallint  | 
               31.736  | 
               90.3342  | 
               33.9213  | 
               59.9161  | 
| 
               bernoulli  | 
               25.641  | 
               56.2114  | 
               27.049  | 
               62.8141  | 
| 
               geometric  | 
               12.8717  | 
               18.9645  | 
               14.6671  | 
               18.5805  | 
| 
               binomial  | 
               18.2116  | 
               32.2165  | 
               19.8491  | 
               29.4118  | 
| 
               negative_binomial  | 
               2.79065  | 
               3.99138  | 
               2.73358  | 
               3.72898  | 
| 
               poisson  | 
               20.0321  | 
               37.7074  | 
               18.9645  | 
               36.4299  | 
| 
               uniform_real  | 
               27.6319  | 
               78.1861  | 
               26.4901  | 
               71.2251  | 
| 
               uniform_01  | 
               36.63  | 
               95.6938  | 
               26.3783  | 
               85.4701  | 
| 
               triangle  | 
               19.4856  | 
               43.8982  | 
               19.425  | 
               36.8324  | 
| 
               exponential  | 
               17.0474  | 
               32.0513  | 
               18.005  | 
               28.6205  | 
| 
               normal polar  | 
               14.4051  | 
               19.7863  | 
               13.1354  | 
               20.7426  | 
| 
               lognormal  | 
               10.8472  | 
               13.6968  | 
               10.3563  | 
               13.7855  | 
| 
               chi squared  | 
               3.53957  | 
               4.95  | 
               3.44448  | 
               4.83442  | 
| 
               cauchy  | 
               15.1906  | 
               23.5682  | 
               14.9768  | 
               23.31  | 
| 
               fisher f  | 
               1.74951  | 
               2.45417  | 
               1.69854  | 
               2.38743  | 
| 
               student t  | 
               2.63151  | 
               3.75291  | 
               2.53872  | 
               3.51432  | 
| 
               gamma  | 
               3.50275  | 
               4.9729  | 
               3.35087  | 
               4.75195  | 
| 
               weibull  | 
               8.96539  | 
               11.9161  | 
               9.09256  | 
               11.6754  | 
| 
               extreme value  | 
               12.3274  | 
               18.4196  | 
               12.5945  | 
               17.5623  | 
| 
               uniform_on_sphere  | 
               2.83688  | 
               3.58038  | 
               2.73898  | 
               3.60101  |