找出以下循环中的存在依赖关系(包括依赖类型),画出语句依赖图。
forI=0to100doA(I)=C(I)+2;
B(I)=A(I-1)-A(2*I-5);
endfor
答案
forI=0to100doS: A(I)=C(I)+2;
T: B(I)=A(I-1)-A(2*I-5);
endfor
依赖关系:(1) S?fT;{S(i),T(j)|i=j-1; 1=j=100,0=i=99}
S?fT;{S(i),T(j)|(i,j)=(1,3),(3,4),(5,5)}
T?aS;{T(i),S(j)|j=2*i–5; 6=i=52}
S?
S
?a
T
?f ?f
找出以下循环中的存在依赖关系(包括依赖类型、依赖向量),画出迭代依赖图(注意:要“窥一斑而知全豹”)。
forI=1to100doforJ=1to50do
A(I+2,J)=B(2*I,J)-5;
B(2*I,J-1)=A(I,J+2)+4;
endforendfor
答:
forI=1to100doforJ=1to50do
S: A(I+2,J)=B(2*I,J)-5;
T: B(2*I,J-1)=A(I,J+2)+4;
endforendfor
依赖关系:
S?fT,依赖向量为(1,-1),满足关系的迭代对:
{S(i1,j1),T(i2,j2)|i1=i2-2;j1=j2+2;1=i1=98;3=j1=50}
S?aT,依赖向量为(0,1),满足关系的迭代对:
{S(i1,j1),T(i2,j2)|i1=i2;j1=j2-1;1=i1=100;1=j1=49}
迭代依赖图:
向量化以下循环。如果不能,请说明原因。
forI=1toNdo
A(I)=B(I)+C(I+1);
C(I)=A(I)*D(I);
endfor
答:
forI=1toNdo
S:A(I)=B(I)+C(I+1);
T:C(I)=A(I)*D(I);
endfor
可以向量化。依赖关系为:S?fT,S?aT,不存在与语句执行次序相反的依赖关系。
A(1:N)=B(1:N)+C(2:N+1);
C(1:N)=A(1:N)*D(1:N);
forI=1toNdo
A(I)=A(I-1)+1
endfor
答:
forI=1toNdo
S:A(I)=A(I-1)+1
endfor
依赖关系为S?fS,不能进行向量化。
分析以下循环中的存在依赖关系(包括依赖类型),画出迭代依赖图。
forI=1to5do
B(I)=B(I)/A(I,I);
forJ=I+1to5do
B(J)=B(J)–A(I,J)*B(I);
endforendfor
答1:
forI=1to5do
S:B(I)=B(I)/A(I,I);
forJ=I+1to5do
T: B(J)=B(J)–A(I,J)*B(I);
endforendfor
展开上述循环,可以得到:
I=1:B(1)=B(1)/A(1,1);J=2,5
J=2:B(2)=B(2)–A(1,2)*B(1)
J=3:B(3)=B(3)–A(1,2)*B(1)
J=4:B(4)=B(4)–A(1,2)*B(1)
J=5:B(5)=B(5)–A(1,2)*B(1)
I=2:B(2)=B(2)/A(2,2);J=3,5
J=3:B(3)=B(3)–A(2,3)*B(2)
J=4:B(4)=B(4)–A(2,4)*B(2)
J=5:B(5)=B(5)–A(2,5)*B(2)
I=3:B(3)=B(3)/A(3,3);J=4,5
J=4:B(4)=B(4)–A(3,4)*B(3)
J=5:B(5)=B(5)–A(3,5)*B(3)
I=4:B(4)=B(4)/A(4,4);J=5,5
J=5:B(5)=B(5)–A(4,5)*B(4)
I=5:B(5)=B(5)/A(