Rozvíjanie slučky

Rozvíjanie slučky je technika transformácie slučky, ktorá pomáha optimalizovať čas vykonávania programu. V podstate odstraňujeme alebo redukujeme iterácie. Rozvíjanie slučky zvyšuje rýchlosť programu odstránením inštrukcií riadenia slučky a inštrukcií na testovanie slučky. 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 Hello  
Ilustrácia: Program 2 je efektívnejší ako program 1, pretože v programe 1 je potrebné kontrolovať hodnotu i a zvyšovať hodnotu i zakaždým, keď cyklus. Takže malé slučky, ako je táto, alebo slučky, v ktorých je zahrnutý pevný počet iterácií, možno úplne rozvinúť, aby sa znížila réžia slučky.

Výhody:

  • Zvyšuje efektivitu programu.
  • Znižuje réžiu slučky.
  • Ak príkazy v slučke nie sú na sebe závislé, môžu sa vykonávať paralelne.

Nevýhody:

  • Zväčšená veľkosť programového kódu, čo môže byť nežiaduce.
  • Možné zvýšené využitie registra v jednej iterácii na ukladanie dočasných premenných, čo môže znížiť výkon.
  • Okrem veľmi malých a jednoduchých kódov sú rozvinuté slučky, ktoré obsahujú vetvy, ešte pomalšie ako rekurzie.
Referencia: https://en.wikipedia.org/wiki/Loop_unrolling Vytvoriť kvíz