并行随机数生成器:方法、实现与测试
在现代计算机系统中,多线程和多进程的运行环境十分常见,许多线程或进程需要独立的伪随机数流。本文将探讨几种生成并行伪随机数流的方法,并介绍如何对这些流的输出进行测试。
1. 生成和测试随机数流的方法
在多线程或多进程环境中使用单个伪随机数流,历史上有四种解决方案:
1. 使用随机数服务器进程
2. 为每个流使用不同类型的伪随机数生成器
3. 将伪随机流划分为不重叠的段
4. 为每个流使用单个生成器类型并进行随机种子设置
下面将重点介绍后三种方法,并添加关于基于计数器的生成器的内容,同时实现一种类似随机种子设置的方法,即使用两个分别初始化种子的生成器的异或输出。
1.1 随机数服务器进程
随机数服务器进程虽然可行,但由于性能和缺乏确定性等原因,很少被实现。性能方面,服务器进程需要进程间通信和锁定,这会给原本简单的计算增加大量开销。例如,xorshift 系列生成器的代码只有几行,而设置进程间通信所需的代码比生成器本身还多。此外,服务器缺乏确定性,不同运行中进程请求值的顺序不确定,即使服务器进程使用相同的种子,每次运行时进程接收到的值序列也会不同,这在许多应用中是不可接受的。
1.2 测试并行生成器的输出
对于并行生成的随机数流,我们可以通过将多个流逐样本交错合并成一个输出文件,然后使用伪随机数测试工具(如 dieharder 或 TestU01 框架)对该文件进行测试。具体步骤如下:
1. 使用任意方法生成 n 个包含 m 个随机数的流,并将它们存储在 n 个文件中。
2. 根据交错规则将 n 个文件合
超级会员免费看
订阅专栏 解锁全文
1891

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



