logo

Desenrotllament de bucle

El desenrotllament de bucles és una tècnica de transformació de bucles que ajuda a optimitzar el temps d'execució d'un programa. Bàsicament eliminem o reduïm les iteracions. El desenrotllament del bucle augmenta la velocitat del programa eliminant les instruccions de control de bucle i les instruccions de prova de bucle. Programa 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; }  
Programa 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 
Il·lustració: El programa 2 és més eficient que el programa 1 perquè al programa 1 hi ha una necessitat de comprovar el valor de i i augmentar el valor de i cada cop que fa el cicle. Així que petits bucles com aquest o bucles on hi ha un nombre fix d'iteracions es poden desenrotllar completament per reduir la sobrecàrrega del bucle.

Avantatges:

  • Augmenta l'eficiència del programa.
  • Redueix la sobrecàrrega del bucle.
  • Si les instruccions en bucle no depenen entre si, es poden executar en paral·lel.

Inconvenients:

  • Augment de la mida del codi del programa que pot ser indesitjable.
  • Possible augment de l'ús del registre en una sola iteració per emmagatzemar variables temporals que poden reduir el rendiment.
  • A part de codis molt petits i senzills, els bucles desenrotllats que contenen branques són fins i tot més lents que les recursions.
Referència: https://en.wikipedia.org/wiki/Loop_unrolling