指定R doParallel的核心数

时间:2019-05-13 22:05:17

标签: r parallel-processing

我正在尝试在R中指定一个并行进程,以在计算机上使用4个可能的内核中的3个,以便在后台运行时为其他进程留一些CPU能力。我的代码如下所示:

library(doParallel)

cl <- makePSOCKcluster(3)
registerDoParallel(cl)

results <- foreach(i = 1:10) %dopar% {
...some processes to be parallelized...
}

stopCluster(cl)

当我运行它并查看任务管理器时,所有内核都以100%运行。有没有办法只使用3个内核,还是不可能?

谢谢!

2 个答案:

答案 0 :(得分:0)

我确定这已经在其他地方得到了回答,但是...

cl <- makePSOCKcluster(detectCores() * .875)

OR

cl <- makePSOCKcluster(detectCores() - 1)

将为此工作。

请查看detectCores()上的帮助页面,最后一条警告是,我曾经将detectCores放入一个循环中,认为它的速度很快……不是,所以,如果您需要多次,请分配一个变量。

最后,这些天,我非常赞成使用furrr(future_map等)而不是foreach()%dopar%进行并行化。

答案 1 :(得分:0)

在运行并行进程之前使用mcaffinity,可以限制内核数。

parallel::mcaffinity(1:3)

mcaffinity允许您的R工作仅分配前3个内核。