Difference flow dependence & anti dependence
up vote
0
down vote
favorite
I'm trying to understand a paper concerning the detection of dependence for parallelizing tasks and I'm struggling a bit with an example. Considering A, B, C and D are vectors object:
do I=2,N
S1: A(I) = B(I) + C(I)
S2: D(I) = A(I + 1) + 1
S3: C(I) = D(I)
Focusing on dependence between S1 and S2. To me, it is a flow dependence S1 -> S2, A is in OUT(S1) and IN(S2) and A is indeed used in S2, verifying the flow dependence definition given by Woolfe & Banerjee. However, the explication states that it is an antidependence S2 -> S1. Is it because we're inside a loop ? And in that case, does it mean that in a loop, any flow dependence is reverse antidependence and inversely ?
optimization compilation
add a comment |
up vote
0
down vote
favorite
I'm trying to understand a paper concerning the detection of dependence for parallelizing tasks and I'm struggling a bit with an example. Considering A, B, C and D are vectors object:
do I=2,N
S1: A(I) = B(I) + C(I)
S2: D(I) = A(I + 1) + 1
S3: C(I) = D(I)
Focusing on dependence between S1 and S2. To me, it is a flow dependence S1 -> S2, A is in OUT(S1) and IN(S2) and A is indeed used in S2, verifying the flow dependence definition given by Woolfe & Banerjee. However, the explication states that it is an antidependence S2 -> S1. Is it because we're inside a loop ? And in that case, does it mean that in a loop, any flow dependence is reverse antidependence and inversely ?
optimization compilation
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I'm trying to understand a paper concerning the detection of dependence for parallelizing tasks and I'm struggling a bit with an example. Considering A, B, C and D are vectors object:
do I=2,N
S1: A(I) = B(I) + C(I)
S2: D(I) = A(I + 1) + 1
S3: C(I) = D(I)
Focusing on dependence between S1 and S2. To me, it is a flow dependence S1 -> S2, A is in OUT(S1) and IN(S2) and A is indeed used in S2, verifying the flow dependence definition given by Woolfe & Banerjee. However, the explication states that it is an antidependence S2 -> S1. Is it because we're inside a loop ? And in that case, does it mean that in a loop, any flow dependence is reverse antidependence and inversely ?
optimization compilation
I'm trying to understand a paper concerning the detection of dependence for parallelizing tasks and I'm struggling a bit with an example. Considering A, B, C and D are vectors object:
do I=2,N
S1: A(I) = B(I) + C(I)
S2: D(I) = A(I + 1) + 1
S3: C(I) = D(I)
Focusing on dependence between S1 and S2. To me, it is a flow dependence S1 -> S2, A is in OUT(S1) and IN(S2) and A is indeed used in S2, verifying the flow dependence definition given by Woolfe & Banerjee. However, the explication states that it is an antidependence S2 -> S1. Is it because we're inside a loop ? And in that case, does it mean that in a loop, any flow dependence is reverse antidependence and inversely ?
optimization compilation
optimization compilation
edited 2 days ago
asked Nov 21 at 18:51
Sam The Sid
216
216
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
Okay, finally it depends not of the object, but of the memory location being used. In this example, A(I) and A(I + 1) may not refer to the same memory (in case there is no aliasing). So there is no dependence between them in the current iteration. However, if we unroll the loop a bit, we get:
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)
Now, the anti dependence appears clearly.
Seems obvious now..
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
Okay, finally it depends not of the object, but of the memory location being used. In this example, A(I) and A(I + 1) may not refer to the same memory (in case there is no aliasing). So there is no dependence between them in the current iteration. However, if we unroll the loop a bit, we get:
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)
Now, the anti dependence appears clearly.
Seems obvious now..
add a comment |
up vote
0
down vote
accepted
Okay, finally it depends not of the object, but of the memory location being used. In this example, A(I) and A(I + 1) may not refer to the same memory (in case there is no aliasing). So there is no dependence between them in the current iteration. However, if we unroll the loop a bit, we get:
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)
Now, the anti dependence appears clearly.
Seems obvious now..
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
Okay, finally it depends not of the object, but of the memory location being used. In this example, A(I) and A(I + 1) may not refer to the same memory (in case there is no aliasing). So there is no dependence between them in the current iteration. However, if we unroll the loop a bit, we get:
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)
Now, the anti dependence appears clearly.
Seems obvious now..
Okay, finally it depends not of the object, but of the memory location being used. In this example, A(I) and A(I + 1) may not refer to the same memory (in case there is no aliasing). So there is no dependence between them in the current iteration. However, if we unroll the loop a bit, we get:
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)
Now, the anti dependence appears clearly.
Seems obvious now..
answered 2 days ago
Sam The Sid
216
216
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53418773%2fdifference-flow-dependence-anti-dependence%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown