Loop Unswitching
   HOME

TheInfoList



OR:

Loop unswitching is a
compiler optimization An optimizing compiler is a compiler designed to generate code that is optimized in aspects such as minimizing program execution time, memory usage, storage size, and power consumption. Optimization is generally implemented as a sequence of op ...
. It moves a conditional inside a loop outside of it by duplicating the loop's body, and placing a version of it inside each of the if and else clauses of the conditional. This can improve the parallelization of the loop. Since modern processors can operate quickly on vectors, this improvement increases the speed of the program. 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: int i, w, x
000 Triple zero, Zero Zero Zero, 0-0-0 or variants may refer to: * 000 (emergency telephone number), the Australian emergency telephone number * 000, the size of several small List of screw drives, screw drives * 0-0-0, a Droid (Star Wars)#0-0-0, dro ...
y
000 Triple zero, Zero Zero Zero, 0-0-0 or variants may refer to: * 000 (emergency telephone number), the Australian emergency telephone number * 000, the size of several small List of screw drives, screw drives * 0-0-0, a Droid (Star Wars)#0-0-0, dro ...
for (i = 0; i < 1000; i++)
The conditional inside this loop makes it difficult to safely parallelize this loop. When we unswitch the loop, this becomes: int i, w, x
000 Triple zero, Zero Zero Zero, 0-0-0 or variants may refer to: * 000 (emergency telephone number), the Australian emergency telephone number * 000, the size of several small List of screw drives, screw drives * 0-0-0, a Droid (Star Wars)#0-0-0, dro ...
y
000 Triple zero, Zero Zero Zero, 0-0-0 or variants may refer to: * 000 (emergency telephone number), the Australian emergency telephone number * 000, the size of several small List of screw drives, screw drives * 0-0-0, a Droid (Star Wars)#0-0-0, dro ...
if (w) else
While the loop unswitching may double the amount of code written, each of these new loops may now be separately optimized. Loop unswitching was introduced in gcc in version 3.4.


References

{{Compiler optimizations Compiler optimizations