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  (  'Hello  n  '  );     //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  (  'Hello  n  '  );      printf  (  'Hello  n  '  );      printf  (  'Hello  n  '  );      printf  (  'Hello  n  '  );      printf  (  'Hello  n  '  );      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 Crea un qüestionari