2

foreach-package を使用して並行して処理しようとしているコードがあります。コードは機能していますが、4 コアのコンピューターで実行すると約 26 分かかり、32 コアのコンピューターに切り替えても、完了するまでに 13 分かかります。8 倍のコアを使用しているので、何か間違っているのではないかと思っていましたが、時間は半分しか短縮されませんでした。私のコードは次のようになります。

no_cores <- detectCores()
cl <- makeCluster(no_cores)
registerDoParallel(cl)
Xenopus_Data <- foreach(b=1:length(newly_populated_vec),.packages = c("raster", "gdistance", "rgdal","sp")) %dopar% { Xenopus_Walk(altdata=altdata,water=water,habitat_suitability=habitat_suitability,max_range_without_water=max_range_without_water,max_range=max_range,slope=slope,Start_Pt=newly_populated_vec[b]) }
stopCluster(cl)  

4コアのコンピューターの場合、次の時間が得られます。

Time_of_Start
[1] "2016-07-12 13:07:23 CEST"
Time_of_end
[1] "2016-07-12 13:33:10 CEST"

And for the one with 32 cores:
Time_of_Start
[1] "2016-07-12 14:35:48 CEST"
Time_of_end
[1] "2016-07-12 14:48:08 CEST"

これは正常ですか?もしそうなら、おそらく別のパッケージを使用して、さらに高速化する方法を知っている人はいますか? どんなタイプの助けも大歓迎です!

編集:これらは、提案された修正を適用した後の時間です。32 コアの場合:

User      System     elapsed 
5.99       40.78      243.97

4 コアの場合:

user  system  elapsed 
  1.91    0.94  991.71 

以前、いくつかのループを介して計算を複数回行ったため、計算時間が大幅に短縮されましたが、それでも 2 台のコンピューターの差が大きくなっていることがわかります。

4

1 に答える 1