我刚刚发现了doSMP package,它可以并行执行foreach循环。
有人可以在下面的简单示例中指出我做错了什么吗?实际上,以这种方式使用doSMP和foreach会大大增加计算时间......
谢谢!
#------The "naive" method------
mat <- matrix(NA, nrow=1000, ncol=10000)
ptime <- system.time({
for(i in 1:10000)
{
mat[, i] <- rnorm(1000)
}
})[3]
> ptime
elapsed
1.14
#------------------------------
#------Using doSMP and foreach------
library(doSMP)
w <- startWorkers(2)
registerDoSMP(w)
ptime <- system.time({
mat2 <- foreach(i=1:10000, .combine="cbind") %dopar% rnorm(1000)
})[3]
stopWorkers(w)
> ptime
elapsed
10.26
#-----------------------------------
N.B。我发布了一个非常相似的问题here我收到了另一个问题...但是,我仍然想知道为什么它不起作用并征求stats.stackexchange专家的意见
修改
你认为答案可能是“并行运行许多微小任务通常比执行顺序运行需要更多时间”???