我想在R中计算时使用多个CPU。到目前为止,我已尝试foreach
方法。我知道它可能返回我需要的值,但是,我想知道我是否能以某种方式直接修改共享变量。
这是我想要实现的一个例子 - result
变量应该有一个增加的对角线。请注意,这是一个说明性示例 - 实际上我需要计算大约十几个可变维度的矩阵,并且解析foreach
的输出将非常困难。计算大约需要一个小时,难以调试。
library("doParallel")
library("foreach")
cluster <- makeCluster(4)
registerDoParallel(cluster)
result = matrix(nrow=5, ncol=5)
foreach (i = 1:5) %dopar% {
result[[i, i]] <<- i
}
您能否建议我应该使用哪些运算符/函数/包来实现这种行为,即从某些并行代码块修改共享变量?我们假设没有碰撞和/或竞争条件。
答案 0 :(得分:0)
我认为%dopar%
首先将共享变量的副本发送到每个群集节点。除非你再次运行%dopar%
,否则基本上无法更改它们。
如果您需要计算多个矩阵,您可以在每个群集节点上计算一个完整的矩阵,因此您不必在群集节点之间共享变量。