R foreach包括for循环奇怪的行为

时间:2016-07-12 02:58:15

标签: r foreach domc

我正在尝试使用DoMC构建一个并行的foreach循环,但是有一些奇怪的行为正在发生。代码看起来像这样

for (file in files) {
do stuff
for (extra in extras) {
do some heavy stuff
}
}
  • 当我加载DoMC或DoParallel时,循环开始使用一个核心,但在第二个循环中它使用所有4个核心
  • 当我将for循环切换到foreach%do%时,我得到完全相同的行为。
  • 如果我将foreach用于外部循环并将内部作为for循环,则脚本会变慢。它以4jobs并行开始,然后它们全部停止并逐渐降低CPU使用率。

我想要的是并行化顶部循环而不是内部第二循环。谁知道发生了什么?我过去曾经使用过foreach和doMC,之前从未遇到过这个问题。

1 个答案:

答案 0 :(得分:1)

看起来你有一些事情要发生,但这里还不够确定:

如果你在RStudio中使用它,它可能效果不好,这是doMC的一个明确的限制。尝试直接从R 64位运行它。

您需要require(doMC)library(doMC)调用该软件包,但您还需要在您的计算机上注册,否则它将无法正常工作

registerDoMC(4) 

4告诉它要运行多少核心。如果你什么都不说,它会使用1/2的核心。

上面没有完整的代码,相应的格式为:

foreach(file in files) %dopar% { stuff to do }

您必须明确告诉它使用%dopar%命令进行并行处理。 如果要在一个区域中使用所有核心而不在其他区域中使用所有核心,则需要设置选项以告知其功能或代码的各个部分有多少个核心。但是如果你告诉外部循环使用4和内部循环使用2,它可能比在外部循环中将其设置为4并让它自己管理事物要慢。我不是100%明确它如何完成交接,试验看。

要更改核心数,只需添加以下行:

options(cores=2)

我希望这有帮助!