summaryrefslogtreecommitdiff
path: root/doc/source
diff options
context:
space:
mode:
authorMatti Picus <matti.picus@gmail.com>2021-05-12 07:26:14 +0300
committerGitHub <noreply@github.com>2021-05-12 07:26:14 +0300
commitfb586a4f5760efaae57a9251ed98c4ebd3edcdf8 (patch)
tree62e0c9e374ef00e2cd1e26f1a83b4c70a9e603d5 /doc/source
parent74a65e1cef00e3e9805dbc88252a023975b70079 (diff)
parent67db8f707a711c0d9bad49792fdb31674bb85d3b (diff)
downloadnumpy-fb586a4f5760efaae57a9251ed98c4ebd3edcdf8.tar.gz
Merge pull request #18936 from bashtage/update-perf-prng
DOC: Update performance for new PRNG
Diffstat (limited to 'doc/source')
-rw-r--r--doc/source/reference/random/performance.rst129
1 files changed, 64 insertions, 65 deletions
diff --git a/doc/source/reference/random/performance.rst b/doc/source/reference/random/performance.rst
index 812c719f8..85855be59 100644
--- a/doc/source/reference/random/performance.rst
+++ b/doc/source/reference/random/performance.rst
@@ -42,49 +42,48 @@ Integer performance has a similar ordering.
The pattern is similar for other, more complex generators. The normal
performance of the legacy `RandomState` generator is much
-lower than the other since it uses the Box-Muller transformation rather
-than the Ziggurat generator. The performance gap for Exponentials is also
+lower than the other since it uses the Box-Muller transform rather
+than the Ziggurat method. The performance gap for Exponentials is also
large due to the cost of computing the log function to invert the CDF.
-The column labeled MT19973 is used the same 32-bit generator as
-`RandomState` but produces random values using
-`Generator`.
+The column labeled MT19973 uses the same 32-bit generator as
+`RandomState` but produces random variates using `Generator`.
.. csv-table::
- :header: ,MT19937,PCG64,Philox,SFC64,RandomState
- :widths: 14,14,14,14,14,14
-
- 32-bit Unsigned Ints,3.2,2.7,4.9,2.7,3.2
- 64-bit Unsigned Ints,5.6,3.7,6.3,2.9,5.7
- Uniforms,7.3,4.1,8.1,3.1,7.3
- Normals,13.1,10.2,13.5,7.8,34.6
- Exponentials,7.9,5.4,8.5,4.1,40.3
- Gammas,34.8,28.0,34.7,25.1,58.1
- Binomials,25.0,21.4,26.1,19.5,25.2
- Laplaces,45.1,40.7,45.5,38.1,45.6
- Poissons,67.6,52.4,69.2,46.4,78.1
+ :header: ,MT19937,PCG64,PCG64DXSM,Philox,SFC64,RandomState
+ :widths: 14,14,14,14,14,14,14
+
+ 32-bit Unsigned Ints,3.3,1.9,2.0,3.3,1.8,3.1
+ 64-bit Unsigned Ints,5.6,3.2,2.9,4.9,2.5,5.5
+ Uniforms,5.9,3.1,2.9,5.0,2.6,6.0
+ Normals,13.9,10.8,10.5,12.0,8.3,56.8
+ Exponentials,9.1,6.0,5.8,8.1,5.4,63.9
+ Gammas,37.2,30.8,28.9,34.0,27.5,77.0
+ Binomials,21.3,17.4,17.6,19.3,15.6,21.4
+ Laplaces,73.2,72.3,76.1,73.0,72.3,82.5
+ Poissons,111.7,103.4,100.5,109.4,90.7,115.2
The next table presents the performance in percentage relative to values
generated by the legacy generator, ``RandomState(MT19937())``. The overall
performance was computed using a geometric mean.
.. csv-table::
- :header: ,MT19937,PCG64,Philox,SFC64
- :widths: 14,14,14,14,14
-
- 32-bit Unsigned Ints,101,121,67,121
- 64-bit Unsigned Ints,102,156,91,199
- Uniforms,100,179,90,235
- Normals,263,338,257,443
- Exponentials,507,752,474,985
- Gammas,167,207,167,231
- Binomials,101,118,96,129
- Laplaces,101,112,100,120
- Poissons,116,149,113,168
- Overall,144,192,132,225
+ :header: ,MT19937,PCG64,PCG64DXSM,Philox,SFC64
+ :widths: 14,14,14,14,14,14
+
+ 32-bit Unsigned Ints,96,162,160,96,175
+ 64-bit Unsigned Ints,97,171,188,113,218
+ Uniforms,102,192,206,121,233
+ Normals,409,526,541,471,684
+ Exponentials,701,1071,1101,784,1179
+ Gammas,207,250,266,227,281
+ Binomials,100,123,122,111,138
+ Laplaces,113,114,108,113,114
+ Poissons,103,111,115,105,127
+ Overall,159,219,225,174,251
.. note::
- All timings were taken using Linux on an i5-3570 processor.
+ All timings were taken using Linux on an AMD Ryzen 9 3900X processor.
Performance on different Operating Systems
******************************************
@@ -101,33 +100,33 @@ across tables.
64-bit Linux
~~~~~~~~~~~~
-=================== ========= ======= ======== =======
-Distribution MT19937 PCG64 Philox SFC64
-=================== ========= ======= ======== =======
-32-bit Unsigned Int 100 119.8 67.7 120.2
-64-bit Unsigned Int 100 152.9 90.8 213.3
-Uniforms 100 179.0 87.0 232.0
-Normals 100 128.5 99.2 167.8
-Exponentials 100 148.3 93.0 189.3
-**Overall** 100 144.3 86.8 180.0
-=================== ========= ======= ======== =======
+===================== ========= ======= =========== ======== =======
+Distribution MT19937 PCG64 PCG64DXSM Philox SFC64
+===================== ========= ======= =========== ======== =======
+32-bit Unsigned Ints 100 168 166 100 182
+64-bit Unsigned Ints 100 176 193 116 224
+Uniforms 100 188 202 118 228
+Normals 100 128 132 115 167
+Exponentials 100 152 157 111 168
+Overall 100 161 168 112 192
+===================== ========= ======= =========== ======== =======
64-bit Windows
~~~~~~~~~~~~~~
-The relative performance on 64-bit Linux and 64-bit Windows is broadly similar.
-
+The relative performance on 64-bit Linux and 64-bit Windows is broadly similar
+with the notable exception of the Philox generator.
-=================== ========= ======= ======== =======
-Distribution MT19937 PCG64 Philox SFC64
-=================== ========= ======= ======== =======
-32-bit Unsigned Int 100 129.1 35.0 135.0
-64-bit Unsigned Int 100 146.9 35.7 176.5
-Uniforms 100 165.0 37.0 192.0
-Normals 100 128.5 48.5 158.0
-Exponentials 100 151.6 39.0 172.8
-**Overall** 100 143.6 38.7 165.7
-=================== ========= ======= ======== =======
+===================== ========= ======= =========== ======== =======
+Distribution MT19937 PCG64 PCG64DXSM Philox SFC64
+===================== ========= ======= =========== ======== =======
+32-bit Unsigned Ints 100 155 131 29 150
+64-bit Unsigned Ints 100 157 143 25 154
+Uniforms 100 151 144 24 155
+Normals 100 129 128 37 150
+Exponentials 100 150 145 28 159
+**Overall** 100 148 138 28 154
+===================== ========= ======= =========== ======== =======
32-bit Windows
@@ -137,20 +136,20 @@ The performance of 64-bit generators on 32-bit Windows is much lower than on 64-
operating systems due to register width. MT19937, the generator that has been
in NumPy since 2005, operates on 32-bit integers.
-=================== ========= ======= ======== =======
-Distribution MT19937 PCG64 Philox SFC64
-=================== ========= ======= ======== =======
-32-bit Unsigned Int 100 30.5 21.1 77.9
-64-bit Unsigned Int 100 26.3 19.2 97.0
-Uniforms 100 28.0 23.0 106.0
-Normals 100 40.1 31.3 112.6
-Exponentials 100 33.7 26.3 109.8
-**Overall** 100 31.4 23.8 99.8
-=================== ========= ======= ======== =======
+===================== ========= ======= =========== ======== =======
+Distribution MT19937 PCG64 PCG64DXSM Philox SFC64
+===================== ========= ======= =========== ======== =======
+32-bit Unsigned Ints 100 24 34 14 57
+64-bit Unsigned Ints 100 21 32 14 74
+Uniforms 100 21 34 16 73
+Normals 100 36 57 28 101
+Exponentials 100 28 44 20 88
+**Overall** 100 25 39 18 77
+===================== ========= ======= =========== ======== =======
.. note::
- Linux timings used Ubuntu 18.04 and GCC 7.4. Windows timings were made on
+ Linux timings used Ubuntu 20.04 and GCC 9.3.0. Windows timings were made on
Windows 10 using Microsoft C/C++ Optimizing Compiler Version 19 (Visual
- Studio 2015). All timings were produced on an i5-3570 processor.
+ Studio 2019). All timings were produced on an AMD Ryzen 9 3900X processor.