首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >foreach,doParallel和随机生成

foreach,doParallel和随机生成
EN

Stack Overflow用户
提问于 2017-04-08 19:24:44
回答 1查看 875关注 0票数 3

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

代码语言:javascript
复制
cl <- makeCluster(2)
registerDoParallel(cl)
foreach(i = 1:100) %dopar% rnorm(1)

它是正确的,还是有任何额外的步骤需要随机生成正常工作?我想这是足够和快速的检查似乎“证明”种子工作正常,但我想要确保它是在其他平台上,因为我希望代码是可移植的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-09 02:08:05

你的担忧是正确的;随机数的生成不能神奇地并行工作,还需要采取进一步的步骤。在使用foreach框架时,您可以使用doRNG扩展来确保在并行执行时也能得到声音随机数。

示例:

代码语言:javascript
复制
library("doParallel")
cl <- makeCluster(2)
registerDoParallel(cl)

## Declare that parallel RNG should be used for in a parallel foreach() call.
## %dorng% will still result in parallel processing; it uses %dopar% internally.
library("doRNG")

y <- foreach(i = 1:100) %dorng% rnorm(1)

编辑2020-08-04:以前,这一答案提出了备选方案:

代码语言:javascript
复制
library("doRNG")
registerDoRNG()
y <- foreach(i = 1:100) %dopar% rnorm(1)

但是,这样做的缺点是,对于开发人员来说,在函数内部以干净的方式使用registerDoRNG()要复杂得多。因此,我建议使用%dorng%来指定应该使用并行RNG。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43299428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档