Banerjee test
The topic of this article may not meet Wikipedia's general notability guideline. (October 2011) |
This article includes a list of references, related reading, or external links, but its sources remain unclear because it lacks inline citations. (January 2021) |
In compiler theory, the Banerjee test is a dependence test. The Banerjee test assumes that all loop indices are independent, however in reality, this is often not true. The Banerjee test is a conservative test. That is, it will not break a dependence that does not exist.
This means that the only thing the test can guarantee is the absence of a dependence.
Antidependence is broken | True dependence is broken | |
---|---|---|
True | There are no antidependencies |
There are no true dependencies |
False | There may or may not be antidependencies |
There may or may not be true dependencies |
General form
[edit]For a loop of the form:
for(i=0; i<n; i++) {
c[f(i)] = a[i] + b[i]; /* statement s1 */
d[i] = c[g(i)] + e[i]; /* statement s2 */
}
A true dependence exists between statement s1 and statement s2 if and only if :
An anti dependence exists between statement s1 and statement s2 if and only if :
For a loop of the form:
for(i=0; i<n; i++) {
c[i] = a[g(i)] + b[i]; /* statement s1 */
a[f(i)] = d[i] + e[i]; /* statement s2 */
}
A true dependence exists between statement s1 and statement s2 if and only if :
Example
[edit]An example of Banerjee's test follows below.
The loop to be tested for dependence is:
for(i=0; i<10; i++) {
c[i+9] = a[i] + b[i]; /*statement s1*/
d[i] = c[i] + e[i]; /*statement s2*/
}
Let
So therefore,
and
Testing for antidependence
[edit]Then
which gives
Now, the bounds on are
Clearly, -9 is not inside the bounds, so the antidependence is broken.
Testing for true dependence
[edit]
Which gives:
Now, the bounds on are
Clearly, -9 is inside the bounds, so the true dependence is not broken.
Conclusion
[edit]Because the antidependence was broken, we can assert that anti dependence does not exist between the statements.
Because the true dependence was not broken, we do not know if a true dependence exists between the statements.
Therefore, the loop is parallelisable, but the statements must be executed in order of their (potential) true dependence.
See also
[edit]References
[edit]- Randy Allen and Ken Kennedy. Optimizing Compilers for Modern Architectures: A Dependence-based Approach
- Lastovetsky, Alex. Parallel Computing on Heterogenous Networks