Top Qs
Timeline
Chat
Perspective
Loop unswitching
Compiler optimization for conditionals in loops From Wikipedia, the free encyclopedia
Remove ads
Loop unswitching is a compiler optimization. It moves a conditional statement inside a loop outside by duplicating the loop's body and placing a version of it inside each of the if and else clauses of the conditional.[1] This enhances loop's parallelization. As modern processors can efficiently handle vectors, this optimization increases program speed.
Here is a simple example. Suppose we want to add the two arrays x and y and also do something depending on the variable w. We have the following C code:
bool w;
int x[1000];
int y[1000];
for (int i = 0; i < 1000; i++) {
x[i] += y[i];
if (w) {
y[i] = 0;
}
}
The conditional inside this loop makes it difficult to safely parallelize this loop. When we unswitch the loop, this becomes:
bool w;
int x[1000];
int y[1000];
if (w) {
for (int i = 0; i < 1000; i++) {
x[i] += y[i];
y[i] = 0;
}
} else {
for (int i = 0; i < 1000; i++) {
x[i] += y[i];
}
}
While the loop unswitching may double the amount of code written, each of these new loops may now be separately optimized.
Remove ads
References
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads