我正在尝试在 R 中使用foreach
和进行并行编程future.apply
。
下面是一个示例代码。
# libraries
library(doFuture)
library(future.apply)
library(foreach)
registerDoFuture()
plan(cluster, workers = 4)
# function
mean_rnorm <- function(n, mean, sd)
{
# numbers
num <- rnorm(n = n, mean = mean, sd = sd)
# mean
mean(num)
}
# 1. calculate means in parallel using 'foreach'
res <- foreach(n = seq(10, 10000, 10)) %dopar%
mean_rnorm(n, mean = 2, sd = 3)
# 2. calculate means in parallel using 'future.apply'
res <- future_lapply(n = seq(10, 10000, 10),
FUN = mean_rnorm, mean = 2, sd = 3)
问题 1. - 由于任务数量很大,每个任务生成随机数和计算均值的速度非常快。所以为了尽量减少master和worker之间的通信开销,我希望一次给worker多个任务,让他们一起返回结果。
a)foreach
正在工作,但我怎样才能将任务分成 4 个块foreach
?
b) 为什么部分代码有错误future_lapply
,如何将任务分成 4 个块?(is.vector(X) 中的错误:缺少参数“X”,没有默认值)
………………………………………………………………………………………………………………………………………………
问题 2. - 下面的代码 - 我改变了n
和mean
。 foreach
正在工作但future_lapply
不工作。
# 1. calculate means in parallel using 'foreach'
res <- foreach(n = seq(10, 10000, 10), mean = seq(10, 10000, 10)) %dopar%
mean_rnorm(n, sd = 3)
# 2. calculate means in parallel using 'future.apply'
res <- future_lapply(n = seq(10, 10000, 10), mean = seq(10, 10000, 10),
FUN = mean_rnorm, sd = 3)