logo

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('Hellon'); //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('Hellon');  printf('Hellon');  printf('Hellon');  printf('Hellon');  printf('Hellon');  return 0; }  
Output:
Hello Hello Hello Hello Hello 
Ilustrare: 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.
Referinţă: https://en.wikipedia.org/wiki/Loop_unrolling