表现#
推荐#
推荐用于一般用途的生成器PCG64
或其升级变体
PCG64DXSM
,用于高度并行的用例。它们在大多数平台上具有统计上的高质量、功能齐全且速度快,但在为 32 位进程编译时有些慢。请参阅使用 PCG64DXSM 升级 PCG64,了解有关何时需要使用重并行性的详细信息PCG64DXSM
。
Philox
速度相当慢,但其统计特性具有非常高的质量,并且通过使用唯一键很容易获得可靠独立的流。如果这是您希望用于并行流的样式,或者您是从使用该样式的另一个系统移植的,那么
Philox
您可以选择。
SFC64
统计上质量很高并且速度非常快。然而,它缺乏跳跃能力。如果您不使用该功能并且想要很高的速度,即使在 32 位进程上也是如此,这就是您的选择。
MT19937
未通过一些统计测试,并且与现代 PRNG 相比并不是特别快。由于这些原因,我们通常不建议单独使用它,而仅通过遗留RandomState
来重现旧结果。也就是说,它在许多系统中作为默认值有着很长的历史。
时间#
下面的计时是从特定分布生成 1 个随机值的时间(以 ns 为单位)。原始MT19937
生成器要慢得多,因为它需要 2 个 32 位值才能等于较快生成器的输出。
整数性能具有类似的排序。
对于其他更复杂的生成器,该模式类似。传统生成器的正常性能RandomState
远低于其他生成器,因为它使用 Box-Muller 变换而不是 Ziggurat 方法。由于计算对数函数以反转 CDF 的成本,指数的性能差距也很大。标记为 MT19973 的列使用与 相同的 32 位生成器,
RandomState
但使用 生成随机变量Generator
。
MT19937 |
PCG64 |
PCG64DXSM |
菲洛克斯 |
证监会64 |
随机状态 |
|
---|---|---|---|---|---|---|
32 位无符号整数 |
3.3 |
1.9 |
2.0 |
3.3 |
1.8 |
3.1 |
64 位无符号整数 |
5.6 |
3.2 |
2.9 |
4.9 |
2.5 |
5.5 |
制服 |
5.9 |
3.1 |
2.9 |
5.0 |
2.6 |
6.0 |
法线 |
13.9 |
10.8 |
10.5 |
12.0 |
8.3 |
56.8 |
指数 |
9.1 |
6.0 |
5.8 |
8.1 |
5.4 |
63.9 |
伽玛 |
37.2 |
30.8 |
28.9 |
34.0 |
27.5 |
77.0 |
二项式 |
21.3 |
17.4 |
17.6 |
19.3 |
15.6 |
21.4 |
拉普拉斯 |
73.2 |
72.3 |
76.1 |
73.0 |
72.3 |
82.5 |
泊松 |
111.7 |
103.4 |
100.5 |
109.4 |
90.7 |
115.2 |
下表显示了相对于传统生成器生成的值的性能百分比RandomState(MT19937())
。使用几何平均值计算总体性能。
MT19937 |
PCG64 |
PCG64DXSM |
菲洛克斯 |
证监会64 |
|
---|---|---|---|---|---|
32 位无符号整数 |
96 |
162 |
160 |
96 |
175 |
64 位无符号整数 |
97 |
171 |
188 |
113 |
218 |
制服 |
102 |
192 |
206 |
121 |
233 |
法线 |
409 |
第526章 |
第541章 |
第471章 |
第684章 |
指数 |
701 |
1071 |
1101 |
第784章 |
第1179章 |
伽玛 |
207 |
250 |
266 |
227 |
第281章 |
二项式 |
100 |
123 |
122 |
111 |
138 |
拉普拉斯 |
113 |
114 |
108 |
113 |
114 |
泊松 |
103 |
111 |
115 |
105 |
127 |
全面的 |
159 |
219 |
225 |
174 |
第251章 |
笔记
所有计时均使用 AMD Ryzen 9 3900X 处理器上的 Linux 进行。
不同操作系统上的性能#
由于编译器和硬件可用性(例如寄存器宽度)的差异,不同平台的性能有所不同。默认位生成器已选择在 64 位平台上表现良好。 32 位操作系统上的性能有很大不同。
每个表中报告的值均相对于 MT19937 的速度进行标准化。值为 100 表示性能与 MT19937 匹配。值越高表示性能越好。这些值无法跨表进行比较。
64 位 Linux #
分配 |
MT19937 |
PCG64 |
PCG64DXSM |
菲洛克斯 |
证监会64 |
---|---|---|---|---|---|
32 位无符号整数 |
100 |
168 |
166 |
100 |
182 |
64 位无符号整数 |
100 |
176 |
193 |
116 |
224 |
制服 |
100 |
188 |
第202章 |
118 |
228 |
法线 |
100 |
128 |
132 |
115 |
167 |
指数 |
100 |
152 |
157 |
111 |
168 |
全面的 |
100 |
161 |
168 |
112 |
192 |
64 位 Windows #
64 位 Linux 和 64 位 Windows 上的相对性能大致相似,但 Philox 生成器有明显的例外。
分配 |
MT19937 |
PCG64 |
PCG64DXSM |
菲洛克斯 |
证监会64 |
---|---|---|---|---|---|
32 位无符号整数 |
100 |
155 |
131 |
29 |
150 |
64 位无符号整数 |
100 |
157 |
143 |
25 |
154 |
制服 |
100 |
151 |
144 |
24 |
155 |
法线 |
100 |
129 |
128 |
37 |
150 |
指数 |
100 |
150 |
145 |
28 |
159 |
全面的 |
100 |
148 |
138 |
28 |
154 |
32 位 Windows #
由于寄存器宽度的原因,64 位生成器在 32 位 Windows 上的性能远低于 64 位操作系统上的性能。 MT19937 是 NumPy 自 2005 年以来就出现的生成器,可对 32 位整数进行操作。
分配 |
MT19937 |
PCG64 |
PCG64DXSM |
菲洛克斯 |
证监会64 |
---|---|---|---|---|---|
32 位无符号整数 |
100 |
24 |
34 |
14 |
57 |
64 位无符号整数 |
100 |
21 |
32 |
14 |
74 |
制服 |
100 |
21 |
34 |
16 |
73 |
法线 |
100 |
36 |
57 |
28 |
101 |
指数 |
100 |
28 |
44 |
20 |
88 |
全面的 |
100 |
25 |
39 |
18 |
77 |
笔记
Linux 计时使用 Ubuntu 20.04 和 GCC 9.3.0。 Windows 计时是使用 Microsoft C/C++ 优化编译器版本 19 (Visual Studio 2019) 在 Windows 10 上进行的。所有时序均在 AMD Ryzen 9 3900X 处理器上生成。