Boost Random Number Library Performance

# Random Number Library Performance

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 a Pentium Pro 200 MHz with gcc 2.95.2, Linux 2.2.13, glibc 2.1.2. The speed is reported in million random numbers per second (M rn/sec), generated in a tight loop.

## Basic Generators

generator | M rn/sec | time per random number [usec] | relative speed compared to fastest [percent]
--- | --- | --- | ---
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%

Note that the lagged Fibonacci generators produce floating-point numbers, whereas all others produce integers.

## Distributions

[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

Note that the lagged Fibonacci generator is at least 2.5 times faster than the Mersenne twister when generating uniformly distributed floating-point numbers. For more sophisticated distributions, the speed improvement is less. Note however that these distributions have not been optimized for speed, yet.

Jens Maurer, 2001-04-15