logo

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('Hellon'); //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('Hellon');  printf('Hellon');  printf('Hellon');  printf('Hellon');  printf('Hellon');  return 0; }  
Output:
Hello Hello Hello Hello Hello 
Illustrasjon: Program 2 er mer effektivt enn program 1 fordi i program 1 er det behov for å sjekke 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