<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <title>Performance</title> <link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css"> <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> <link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> <link rel="up" href="../boost_random.html" title="Chapter 16. Boost.Random"> <link rel="prev" href="../boost/random/xor_combine.html" title="Class template xor_combine"> <link rel="next" href="rationale.html" title="Rationale"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr> <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td> <td align="center"><a href="../../../index.html">Home</a></td> <td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td> <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> <td align="center"><a href="../../../more/index.htm">More</a></td> </tr></table> <hr> <div class="spirit-nav"> <a accesskey="p" href="../boost/random/xor_combine.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_random.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> </div> <div class="section"> <div class="titlepage"><div><div><h2 class="title" style="clear: both"> <a name="boost_random.performance"></a><a class="link" href="performance.html" title="Performance">Performance</a> </h2></div></div></div> <p> 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. </p> <p> The performance has been evaluated on an Intel(R) Xeon(TM) MP CPU 3.66GHz, Gentoo Base System release 1.12.11.1, GCC 4.3.2, glibc 2.9 and on an Intel(R) Core(TM)2 CPU T7600 @2.33 Ghz with Microsoft Windows XP Professional, Service Pack 2 Build 2600, Microsoft Visual C++ 2008 9.0.21022. The speed is reported in million random numbers per second (M rn/sec), generated in a tight loop. </p> <div class="table"> <a name="boost_random.performance.basic_generators__linux_"></a><p class="title"><b>Table 16.7. Basic Generators (Linux)</b></p> <div class="table-contents"><table class="table" summary="Basic Generators (Linux)"> <colgroup> <col> <col> <col> <col> </colgroup> <thead><tr> <th> <p> generator </p> </th> <th> <p> M rn/sec </p> </th> <th> <p> time per random number [nsec] </p> </th> <th> <p> relative speed compared to fastest [percent] </p> </th> </tr></thead> <tbody> <tr> <td> <p> rand48 </p> </td> <td> <p> 312.5 </p> </td> <td> <p> 3.2 </p> </td> <td> <p> 100% </p> </td> </tr> <tr> <td> <p> lrand48 run-time </p> </td> <td> <p> 303.03 </p> </td> <td> <p> 3.3 </p> </td> <td> <p> 96% </p> </td> </tr> <tr> <td> <p> lrand48 (C library) </p> </td> <td> <p> 67.5676 </p> </td> <td> <p> 14.8 </p> </td> <td> <p> 21% </p> </td> </tr> <tr> <td> <p> minstd_rand0 </p> </td> <td> <p> 96.1538 </p> </td> <td> <p> 10.4 </p> </td> <td> <p> 30% </p> </td> </tr> <tr> <td> <p> minstd_rand </p> </td> <td> <p> 93.4579 </p> </td> <td> <p> 10.7 </p> </td> <td> <p> 29% </p> </td> </tr> <tr> <td> <p> ecuyer combined </p> </td> <td> <p> 60.6061 </p> </td> <td> <p> 16.5 </p> </td> <td> <p> 19% </p> </td> </tr> <tr> <td> <p> kreutzer1986 </p> </td> <td> <p> 97.0874 </p> </td> <td> <p> 10.3 </p> </td> <td> <p> 31% </p> </td> </tr> <tr> <td> <p> taus88 </p> </td> <td> <p> 243.902 </p> </td> <td> <p> 4.1 </p> </td> <td> <p> 78% </p> </td> </tr> <tr> <td> <p> hellekalek1995 (inversive) </p> </td> <td> <p> 2.405 </p> </td> <td> <p> 415.8 </p> </td> <td> <p> 0% </p> </td> </tr> <tr> <td> <p> mt11213b </p> </td> <td> <p> 138.889 </p> </td> <td> <p> 7.2 </p> </td> <td> <p> 44% </p> </td> </tr> <tr> <td> <p> mt19937 </p> </td> <td> <p> 138.889 </p> </td> <td> <p> 7.2 </p> </td> <td> <p> 44% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci607 </p> </td> <td> <p> 81.9672 </p> </td> <td> <p> 12.2 </p> </td> <td> <p> 26% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci1279 </p> </td> <td> <p> 81.9672 </p> </td> <td> <p> 12.2 </p> </td> <td> <p> 26% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci2281 </p> </td> <td> <p> 81.9672 </p> </td> <td> <p> 12.2 </p> </td> <td> <p> 26% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci3217 </p> </td> <td> <p> 81.3008 </p> </td> <td> <p> 12.3 </p> </td> <td> <p> 26% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci4423 </p> </td> <td> <p> 80.6452 </p> </td> <td> <p> 12.4 </p> </td> <td> <p> 25% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci9689 </p> </td> <td> <p> 80.6452 </p> </td> <td> <p> 12.4 </p> </td> <td> <p> 25% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci19937 </p> </td> <td> <p> 80 </p> </td> <td> <p> 12.5 </p> </td> <td> <p> 25% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci23209 </p> </td> <td> <p> 80.6452 </p> </td> <td> <p> 12.4 </p> </td> <td> <p> 25% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci44497 </p> </td> <td> <p> 79.3651 </p> </td> <td> <p> 12.6 </p> </td> <td> <p> 25% </p> </td> </tr> <tr> <td> <p> subtract_with_carry </p> </td> <td> <p> 76.9231 </p> </td> <td> <p> 13 </p> </td> <td> <p> 24% </p> </td> </tr> <tr> <td> <p> subtract_with_carry_01 </p> </td> <td> <p> 45.045 </p> </td> <td> <p> 22.2 </p> </td> <td> <p> 14% </p> </td> </tr> <tr> <td> <p> ranlux3 </p> </td> <td> <p> 8.78735 </p> </td> <td> <p> 113.8 </p> </td> <td> <p> 2% </p> </td> </tr> <tr> <td> <p> ranlux4 </p> </td> <td> <p> 5.11771 </p> </td> <td> <p> 195.4 </p> </td> <td> <p> 1% </p> </td> </tr> <tr> <td> <p> ranlux3_01 </p> </td> <td> <p> 5.29381 </p> </td> <td> <p> 188.9 </p> </td> <td> <p> 1% </p> </td> </tr> <tr> <td> <p> ranlux4_01 </p> </td> <td> <p> 3.04599 </p> </td> <td> <p> 328.3 </p> </td> <td> <p> 0% </p> </td> </tr> <tr> <td> <p> ranlux64_3 </p> </td> <td> <p> 8.74126 </p> </td> <td> <p> 114.4 </p> </td> <td> <p> 2% </p> </td> </tr> <tr> <td> <p> ranlux64_4 </p> </td> <td> <p> 5.09684 </p> </td> <td> <p> 196.2 </p> </td> <td> <p> 1% </p> </td> </tr> <tr> <td> <p> ranlux64_3_01 </p> </td> <td> <p> 5.30786 </p> </td> <td> <p> 188.4 </p> </td> <td> <p> 1% </p> </td> </tr> <tr> <td> <p> ranlux64_4_01 </p> </td> <td> <p> 3.02847 </p> </td> <td> <p> 330.2 </p> </td> <td> <p> 0% </p> </td> </tr> <tr> <td> <p> mt19937ar.c </p> </td> <td> <p> 95.2381 </p> </td> <td> <p> 10.5 </p> </td> <td> <p> 30% </p> </td> </tr> </tbody> </table></div> </div> <br class="table-break"><div class="table"> <a name="boost_random.performance.basic_generators__windows_"></a><p class="title"><b>Table 16.8. Basic Generators (Windows)</b></p> <div class="table-contents"><table class="table" summary="Basic Generators (Windows)"> <colgroup> <col> <col> <col> <col> </colgroup> <thead><tr> <th> <p> generator </p> </th> <th> <p> M rn/sec </p> </th> <th> <p> time per random number [nsec] </p> </th> <th> <p> relative speed compared to fastest [percent] </p> </th> </tr></thead> <tbody> <tr> <td> <p> rand48 </p> </td> <td> <p> 98.5222 </p> </td> <td> <p> 10.15 </p> </td> <td> <p> 67% </p> </td> </tr> <tr> <td> <p> lrand48 run-time </p> </td> <td> <p> 17.343 </p> </td> <td> <p> 57.66 </p> </td> <td> <p> 11% </p> </td> </tr> <tr> <td> <p> minstd_rand0 </p> </td> <td> <p> 46.3822 </p> </td> <td> <p> 21.56 </p> </td> <td> <p> 31% </p> </td> </tr> <tr> <td> <p> minstd_rand </p> </td> <td> <p> 38.5505 </p> </td> <td> <p> 25.94 </p> </td> <td> <p> 26% </p> </td> </tr> <tr> <td> <p> ecuyer combined </p> </td> <td> <p> 15.8028 </p> </td> <td> <p> 63.28 </p> </td> <td> <p> 10% </p> </td> </tr> <tr> <td> <p> kreutzer1986 </p> </td> <td> <p> 66.6667 </p> </td> <td> <p> 15 </p> </td> <td> <p> 45% </p> </td> </tr> <tr> <td> <p> taus88 </p> </td> <td> <p> 145.56 </p> </td> <td> <p> 6.87 </p> </td> <td> <p> 100% </p> </td> </tr> <tr> <td> <p> hellekalek1995 (inversive) </p> </td> <td> <p> 4.26658 </p> </td> <td> <p> 234.38 </p> </td> <td> <p> 2% </p> </td> </tr> <tr> <td> <p> mt11213b </p> </td> <td> <p> 139.082 </p> </td> <td> <p> 7.19 </p> </td> <td> <p> 95% </p> </td> </tr> <tr> <td> <p> mt19937 </p> </td> <td> <p> 142.248 </p> </td> <td> <p> 7.03 </p> </td> <td> <p> 97% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci607 </p> </td> <td> <p> 61.5385 </p> </td> <td> <p> 16.25 </p> </td> <td> <p> 42% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci1279 </p> </td> <td> <p> 58.7199 </p> </td> <td> <p> 17.03 </p> </td> <td> <p> 40% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci2281 </p> </td> <td> <p> 64.0205 </p> </td> <td> <p> 15.62 </p> </td> <td> <p> 43% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci3217 </p> </td> <td> <p> 62.1118 </p> </td> <td> <p> 16.1 </p> </td> <td> <p> 42% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci4423 </p> </td> <td> <p> 63.3714 </p> </td> <td> <p> 15.78 </p> </td> <td> <p> 43% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci9689 </p> </td> <td> <p> 64.6412 </p> </td> <td> <p> 15.47 </p> </td> <td> <p> 44% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci19937 </p> </td> <td> <p> 63.3714 </p> </td> <td> <p> 15.78 </p> </td> <td> <p> 43% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci23209 </p> </td> <td> <p> 64.6412 </p> </td> <td> <p> 15.47 </p> </td> <td> <p> 44% </p> </td> </tr> <tr> <td> <p> lagged_fibonacci44497 </p> </td> <td> <p> 64.0205 </p> </td> <td> <p> 15.62 </p> </td> <td> <p> 43% </p> </td> </tr> <tr> <td> <p> subtract_with_carry </p> </td> <td> <p> 92.7644 </p> </td> <td> <p> 10.78 </p> </td> <td> <p> 63% </p> </td> </tr> <tr> <td> <p> subtract_with_carry_01 </p> </td> <td> <p> 78.0031 </p> </td> <td> <p> 12.82 </p> </td> <td> <p> 53% </p> </td> </tr> <tr> <td> <p> ranlux3 </p> </td> <td> <p> 9.86193 </p> </td> <td> <p> 101.4 </p> </td> <td> <p> 6% </p> </td> </tr> <tr> <td> <p> ranlux4 </p> </td> <td> <p> 5.80754 </p> </td> <td> <p> 172.19 </p> </td> <td> <p> 3% </p> </td> </tr> <tr> <td> <p> ranlux3_01 </p> </td> <td> <p> 7.15103 </p> </td> <td> <p> 139.84 </p> </td> <td> <p> 4% </p> </td> </tr> <tr> <td> <p> ranlux4_01 </p> </td> <td> <p> 3.8345 </p> </td> <td> <p> 260.79 </p> </td> <td> <p> 2% </p> </td> </tr> <tr> <td> <p> ranlux64_3 </p> </td> <td> <p> 9.10415 </p> </td> <td> <p> 109.84 </p> </td> <td> <p> 6% </p> </td> </tr> <tr> <td> <p> ranlux64_4 </p> </td> <td> <p> 5.05919 </p> </td> <td> <p> 197.66 </p> </td> <td> <p> 3% </p> </td> </tr> <tr> <td> <p> ranlux64_3_01 </p> </td> <td> <p> 6.12445 </p> </td> <td> <p> 163.28 </p> </td> <td> <p> 4% </p> </td> </tr> <tr> <td> <p> ranlux64_4_01 </p> </td> <td> <p> 3.39167 </p> </td> <td> <p> 294.84 </p> </td> <td> <p> 2% </p> </td> </tr> <tr> <td> <p> mt19937ar.c </p> </td> <td> <p> 125.471 </p> </td> <td> <p> 7.97 </p> </td> <td> <p> 86% </p> </td> </tr> </tbody> </table></div> </div> <br class="table-break"><p> Note that the lagged Fibonacci and ranlux_01 generators produce floating-point numbers, whereas all others produce integers. </p> <div class="table"> <a name="boost_random.performance.distributions__linux_"></a><p class="title"><b>Table 16.9. Distributions (Linux)</b></p> <div class="table-contents"><table class="table" summary="Distributions (Linux)"> <colgroup> <col> <col> <col> <col> <col> </colgroup> <thead><tr> <th> <p> [M rn/sec] </p> </th> <th> <p> minstd_rand </p> </th> <th> <p> kreutzer1986 </p> </th> <th> <p> mt19937 </p> </th> <th> <p> lagged_fibonacci607 </p> </th> </tr></thead> <tbody> <tr> <td> <p> uniform_int </p> </td> <td> <p> 31.25 </p> </td> <td> <p> 30.581 </p> </td> <td> <p> 11.5607 </p> </td> <td> <p> 16.0514 </p> </td> </tr> <tr> <td> <p> geometric </p> </td> <td> <p> 5.20833 </p> </td> <td> <p> 6.66223 </p> </td> <td> <p> 6.68449 </p> </td> <td> <p> 6.73854 </p> </td> </tr> <tr> <td> <p> binomial </p> </td> <td> <p> 5.01505 </p> </td> <td> <p> 21.7865 </p> </td> <td> <p> 4.38982 </p> </td> <td> <p> 10.9529 </p> </td> </tr> <tr> <td> <p> poisson </p> </td> <td> <p> 22.8311 </p> </td> <td> <p> 22.1729 </p> </td> <td> <p> 20.8768 </p> </td> <td> <p> 24.3902 </p> </td> </tr> <tr> <td> <p> uniform_real </p> </td> <td> <p> 18.2815 </p> </td> <td> <p> 84.0336 </p> </td> <td> <p> 67.1141 </p> </td> <td> <p> 72.4638 </p> </td> </tr> <tr> <td> <p> triangle </p> </td> <td> <p> 13.2802 </p> </td> <td> <p> 33.4448 </p> </td> <td> <p> 33.67 </p> </td> <td> <p> 36.4964 </p> </td> </tr> <tr> <td> <p> exponential </p> </td> <td> <p> 6.19195 </p> </td> <td> <p> 8.49618 </p> </td> <td> <p> 8.2713 </p> </td> <td> <p> 8.65052 </p> </td> </tr> <tr> <td> <p> normal polar </p> </td> <td> <p> 5.78369 </p> </td> <td> <p> 6.56599 </p> </td> <td> <p> 6.49773 </p> </td> <td> <p> 6.48508 </p> </td> </tr> <tr> <td> <p> lognormal </p> </td> <td> <p> 4.13565 </p> </td> <td> <p> 4.53515 </p> </td> <td> <p> 4.51467 </p> </td> <td> <p> 4.57875 </p> </td> </tr> <tr> <td> <p> cauchy </p> </td> <td> <p> 6.07533 </p> </td> <td> <p> 7.92393 </p> </td> <td> <p> 7.77605 </p> </td> <td> <p> 8.35422 </p> </td> </tr> <tr> <td> <p> gamma </p> </td> <td> <p> 6.07533 </p> </td> <td> <p> 7.92393 </p> </td> <td> <p> 7.83085 </p> </td> <td> <p> 8.34725 </p> </td> </tr> <tr> <td> <p> uniform_on_sphere </p> </td> <td> <p> 1.43472 </p> </td> <td> <p> 1.62075 </p> </td> <td> <p> 1.5625 </p> </td> <td> <p> 1.5949 </p> </td> </tr> </tbody> </table></div> </div> <br class="table-break"><div class="table"> <a name="boost_random.performance.distributions__windows_"></a><p class="title"><b>Table 16.10. Distributions (Windows)</b></p> <div class="table-contents"><table class="table" summary="Distributions (Windows)"> <colgroup> <col> <col> <col> <col> <col> </colgroup> <thead><tr> <th> <p> [M rn/sec] </p> </th> <th> <p> minstd_rand </p> </th> <th> <p> kreutzer1986 </p> </th> <th> <p> mt19937 </p> </th> <th> <p> lagged_fibonacci607 </p> </th> </tr></thead> <tbody> <tr> <td> <p> uniform_int </p> </td> <td> <p> 14.7449 </p> </td> <td> <p> 27.465 </p> </td> <td> <p> 6.65292 </p> </td> <td> <p> 28.5714 </p> </td> </tr> <tr> <td> <p> geometric </p> </td> <td> <p> 7.10328 </p> </td> <td> <p> 5.53649 </p> </td> <td> <p> 3.73622 </p> </td> <td> <p> 9.38438 </p> </td> </tr> <tr> <td> <p> binomial </p> </td> <td> <p> 6.20155 </p> </td> <td> <p> 5.78135 </p> </td> <td> <p> 2.65118 </p> </td> <td> <p> 4.65463 </p> </td> </tr> <tr> <td> <p> poisson </p> </td> <td> <p> 15.9617 </p> </td> <td> <p> 8.77886 </p> </td> <td> <p> 12.5486 </p> </td> <td> <p> 17.9276 </p> </td> </tr> <tr> <td> <p> uniform_real </p> </td> <td> <p> 49.6032 </p> </td> <td> <p> 27.1223 </p> </td> <td> <p> 31.6857 </p> </td> <td> <p> 60.35 </p> </td> </tr> <tr> <td> <p> triangle </p> </td> <td> <p> 21.3356 </p> </td> <td> <p> 11.7 </p> </td> <td> <p> 14.2857 </p> </td> <td> <p> 22.3015 </p> </td> </tr> <tr> <td> <p> exponential </p> </td> <td> <p> 14.3493 </p> </td> <td> <p> 6.05473 </p> </td> <td> <p> 10.8472 </p> </td> <td> <p> 12.982 </p> </td> </tr> <tr> <td> <p> normal polar </p> </td> <td> <p> 4.24394 </p> </td> <td> <p> 2.75748 </p> </td> <td> <p> 7.04871 </p> </td> <td> <p> 6.09533 </p> </td> </tr> <tr> <td> <p> lognormal </p> </td> <td> <p> 3.30066 </p> </td> <td> <p> 1.34822 </p> </td> <td> <p> 5.36913 </p> </td> <td> <p> 4.0024 </p> </td> </tr> <tr> <td> <p> cauchy </p> </td> <td> <p> 11.4286 </p> </td> <td> <p> 2.92372 </p> </td> <td> <p> 12.0525 </p> </td> <td> <p> 7.55629 </p> </td> </tr> <tr> <td> <p> gamma </p> </td> <td> <p> 10.5263 </p> </td> <td> <p> 3.72523 </p> </td> <td> <p> 12.1433 </p> </td> <td> <p> 5.87682 </p> </td> </tr> <tr> <td> <p> uniform_on_sphere </p> </td> <td> <p> 0.680874 </p> </td> <td> <p> 0.38004 </p> </td> <td> <p> 1.18737 </p> </td> <td> <p> 0.486334 </p> </td> </tr> </tbody> </table></div> </div> <br class="table-break"> </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> <td align="right"><div class="copyright-footer">Copyright © 2000 -2005 Jens Maurer, 2009 Steven Watanabe<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> </div></td> </tr></table> <hr> <div class="spirit-nav"> <a accesskey="p" href="../boost/random/xor_combine.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_random.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> </div> </body> </html>