1

R で doParallel/Foreach バックエンドを使用してプロセスを並行して実行しています。20 コアのセットをクラスターとして登録し、プロセスを約 100 回実行しています。並列プロセスの各反復に行列を渡し、サブプロセスで行列を独自の行のランダム サンプルに置き換えます。私が疑問に思っているのは、この変更が同じ子プロセスによって処理される後続の反復で持続することを期待すべきですか? たとえば、子プロセス 1 が最初の反復を終了するとき、元の行列またはランダム サンプルで 2 番目の反復を開始しますか?

最小限の例:

   library(doParallel)

   X <- matrix(1:400, ncol=4)

   cl<-makeCluster(2)
   clusterExport(X)
   registerDoParallel(cl)


   results<-foreach(i=1:100) %dopar% {
       set.seed(12345)
       X <- X[sample.int(nrow(X),replace=TRUE),]
       X
   }

編集:

明確にするために、実際にオブジェクトが同じワーカー プロセスによる反復間で持続する場合、これは私の望ましい動作ではありません。むしろ、各反復で、最新のランダム サンプルのランダム サンプルではなく、元のマトリックスの新しいランダム サンプルを取得したいと考えています (私の最小限の例では、元のマトリックスの同じランダム サンプルが毎回作成されることを認識しています)。 、シード セットのため、実際のアプリケーションではこれを扱います)。

4

1 に答える 1