【发布时间】:2012-09-28 13:21:46
【问题描述】:
我目前正在开发一个 C/C++ 项目,我正在使用随机数生成器(gsl 或 boost)。整个想法可以简化为不平凡的stochastic process,它接收种子并返回结果。我正在计算该过程的不同实现的平均值。
因此,种子很重要:过程必须使用不同的种子,否则会使平均值产生偏差。
到目前为止,我使用time(NULL) 提供种子。但是,如果两个进程在同一秒开始,则种子是相同的。发生这种情况是因为我正在使用并行化(使用 openMP)。
所以,我的问题是:如何在提供独立种子的 C/C++ 上实现“种子提供者”?
例如,我虽然在使用线程号(thread_num),seed = time(NULL)*thread_num。然而,这意味着种子是相关的:它们是彼此的倍数。这对“伪随机”有什么问题吗?还是和顺序种子一样好?
要求它必须同时在 Mac OS(我的电脑)和类似于 OS Cent(集群)的 Linux 发行版上运行(并且自然会提供独立的实现)。
【问题讨论】:
-
“这是否对“伪随机”事物造成任何问题,或者与种子顺序一样好?这取决于您的 RNG,但如果它有效,那应该不是问题。毕竟你得到的是伪随机数。
-
啊,它必须是 (thread_num+1),因为第一个线程始终为 0,并使种子始终为 0。
-
我想你不是在使代码瘫痪,而是在并行化,不:)
标签: c++ c random parallel-processing