我想知道通过设置 R 使用的核心数有什么区别makePSOCKcluster
并明确地在 foreach 循环中?我应该在这两种情况下单独设置它,还是在制作时这样做makePSOCKcluster
enough?
cl <- makePSOCKcluster(max(1, detectCores() - 1))
registerDoParallel(cl)
and
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
}
From [https://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf][1] https://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf%5D%5B1%5D
'“核心”选项允许您临时覆盖用于单个 foreach 操作的工作线程数量。这比必须重新注册 doParallel 更方便。尽管如果注册 doParallel 时未指定“cores”值,您也可以使用 options 函数动态更改该值:
options(cores=2)
getDoParWorkers()
options(cores=3)
getDoParWorkers()
如果您在注册 doParallel 时指定了核心数量,则“cores”选项将被忽略:
registerDoParallel(4)
options(cores=2)
getDoParWorkers()
正如您所看到的,有许多选项可用于控制并行使用的工作线程数量,但默认行为通常会满足您的要求。
因此,简而言之,如果您调用 foreach 一次,则无需在 foreach 内指定核心。但是,如果您使用不同的内核调用两个或多个 foreach,则无需在 registerDoParallel 中指定内核
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)