我正在尝试在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个内核,还是不可能?
谢谢!
答案 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个内核。