foreach
(パッケージから使用して) 並行して実行されるコードの合計 CPU 時間を取得しようとしていますdoParallel
が、これを行う方法がわかりません。私は使用proc.time()
しましたが、「リアルタイム」で差を返すだけです。私が読んだことからsystem.time()
、 と同じことをする必要がありますproc.time()
。並行して実行される R コードの合計 CPU 時間を取得するにはどうすればよいですか?
質問する
544 次
1 に答える
1
ちょっとしたコツは、測定された実行時間と計算結果を で一緒に返すことlist
です。以下の例では、system.time()
と同じようにランタイムを取得するために使用しますproc.time()
。
注: これは、ユーザーの視点から見た R with Parallel Computingのブログ投稿から変更された例です。
# 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 セッションの実行時間は、R マスターの待機時間を考慮しない場合、0.94 秒です。
于 2016-09-28T11:51:00.967 に答える