如何基于其他元素并行修改向量的元素?

时间:2019-07-17 18:19:19

标签: r parallel-processing

我试图并行化我的代码的一部分,但是我不知道怎么处理,因为到处都是关于并行化的知识,对象被完全分割,然后仅使用块中的“信息”进行处理。我的问题不能拆分成独立的块,但是更新可以独立完成。

这是简化版

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]执行此操作,因此我阅读的指南中的“拆分”策略无法执行此操作。

如何并行处理这样的问题,我需要修改对象并每次“看”整个矢量?不是每个工作人员都返回一些输出,而是每个工作人员都必须修改内存中的“共享”对象?

0 个答案:

没有答案