Jor*_*tao 8 c c++ random parallel-processing
我正在开发一个C/C++项目,我正在使用随机数生成器(gsl或boost).整个想法可以简化为一个非平凡的随机过程,它接收种子并返回结果.我正在计算流程的不同实现的平均值.
因此,种子很重要:过程必须使用不同的种子,否则会偏向平均值.
到目前为止,我正在使用time(NULL)种子.但是,如果两个进程在同一秒开始,则种子是相同的.这是因为我正在使用并行化(使用openMP).
所以,我的问题是:如何在C/C++上实现一个"种子赋予者",它可以提供独立的种子?
举例来说,我虽然在使用的线程数,( ).thread_num seed = time(NULL)*thread_num然而,这意味着种子是相关的:它们是彼此的多个.这会对"伪随机"造成任何问题,还是与顺序种子一样好?
要求是它必须适用于Mac OS(我的电脑)和类似于OS Cent(集群)的Linux发行版(并且自然地给出了独立的实现).
对此通常使用的方案是具有用于为每个特定于过程的RNG生成种子的"主"RNG.
这种方案的优点是整个计算只由一个种子决定,你可以在某处记录,以便能够重放任何模拟(这可能对调试令人讨厌的错误很有用).
我们在Beowulf计算网格上遇到了类似的问题,我们使用的解决方案是将流程的pid合并到RNG种子中,如下所示:
time(NULL)*thread_num*getpid()
Run Code Online (Sandbox Code Playgroud)
当然,您可以从/ dev/urandom或/ dev/random读取整数.