sim*_*321 5 parallel-processing r
我有疑问future(),doFuture()用法.
我想N并行运行计算(使用foreach ... %dopar%) - N我的机器上有多少核心.为此,我使用future:
library(doFuture)
registerDoFuture()
plan(multiprocess)
foreach(i = seq_len(N)) %dopar% {
foo <- rnorm(1e6)
}
Run Code Online (Sandbox Code Playgroud)
这就像一个魅力,因为我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")
}
Run Code Online (Sandbox Code Playgroud)
我在运行多个rnorm与head并行,但由于head使用了大量的内核(让我们假设这个)我的分析卡住.
题:
如何使用并行运行部分代码future?(如何仅rnorm并行运行然后head顺序运行)?有没有使用另一个循环的解决方案?或者我应该切换到doSNOW或parallel?
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
}
Run Code Online (Sandbox Code Playgroud)
对@Andrie的回应评论:
future()是我在R中执行并行计算的方法.我是新手,并且发现它最容易使用(与例如相比parallel::mcapply).但是,如果有可能做我想做的doSNOW还是parallel那我更乐意切换| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |