1

foreach(パッケージから使用して) 並行して実行されるコードの合計 CPU 時間を取得しようとしていますdoParallelが、これを行う方法がわかりません。私は使用proc.time()しましたが、「リアルタイム」で差を返すだけです。私が読んだことからsystem.time()、 と同じことをする必要がありますproc.time()。並行して実行される R コードの合計 CPU 時間を取得するにはどうすればよいですか?

4

1 に答える 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 に答える