通过 mc.cores 与 makePSOCKcluster 设置内核?
Posted
技术标签:
【中文标题】通过 mc.cores 与 makePSOCKcluster 设置内核?【英文标题】:Setting cores via mc.cores vs. makePSOCKcluster? 【发布时间】:2019-12-24 22:12:13 【问题描述】:我想知道通过makePSOCKcluster
设置 R 使用的核心数量和在 foreach 循环中明确设置有什么区别?我应该在这两种情况下分别设置,还是在使 makePSOCKcluster
足够时这样做?
cl <- makePSOCKcluster(max(1, detectCores() - 1))
registerDoParallel(cl)
和
mcoptions <- list( preschedule=FALSE, mc.cores = max(1,detectCores()-1) )
stream = foreach(i=1:NROW(stream_sponsored), .inorder=FALSE,
.combine=rbind,
.options.multicore=mcoptions) %dopar%
#do something
【问题讨论】:
对于 foreach,registerDoParallel()
就足够了。
【参考方案1】:
来自 [https://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf][1]
'“核心”选项允许您临时覆盖用于单个 foreach 操作的工作人员数量。这比必须重新注册 doParallel 更方便。虽然如果注册 doParallel 时没有指定“cores”值,您也可以使用 options 函数动态更改此值:
options(cores=2)
getDoParWorkers()
options(cores=3)
getDoParWorkers()
如果您在注册 doParallel 时确实指定了核心数,则“核心”选项将被忽略:
registerDoParallel(4)
options(cores=2)
getDoParWorkers()
如您所见,有许多选项可用于控制并行使用的工作器数量,但默认行为通常会满足您的需求。'
所以,简而言之,如果你调用了一次 foreach,那么就不需要在 foreach 中指定核心。但是如果你调用两个或多个具有不同内核的 foreach,则无需在 registerDoParallel 中指定内核
【讨论】:
以上是关于通过 mc.cores 与 makePSOCKcluster 设置内核?的主要内容,如果未能解决你的问题,请参考以下文章