2014-02-13 47 views
2

当运行在R中的以下脚本:使用doMC库并行R:如何重用核心以用于后续并行进程?

library(doMC) 
registerDoMC(cores=3) 

# First foreach 
# This runs in 3 threads 
foreach(i=1:3) %dopar% sqrt(i) 

# Second foreach 
# This add 3 threads to the previous ones (now inactive but still consuming memory), totalling 6 threads 
foreach(i=1:3) %dopar% sqrt(i) 

我想知道如何在运行第二个时,使整个脚本始终运行使用3芯重用第一foreach的线程。

+0

您应该将编辑转换为答案,以便于查找和理解。 –

+0

完成(见下面的答案) – Marcelo

回答

1

感谢doMC的开发人员的建议,我可以找到解决方法。使用不同的库,下面的代码做我正在寻找的内容:

library(doParallel) 
cores=makeForkCluster(3) 
registerDoParallel(cores) 

# First foreach 
# This runs in 3 threads 
foreach(i=1:3) %dopar% sqrt(i) 

# Second foreach 
# This reuses the previous 3 threads (total of 3 active threads) 
foreach(i=1:3) %dopar% sqrt(i) 
+1

这是有道理的。您还可以提到'foreach'使用了一个模块化系统,您可以在其中插入不同的后端,具有不同的语法和副作用(如内核持久性)。 –