gpt4 book ai didi

c++ - 如何为并行进程正确选择 rng seed

转载 作者:可可西里 更新时间:2023-11-01 17:10:36 24 4
gpt4 key购买 nike

我目前正在开发一个 C/C++ 项目,我在其中使用随机数生成器(gslboost)。整个想法可以简化为一个不平凡的 stochastic process它接收种子并返回结果。我正在计算过程的不同实现的平均值。

因此,种子很重要:进程必须使用不同的种子,否则会使平均值产生偏差。

到目前为止,我正在使用 time(NULL) 来提供种子。但是,如果两个进程在同一秒启动,则种子是相同的。发生这种情况是因为我正在使用并行化(使用 openMP )。

所以,我的问题是:如何在 C/C++ 上实现提供独立种子的“种子提供者”?

例如,我在使用线程号 (thread_num) 时,seed = time(NULL)*thread_num。然而,这意味着种子是相关的:它们是彼此的倍数。这是否会对“伪随机”造成任何问题,或者它是否与顺序种子一样好?

要求是它必须在 Mac OS(我的电脑)和类似于 OS Cent(集群)的 Linux 发行版上运行(并且自然地给出独立的实现)。

最佳答案

一个常用的方案是使用“主”RNG 为每个特定于流程的 RNG 生成种子。

这种方案的优点是整个计算仅由一个种子决定,您可以将其记录在某个地方以便能够重播任何模拟(这可能对调试讨厌的错误很有用)。

关于c++ - 如何为并行进程正确选择 rng seed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12779235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com