我试图让代码并行运行的总 CPU 小时数(使用foreach
包中的doParallel
),但我不知道如何去做。我已经使用过proc.time()
,但它只是返回“实时”时间的差异。根据我所读到的system.time()
,它也应该与proc.time()
. 如何获得并行运行的 R 代码的总 CPU 小时数?
问问题
544 次
1 回答
1
一个小技巧是将测量的运行时间与计算结果一起返回list
。下面是一个例子,我们system.time()
用来获取运行时与proc.time()
.
注意:这是我的博客文章R 与用户视角的并行计算的修改示例。
# fake code to show how to get runtime of each process in foreach
library(foreach)
library(doParallel)
# Real physical cores in my computer
cores <- detectCores(logical = FALSE)
cl <- makeCluster(cores)
registerDoParallel(cl, cores=cores)
system.time(
res.gather <- foreach(i=1:cores, .combine='list') %dopar%
{
s.time <- system.time( {
set.seed(i)
res <- matrix(runif(10^6), nrow=1000, ncol=1000)
res <- exp(sqrt(res)*sqrt(res^3))
})
list(result=res, runtime=s.time)
}
)
stopImplicitCluster()
stopCluster(cl)
因此,运行时被保存,res.gather
您可以轻松获取它。所以,把它们加起来,我们就可以知道你的并行程序总共需要多少时间。
> res.gather[[1]]$runtime
user system elapsed
0.42 0.04 0.48
> res.gather[[2]]$runtime
user system elapsed
0.42 0.03 0.47
> res.gather[[2]]$runtime[3] + res.gather[[2]]$runtime[3]
elapsed
0.94
最后,2 个 R 会话的运行时间为 0.94 秒,不考虑 R 主控的等待时间。
于 2016-09-28T11:51:00.967 回答