Slingavrullning

Loop unrolling är en loop-transformationsteknik som hjälper till att optimera exekveringstiden för ett program. Vi tar i princip bort eller minskar iterationer. Slingavrullning ökar programmets hastighet genom att eliminera loopkontrollinstruktioner och looptestinstruktioner. 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  
Illustration: Program 2 är mer effektivt än program 1 eftersom det i program 1 finns ett behov av att kontrollera värdet på i och öka värdet på i varje gång runt slingan. Så små slingor som denna eller slingor där det finns ett fast antal iterationer är inblandade kan rullas ut helt för att minska slingoverheaden.

Fördelar:

  • Ökar programmets effektivitet.
  • Minskar loop overhead.
  • Om satser i loop inte är beroende av varandra kan de köras parallellt.

Nackdelar:

  • Ökad programkodstorlek vilket kan vara oönskat.
  • Möjlig ökad användning av register i en enda iteration för att lagra temporära variabler som kan minska prestandan.
  • Bortsett från mycket små och enkla koder är utrullade loopar som innehåller grenar till och med långsammare än rekursioner.
Hänvisning: https://en.wikipedia.org/wiki/Loop_unrolling Skapa frågesport