表现

推荐

推荐用于一般用途的生成器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 处理器上生成。