Future将并行运行部分代码

时间:2017-10-26 11:02:28

标签: r parallel-processing

我对future()doFuture()用法有疑问。

我希望并行运行N次计算(使用foreach ... %dopar%) - N是我的计算机上拥有的核心数。为此,我使用future

library(doFuture)
registerDoFuture()
plan(multiprocess)

foreach(i = seq_len(N)) %dopar% {
    foo <- rnorm(1e6)
}

当我同时运行N次计算时,这就像一个魅力。但我需要实现另一个使用大量核心的分析步骤(例如,N)。这就是代码的样子:

foreach(i = seq_len(N)) %dopar% {
    foo <- rnorm(1e6)
    write.table(foo, paste0("file_", i, ".txt"))
    # This step uses high number of cores 
    system(paste0("head ", "file_", i, ".txt", " > ", "file_head_", i, ".txt")
}

我并行运行了多个rnormhead,但由于head使用了大量内核(假设这样),我的分析卡住了。

问题:

如何使用future并行运行部分代码? (如何仅并行运行rnorm,然后head顺序运行?有没有使用另一个循环的解决方案?或者我应该切换到doSNOWparallel

PS:

我的真实代码看起来更像是这样:

library(doFuture)
library(dplyr)
registerDoFuture()
plan(multiprocess)

foreach(i = seq_len(N)) %dopar% {
    step1(i) %>%
        step2() %>%
        step3() %>%
        step4_RUN_SEQUENTIAL() %>% # I want to run this part not in parallel
        step5() # I want to run this part again in parallel
}

@Andrie评论的回复:

  1. future()是我在R中执行并行计算的方法。我是新手并且发现它最容易使用(与例如parallel::mcapply相比)。但是,如果可以在doSNOWparallel中执行我想要的操作,那么我非常乐意切换
  2. 我知道这一点,但我正在寻找单循环的解决方案

0 个答案:

没有答案