在 R 中编程时,我曾多次使用多核包。但是,我从未见过关于它如何处理随机数的声明。当我将 openMP 与 C 一起使用时,我会小心地使用适当的并行 RNG,但对于 R,我假设会发生一些明智的事情。任何人都可以确认确实发生了一些明智的事情吗?
例子
从文档中,我们有
x <- foreach(icount(1000), .combine = "+") %do% rnorm(4)
rnorm
`s是如何产生的?
在 R 中编程时,我曾多次使用多核包。但是,我从未见过关于它如何处理随机数的声明。当我将 openMP 与 C 一起使用时,我会小心地使用适当的并行 RNG,但对于 R,我假设会发生一些明智的事情。任何人都可以确认确实发生了一些明智的事情吗?
例子
从文档中,我们有
x <- foreach(icount(1000), .combine = "+") %do% rnorm(4)
rnorm
`s是如何产生的?
我不确定它是如何foreach
工作的(我猜来自 doMC 包),但在多核中,如果你做了类似mclapply
参数mc.set.seed
默认值的操作,TRUE
它会为每个进程提供不同的种子(例如mclapply(1:1000, rnorm)
)。我假设您的代码被翻译成类似的东西,即归结为parallel
具有相同约定的调用。
但也请参阅Charlie Geyer幻灯片的第 16 页,其中推荐rlecuyer包用于具有理论保证的并行独立流。Geyer 的页面还有 R 中用于不同设置的示例代码。