为什么多巴不减少时间?
why dopar is not reducing time?
我用了这里的例子
https://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
system.time(foreach(i=1:10000) %dopar% sqrt(i))
system.time(foreach(i=1:10000) %do% sqrt(i))
stopCluster(cl)
这是我的输出
Loading required package: foreach
Loading required package: iterators
Loading required package: parallel
> system.time(foreach(i=1:10000) %dopar% sqrt(i))
user system elapsed
6.307 0.537 7.499
> system.time(foreach(i=1:10000) %do% sqrt(i))
user system elapsed
4.581 0.035 4.622
为什么多巴胺没有缩短时间?
我放慢了速度。您需要记住,进行并行计算会产生开销:
2个节点:
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
system.time(foreach(i=1:10000) %dopar% sqrt(i))
# user system elapsed
# 1.71 0.26 2.13
system.time(foreach(i=1:10000) %do% sqrt(i))
# user system elapsed
# 1.36 0.00 1.36
stopCluster(cl)
12个节点:
cl <- makeCluster(12)
registerDoParallel(cl)
system.time(foreach(i=1:10000) %dopar% sqrt(i))
# user system elapsed
# 1.92 0.14 2.09
system.time(foreach(i=1:10000) %do% sqrt(i))
# user system elapsed
# 1.28 0.00 1.28
stopCluster(cl)
对于这样一个简单的函数,您不能指望时间会减少与节点数对应的因子。
比较:
heavy_computation <- function(i) {
Sys.sleep(0.1)
1 + i
}
cl <- makeCluster(12)
registerDoParallel(cl)
system.time(foreach(i=1:100) %dopar% heavy_computation(i))
# user system elapsed
# 0.03 0.00 0.95
system.time(foreach(i=1:100) %do% heavy_computation(i))
# user system elapsed
# 0.00 0.00 10.28
stopCluster(cl)
为了获得速度提升,该函数应该足够昂贵,以便将任务发送到 child 的开销相对较小。
我用了这里的例子 https://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
system.time(foreach(i=1:10000) %dopar% sqrt(i))
system.time(foreach(i=1:10000) %do% sqrt(i))
stopCluster(cl)
这是我的输出
Loading required package: foreach
Loading required package: iterators
Loading required package: parallel
> system.time(foreach(i=1:10000) %dopar% sqrt(i))
user system elapsed
6.307 0.537 7.499
> system.time(foreach(i=1:10000) %do% sqrt(i))
user system elapsed
4.581 0.035 4.622
为什么多巴胺没有缩短时间?
我放慢了速度。您需要记住,进行并行计算会产生开销:
2个节点:
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
system.time(foreach(i=1:10000) %dopar% sqrt(i))
# user system elapsed
# 1.71 0.26 2.13
system.time(foreach(i=1:10000) %do% sqrt(i))
# user system elapsed
# 1.36 0.00 1.36
stopCluster(cl)
12个节点:
cl <- makeCluster(12)
registerDoParallel(cl)
system.time(foreach(i=1:10000) %dopar% sqrt(i))
# user system elapsed
# 1.92 0.14 2.09
system.time(foreach(i=1:10000) %do% sqrt(i))
# user system elapsed
# 1.28 0.00 1.28
stopCluster(cl)
对于这样一个简单的函数,您不能指望时间会减少与节点数对应的因子。
比较:
heavy_computation <- function(i) {
Sys.sleep(0.1)
1 + i
}
cl <- makeCluster(12)
registerDoParallel(cl)
system.time(foreach(i=1:100) %dopar% heavy_computation(i))
# user system elapsed
# 0.03 0.00 0.95
system.time(foreach(i=1:100) %do% heavy_computation(i))
# user system elapsed
# 0.00 0.00 10.28
stopCluster(cl)
为了获得速度提升,该函数应该足够昂贵,以便将任务发送到 child 的开销相对较小。