Loop Unrolling
Loop unrolling is the compile-time expansion of a loop into repetitions of the code, with the loop index replaced by its value in each instance.
for (i = 0; i < 3; i++) disp[i] = c2[i] - c1[i];is expanded into:
disp[0] = c2[0] - c1[0]; disp[1] = c2[1] - c1[1]; disp[2] = c2[2] - c1[2];
Loop: | Unrolled: | |
Instructions: | 20 | 12 |
Executed: | 57 | 12 |
The second form runs faster, but it may generate more code since the code for the loop contents is multiplied by the loop count. This is a useful optimization when the size of the loop is known to be a small constant at compile time.
Modulo unrolling unrolls a loop modulo some chosen constant. This can significantly reduce the loop overhead without expanding code size too much.