首页 > 解决方案 > 通过 mc.cores 与 makePSOCKcluster 设置内核?

问题描述

makePSOCKcluster我想知道在 foreach 循环中设置 R 使用的核心数量和明确使用之间有什么区别?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
}

标签: rforeachdoparallel

解决方案


来自 [ 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 时确实指定了内核数,则“cores”选项将被忽略:

registerDoParallel(4)
options(cores=2)
getDoParWorkers()

如您所见,有许多选项可用于控制并行使用的工作人员数量,但默认行为通常会满足您的需求。

因此,简而言之,如果您调用一次 foreach,则无需在 foreach 中指定核心。但是,如果您要调用两个或多个具有不同内核的 foreach,则无需在 registerDoParallel 中指定内核


推荐阅读