R foreach 包括 for 循环奇怪的行为
R foreach that includes for loops weird behavior
我正在尝试使用 DoMC 构建一个并行的 foreach 循环,但出现了一些奇怪的行为。代码看起来像这样
for (file in files) {
do stuff
for (extra in extras) {
do some heavy stuff
}
}
- 当我加载 DoMC 或 DoParallel 时,循环开始使用一个内核,但在第二个循环中它使用所有 4 个内核
- 当我将 for 循环切换到 foreach %do% 时,我得到了完全相同的行为。
- 如果我在外循环中使用 foreach 而将内循环保留为 for 循环,脚本会变慢。它从 4 个并行作业开始,然后它们都停止并逐渐 CPU 使用率下降。
我想要的是并行化顶部循环而不是内部第二个循环。任何人都知道发生了什么事?我以前用过 foreach 和 doMC,以前从来没有遇到过这个问题。
看起来你发生了一些事情,但这里还不够确定:
如果您从 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)
希望对您有所帮助!
我正在尝试使用 DoMC 构建一个并行的 foreach 循环,但出现了一些奇怪的行为。代码看起来像这样
for (file in files) {
do stuff
for (extra in extras) {
do some heavy stuff
}
}
- 当我加载 DoMC 或 DoParallel 时,循环开始使用一个内核,但在第二个循环中它使用所有 4 个内核
- 当我将 for 循环切换到 foreach %do% 时,我得到了完全相同的行为。
- 如果我在外循环中使用 foreach 而将内循环保留为 for 循环,脚本会变慢。它从 4 个并行作业开始,然后它们都停止并逐渐 CPU 使用率下降。
我想要的是并行化顶部循环而不是内部第二个循环。任何人都知道发生了什么事?我以前用过 foreach 和 doMC,以前从来没有遇到过这个问题。
看起来你发生了一些事情,但这里还不够确定:
如果您从 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)
希望对您有所帮助!