如果它们之间存在真正的依赖性和反依赖性,那么两个循环是否融合

时间:2015-02-25 03:17:02

标签: loops dependencies compiler-optimization

带有一个陈述的第一个循环
A[i,j]=B[i-1,j];

只有一个陈述的第二个循环
B[i,j]=A[i,j];

我可以将这两个独立的循环融合到一个循环中。

合法吗?

1 个答案:

答案 0 :(得分:0)

不,你不能将它们组合成一个循环,如下面的Python测试程序所示:

a = [1,2,3,4]
b = [5,6,7,8]

for i in range(1,len(a)):
    a[i] = b[i-1]
for i in range(1,len(a)):
    b[i] = a[i]
print a, b

a = [1,2,3,4]
b = [5,6,7,8]

for i in range(1,len(a)):
    a[i] = b[i-1]
    b[i] = a[i]
print a, b

它的输出为您提供了两个不同的结果:

[1, 5, 6, 7] [5, 5, 6, 7]
[1, 5, 5, 5] [5, 5, 5, 5]

他们不等同的原因是,在双循环解决方案中a[n]是根据b[n-1]原始值设置的。

在单循环解决方案中,a[n]是根据b[n-1]的更新值设置的。

并且b[n-1]将在循环的上一次迭代中被更改。