Løkkeutrulling

Loop unrolling er en loop-transformasjonsteknikk som bidrar til å optimalisere utførelsestiden til et program. Vi fjerner eller reduserer i utgangspunktet iterasjoner. Sløyfeutrulling øker programmets hastighet ved å eliminere sløyfekontrollinstruksjoner og sløyfetestinstruksjoner. 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  
Illustrasjon: Program 2 er mer effektivt enn program 1 fordi det i program 1 er behov for å kontrollere verdien av i og øke verdien av i hver gang rundt sløyfen. Så små løkker som dette eller løkker hvor det er et fast antall iterasjoner kan rulles helt ut for å redusere løkken overhead.

Fordeler:

  • Øker programmets effektivitet.
  • Reduserer sløyfe overhead.
  • Hvis setninger i loop ikke er avhengige av hverandre, kan de kjøres parallelt.

Ulemper:

  • Økt programkodestørrelse som kan være uønsket.
  • Mulig økt bruk av register i en enkelt iterasjon for å lagre midlertidige variabler som kan redusere ytelsen.
  • Bortsett fra svært små og enkle koder er utrullede løkker som inneholder grener enda tregere enn rekursjoner.
Referanse: https://en.wikipedia.org/wiki/Loop_unrolling Lag quiz