如果两个循环之间同时存在真依赖和反依赖,它们会融合吗



带有一条语句的第一个循环
A[i,j]=B[i-1,j];

只有一条语句的第二个循环
B[i,j]=A[i,j];

我能把这两个独立的回路融合成一个回路吗。

这合法吗??

不,不能将它们组合成一个循环,如下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]原始值设置的。

在单循环解决方案中,基于b[n-1]的更新值来设置a[n]

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

最新更新