并行伪随机数生成方法探究
在许多科学计算和模拟场景中,并行伪随机数生成是一项重要的技术。本文将介绍几种不同的并行伪随机数生成方法,包括跳跃法、随机种子法、Fog 方法以及基于计数器的生成方法,并对它们的性能和特点进行分析。
跳跃法(Skipping)
跳跃法通过为不同的流设置不同的起始点,以确保各流之间不会重叠。代码示例如下:
elif (gen == 1):
for j in range(samples/2):
n = g[i].next()
f.write(struct.pack("Q",n))
elif (gen == 2):
for j in range(samples/2):
n = g[i].next()
f.write(struct.pack("Q",n))
main()
在该方法中,对于 MINSTD 生成器,使用浮点输出并缩放以得到无符号 32 位输出值;对于 xorshift 生成器,得到 64 位输出并存储为两个 32 位输出,因此只生成请求样本数的一半。实验中为每个生成器生成 10 个独立的 5000 万样本流,然后交错它们以创建一个用于 dieharder 测试的单个文件。测试结果如下表所示:
| 生成器 | 通过数 | 弱通过数 | 失败数 | 得分 |
| ---- | ---- | ---- | ---- | ---- |
| MINSTD | 94 | 8 | 12 | 172 |
| xorshift128+ | 110 | 4
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



