logo

Løkkeafrulning

Loop unrolling er en loop-transformationsteknik, der hjælper med at optimere udførelsestiden for et program. Vi fjerner eller reducerer dybest set iterationer. Sløjfeafrulning øger programmets hastighed ved at eliminere sløjfekontrolinstruktioner og sløjfetestinstruktioner. 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 
Illustration: Program 2 er mere effektivt end program 1, fordi der i program 1 er behov for at kontrollere værdien af ​​i og øge værdien af ​​i hver gang rundt i sløjfen. Så små løkker som denne eller løkker, hvor der er et fast antal iterationer involveret, kan rulles helt ud for at reducere løkkens overhead.

Fordele:

  • Øger programmets effektivitet.
  • Reducerer loop overhead.
  • Hvis sætninger i loop ikke er afhængige af hinanden, kan de udføres parallelt.

Ulemper:

  • Øget programkodestørrelse, hvilket kan være uønsket.
  • Mulig øget brug af register i en enkelt iteration for at gemme midlertidige variabler, som kan reducere ydeevnen.
  • Bortset fra meget små og enkle koder er udrullede løkker, der indeholder grene, endnu langsommere end rekursioner.
Reference: https://en.wikipedia.org/wiki/Loop_unrolling