【发布时间】:2011-03-16 12:42:38
【问题描述】:
我正在尝试使用为 foreach 包提供并行后端的 doSMP package。
你能指出我做错了什么吗?确实,以这种方式使用 foreach 会显着增加计算时间...
#------register doSMP to be used with foreach------
library(doSMP)
w <- startWorkers(4)
registerDoSMP(w)
#--------------------------------------------------
#------A simple function------
sim <- function(a, b)
{
return(10 * a + b)
}
avec <- 1:200
bvec <- 1:400
#-----------------------------
#------The naive method------
ptime <- system.time({
mat <- matrix(NA, nrow=length(avec), ncol=length(bvec))
for(i in 1:length(avec))
{
for(j in 1:length(bvec))
{
mat[i, j] <- sim(avec[i], bvec[j])
}
}
})[3]
ptime
elapsed
0.36
#----------------------------
#------Using foreach------
ptime <- system.time({
mat2 <- foreach(b=bvec, .combine="cbind") %:%
foreach(a=avec, .combine="c") %dopar%
{
sim(a, b)
}
})[3]
ptime
elapsed
86.98
#-------------------------
编辑
That question 和这个非常相似,是从 stats.stackexchange 迁移过来的。
【问题讨论】:
-
不鼓励交叉发布。
-
虽然这是一个有趣的话题,但它不是一个统计分析问题。让我们将其迁移到 SO,它有大量纯粹与 R 相关的问题,以及回答这些问题的优秀社区。span>
-
@Dirk Eddelbuettel, @Whuber: 很抱歉交叉发帖...我认为按照规定应该没问题...无论如何,抱歉