R 如何使用 foreach 获得总 CPU 时间?
R How to get total CPU time with foreach?
我正在尝试并行获取代码 运行 的总 CPU 小时(使用包 doParallel
中的 foreach
),但我不确定如何去做这件事。我已经使用了 proc.time()
但它只是 returns 在 'real' 时间上的差异。根据我对 system.time()
的阅读,它也应该与 proc.time()
做同样的事情。如何并行获得总 CPU 小时的 R 代码 运行?
一个小技巧是return将测得的运行时间和你的计算结果一起list
。下面的示例,我们使用 system.time()
来获得与 proc.time()
.
相同的运行时间
注意:这是我的博客 post R with Parallel Computing from User Perspectives 的修改示例。
# 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
最后,在不考虑 R master 等待时间的情况下,2 个 R 会话的运行时间为 0.94 秒。
我正在尝试并行获取代码 运行 的总 CPU 小时(使用包 doParallel
中的 foreach
),但我不确定如何去做这件事。我已经使用了 proc.time()
但它只是 returns 在 'real' 时间上的差异。根据我对 system.time()
的阅读,它也应该与 proc.time()
做同样的事情。如何并行获得总 CPU 小时的 R 代码 运行?
一个小技巧是return将测得的运行时间和你的计算结果一起list
。下面的示例,我们使用 system.time()
来获得与 proc.time()
.
注意:这是我的博客 post R with Parallel Computing from User Perspectives 的修改示例。
# 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
最后,在不考虑 R master 等待时间的情况下,2 个 R 会话的运行时间为 0.94 秒。