logo

Lus afrollen

Loop unrolling is een lustransformatietechniek die helpt de uitvoeringstijd van een programma te optimaliseren. In principe verwijderen of verminderen we iteraties. Het afrollen van de lus verhoogt de snelheid van het programma door luscontrole- en lustestinstructies te elimineren. Programma 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; }  
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 Hello 
Illustratie: 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.
Referentie: https://en.wikipedia.org/wiki/Loop_unrolling