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 只迭代它给定的序列,在其中一个节点中独立地执行序列中的每个项目。

于 2012-09-19T18:48:42.323 回答