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 HelloIllustrasjon: 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.