我正在尝试使用DoMC构建一个并行的foreach循环,但是有一些奇怪的行为正在发生。代码看起来像这样
for (file in files) {
do stuff
for (extra in extras) {
do some heavy stuff
}
}
我想要的是并行化顶部循环而不是内部第二循环。谁知道发生了什么?我过去曾经使用过foreach和doMC,之前从未遇到过这个问题。
答案 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)
我希望这有帮助!