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 ( '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 HelloIllustration: 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.