通过mc.cores与makePSOCKcluster设置内核?

时间:2019-08-19 16:54:45

标签: r foreach doparallel

我想知道通过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
}

1 个答案:

答案 0 :(得分:0)

来自[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中指定内核