Act*_*reg 2 parallel-processing foreach r global-variables doparallel
如何在foreach中为每个并行模拟的开始导出全局环境?以下代码是调用以运行模拟的函数的一部分.
num.cores <- detectCores()-1
cluztrr <- makeCluster(num.cores)
registerDoParallel(cl = cluztrr)
sim.result.list <- foreach(r = 1:simulations,
.combine = list,
.multicombine = TRUE,
) %dopar% {
#...tons of calculations using many variables...
list(vals1,
vals2,
vals3)
}
stopCluster(cluztrr)
Run Code Online (Sandbox Code Playgroud)
是否有必要使用.export与我使用的每个变量和函数的字符向量?执行时间会慢吗?
如果foreach循环在全局环境中,则应自动导出变量.如果没有,您可以使用.export = ls(globalenv())(或.GlobalEnv).
对于其他包中的函数,您只需要使用语法package::function.
"如果[...]在全球环境中,......" F.Privé回复的一部分在这里非常重要.foreach框架只会识别该情况下的全局变量.它会不会这么做,如果foreach()调用一个函数内完成.
但是,如果你使用doFuture后端(免责声明:我是作者);
library("doFuture")
registerDoFuture()
plan(cluster, workers = cl)
Run Code Online (Sandbox Code Playgroud)
将自动识别和导出所需的全局变量(然后由未来的框架而不是foreach框架完成).现在,如果你依赖于此,并且没有明确指定.export,那么你的代码只能doFuture用于其他后端,而不能用于其他后端.这是您作为开发人员需要做出的决定.
此外,全局变量的自动导出是整洁的,但要小心你知道导出多少; 导出太多太大的对象可能会非常昂贵,并且会在并行代码中引入大量开销.
| 归档时间: |
|
| 查看次数: |
2234 次 |
| 最近记录: |