foreach,doParallel和随机生成

时间:2017-04-08 19:24:45

标签: r parallel-processing parallel-foreach doparallel

考虑使用并行foreach生成随机值的非常基本(且效率低下)的代码:

cl <- makeCluster(2)
registerDoParallel(cl)
foreach(i = 1:100) %dopar% rnorm(1)

是否正确或是否需要随机生成才能正常工作?我想这已经足够了,快速检查似乎“证明”种子正常工作,但我想确定它在其他平台上是如此,因为我希望代码是可移植的。

1 个答案:

答案 0 :(得分:2)

你的担心是正确的;随机数生成并不神奇地并行工作,需要采取进一步措施。使用foreach框架时,您可以使用doRNG扩展名来确保在并行完成时获得声音随机数。

示例:

library("doParallel")
cl <- makeCluster(2)
registerDoParallel(cl)

## Inject the doRNG framework to above registered for each backend
library("doRNG")
registerDoRNG()

foreach(i = 1:100) %dopar% rnorm(1)