2

割り当てを使用して中間出力 (p) を格納する関数を作成したいと考えています。この中間出力は、以下のステートメントで使用されます。doSNOW と foreach を使用してすべてを並列化したいのですが、その中間出力が forarch ループの反復間でやり取りされることを望んでいません。p[[i]]大量のコードを変更する必要があるため、中間出力をリスト (例: ) に保存したくありません。

  • 質問 1: foreach ループの別の反復で中間出力 (p) が使用される危険性はありますか?
  • 質問 2:「はい」の場合、その危険はいつ発生し、どのように防ぐことができますか?

これが私が意味することの例です:

install.packages('foreach')
library('foreach')

install.packages('doSNOW')
library('doSNOW')

NbrCores <- 4
cl<-makeCluster(NbrCores) 
registerDoSNOW(cl)

test <- function(value){
   foreach(i=1:500) %dopar% {
      #some statement based on parameter 'value'
      p <- value
      #some statement that uses p
      v <- p
      #other statements
  }
}

test(value=1)
4

1 に答える 1

0

並列計算で使用される各ノードは、独自の R プロセスで実行されると思います。したがって、あるノードの変数が別のノードの結果に影響を与えるリスクはありません。一般に、プロセス間で通信する可能性があります。ただし、 foreach は指定されたシーケンスを反復するだけで、ノードの 1 つでシーケンス内の各項目を個別に実行します。

于 2012-09-19T18:48:42.323 に答える