Rozwijanie pętli
Rozwijanie pętli to technika transformacji pętli, która pomaga zoptymalizować czas wykonywania programu. Zasadniczo usuwamy lub ograniczamy iteracje. Rozwijanie pętli zwiększa prędkość programu poprzez eliminację instrukcji sterujących pętlą i instrukcji testujących pętlę. Program 1: CPP
// This program does not uses loop unrolling. #include int main ( void ) { for ( int i = 0 ; i < 5 ; i ++ ) printf ( 'Hello n ' ); //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 ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); 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.