Derularea buclei
Loop unrolling este o tehnică de transformare a buclei care ajută la optimizarea timpului de execuție a unui program. În principiu, eliminăm sau reducem iterațiile. Desfăşurarea buclei măreşte viteza programului prin eliminarea instrucţiunilor de control al buclei şi instrucţiunilor de testare a buclei. Programul 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 ; }
Programul 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 HelloIlustrare: Programul 2 este mai eficient decât programul 1 deoarece în programul 1 este nevoie să se verifice valoarea lui i și să se incrementeze valoarea lui i de fiecare dată când se întocmește bucla. Deci, bucle mici ca aceasta sau bucle în care există un număr fix de iterații pot fi derulate complet pentru a reduce supraîncărcarea buclei.
Avantaje:
- Crește eficiența programului.
- Reduce supraîncărcarea buclei.
- Dacă instrucțiunile în buclă nu depind unele de altele, ele pot fi executate în paralel.
Dezavantaje:
- Mărimea codului de program mărită, care poate fi nedorită.
- Posibilă utilizare crescută a registrului într-o singură iterație pentru a stoca variabile temporare care pot reduce performanța.
- În afară de codurile foarte mici și simple, buclele desfășurate care conțin ramuri sunt chiar mai lente decât recursiunile.