差异流依赖性和反依赖性

时间:2018-11-21 18:51:01

标签: optimization compilation

我试图理解一篇关于检测并行化任务依赖关系的论文,并且我在举一个例子。考虑到A,B,C和D是向量对象:

    do I=2,N
S1:    A(I) = B(I) + C(I)
S2:    D(I) = A(I + 1) + 1
S3:    C(I) = D(I)

关注于S1和S2之间的依赖性。对我来说,这是流量依赖性S1-> S2,A在OUT(S1)和IN(S2)中,而A确实在S2中使用,这验证了Woolfe&Banerjee给出的流量依赖性定义。但是,说明指出这是一个反依赖性S2-> S1。是因为我们陷入了循环吗?在那种情况下,这是否意味着在循环中,任何流量相关性都是反向反相关性和相反的关系?

1 个答案:

答案 0 :(得分:0)

好吧,最后,它不取决于对象,而是取决于所使用的内存位置。在此示例中,A(I)和A(I + 1)可能不引用相同的内存(如果没有别名)。因此,在当前迭代中它们之间没有依赖关系。但是,如果我们稍微展开循环,则会得到:

do I=2,N
  S1:    A(I) = B(I) + C(I)
  S2:    D(I) = -> A(I + 1) + 1
  S3:    C(I) = D(I)
  S1:    -> A(I + 1) = B(I + 1) + C(I + 1)
  S2:    D(I + 1) = A(I + 2) + 1
  S3:    C(I + 1) = D(I + 1)

现在,反依赖性明显出现了。

现在似乎很明显。