// This program does not uses loop unrolling. #include int main(void) { for (int i=0; i<5; i++) printf('Hellon'); //print hello 5 times return 0; }
Program 2: CPP // This program uses loop unrolling. #include int main(void) { // unrolled the for loop in program 1 printf('Hellon'); printf('Hellon'); printf('Hellon'); printf('Hellon'); printf('Hellon'); return 0; }
Output: Hello Hello Hello Hello HelloIlustracja: Program 2 jest bardziej wydajny niż program 1, ponieważ w programie 1 należy sprawdzić wartość i i zwiększyć wartość i przy każdym okrążeniu pętli. Tak więc małe pętle, takie jak ta lub pętle, w których występuje stała liczba iteracji, można całkowicie rozwinąć, aby zmniejszyć obciążenie pętli.
Zalety:
- Zwiększa efektywność programu.
- Zmniejsza obciążenie pętli.
- Jeżeli instrukcje w pętli nie są od siebie zależne, mogą być wykonywane równolegle.
Wady:
- Zwiększony rozmiar kodu programu, co może być niepożądane.
- Możliwe zwiększone wykorzystanie rejestru w pojedynczej iteracji do przechowywania zmiennych tymczasowych, co może zmniejszyć wydajność.
- Oprócz bardzo małych i prostych kodów, rozwijane pętle zawierające gałęzie są nawet wolniejsze niż rekurencje.