// 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; }
Programma 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 HelloIllustratie: Programma 2 is efficiƫnter dan programma 1, omdat het in programma 1 nodig is om de waarde van i te controleren en de waarde van i elke keer rond de lus te verhogen. Dus kleine lussen zoals deze of lussen met een vast aantal iteraties kunnen volledig worden uitgerold om de overhead van de lus te verminderen.
Voordelen:
- Verhoogt de programma-efficiƫntie.
- Vermindert lusoverhead.
- Als instructies in de lus niet van elkaar afhankelijk zijn, kunnen ze parallel worden uitgevoerd.
Nadelen:
- Grotere programmacodegrootte, wat ongewenst kan zijn.
- Mogelijk verhoogd gebruik van register in een enkele iteratie om tijdelijke variabelen op te slaan, wat de prestaties kan verminderen.
- Afgezien van zeer kleine en eenvoudige codes zijn uitgerolde lussen die vertakkingen bevatten zelfs langzamer dan recursies.