性能

建议

推荐的通用发电机为 PCG64 . 在大多数平台上,它具有统计上的高质量、全功能和快速性,但在为32位进程编译时有些慢。

Philox 它的速度相当慢,但是它的统计特性具有很高的质量,并且通过使用唯一的密钥很容易获得可靠的独立流。如果这是您希望用于并行流的样式,或者您正在从使用该样式的另一个系统进行移植,那么 Philox 是你的选择。

SFC64 在统计上质量很高,速度也很快。然而,它缺乏跳跃性。如果你不想在32位上使用这个功能,那么很多进程都不需要。

MT19937 fails some statistical tests 与现代的prng相比,速度也不是特别快。出于这些原因,我们通常不建议单独使用它,只通过遗留系统使用它 RandomState 用于重现旧结果。也就是说,在许多系统中,它作为默认值有很长的历史。

时间安排

以下计时是从特定分布产生1个随机值的时间(单位:ns)。原版 MT19937 生成器的速度要慢得多,因为它需要2个32位的值来等于更快的生成器的输出。

整数性能具有类似的顺序。

对于其他更复杂的生成器,模式类似。遗产的正常表现 RandomState 由于它使用的是Box-Muller变换,而不是Ziggurat发生器,所以它比另一个低得多。指数函数的性能差距也很大,这是由于计算对数函数以反转CDF的成本造成的。标记为MT19973的列与使用的32位生成器相同 RandomState 但是使用 Generator .

MT19937型

PCG64型

菲洛克斯

SFC64型

RandomState

32位无符号整数

3.2

2.7

4.9

2.7

3.2

64位无符号整数

5.6

3.7

6.3

2.9

5.7

制服

7.3

4.1

8.1

3.1

7.3

法线

13.1

10.2

13.5

7.8

34.6

指数

7.9

5.4

8.5

4.1

40.3

伽马

34.8

28.0

34.7

25.1

58.1

二项式

25.0

21.4

26.1

19.5

25.2

花边

45.1

40.7

45.5

38.1

45.6

泊松

67.6

52.4

69.2

46.4

78.1

下表以百分比表示性能与传统生成器生成的值之间的关系, RandomState(MT19937()) . 使用几何平均值计算总体性能。

MT19937型

PCG64型

菲洛克斯

SFC64型

32位无符号整数

101

121

67

121

64位无符号整数

102

156

91

199

制服

100

179

90

235

法线

263

338

257

443

指数

507

752

474

985

伽马

167

207

167

231

二项式

101

118

96

129

花边

101

112

100

120

泊松

116

149

113

168

总体

144

192

132

225

注解

所有计时都是在i5-3570处理器上使用Linux进行的。

在不同操作系统上的性能

由于编译器和硬件可用性(例如寄存器宽度)的差异,不同平台的性能有所不同。已选择默认位生成器以在64位平台上运行良好。32位操作系统的性能有很大的不同。

所报告的值相对于各表中MT19937的速度进行了标准化。值100表示性能与MT19937匹配。值越高,表示性能越好。这些值不能跨表进行比较。

64位Linux

分布

MT19937型

PCG64型

菲洛克斯

SFC64型

32位无符号整数

100

119.8

67.7

120.2

64位无符号整数

100

152.9

90.8

213.3

制服

100

179.0

87.0

232.0

法线

100

128.5

99.2

167.8

指数

100

148.3

93.0

189.3

Overall

100

144.3

86.8

180.0

64位Windows

在64位Linux和64位Windows上的相对性能大致相似。

分布

MT19937型

PCG64型

菲洛克斯

SFC64型

32位无符号整数

100

129.1

35.0

135.0

64位无符号整数

100

146.9

35.7

176.5

制服

100

165.0

37.0

192.0

法线

100

128.5

48.5

158.0

指数

100

151.6

39.0

172.8

Overall

100

143.6

38.7

165.7

32位Windows

由于寄存器宽度的原因,64位生成器在32位Windows上的性能远远低于64位操作系统上的性能。MT19937是NumPy自2005年以来推出的一款基于32位整数的生成器。

分布

MT19937型

PCG64型

菲洛克斯

SFC64型

32位无符号整数

100

30.5

21.1

77.9

64位无符号整数

100

26.3

19.2

97.0

制服

100

28.0

23.0

106.0

法线

100

40.1

31.3

112.6

指数

100

33.7

26.3

109.8

Overall

100

31.4

23.8

99.8

注解

Linux计时使用了ubuntu18.04和gcc7.4。Windows定时使用微软C/C++优化编译器版本19(Visual Studio 2015)在Windows 10上进行。所有计时都是在i5-3570处理器上产生的。