我试图并行化我的代码的一部分,但是我不知道怎么处理,因为到处都是关于并行化的知识,对象被完全分割,然后仅使用块中的“信息”进行处理。我的问题不能拆分成独立的块,但是更新可以独立完成。
这是简化版
a <- runif(10000)
indexes <- c(seq(1,9999,2), seq(2,10000,2))
for(i in indexes){
.prev <- ifelse(i>1, a[i-1], 0)
.next <- ifelse(i<10000, a[i+1], 1)
a[i] <- runif(1, min(.prev,.next), max(.prev, .next))
}
尽管for循环上的每次迭代都取决于a
中的当前值,但indexes
中定义的顺序使问题在偶数和奇数索引中并行化,例如,如果indexes = seq(1,9999,2)
依赖关系不是问题,因为每次迭代中使用的值都不会被修改。另一方面,将无法使用子集a[indexes]
执行此操作,因此我阅读的指南中的“拆分”策略无法执行此操作。
如何并行处理这样的问题,我需要修改对象并每次“看”整个矢量?不是每个工作人员都返回一些输出,而是每个工作人员都必须修改内存中的“共享”对象?