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 HelloIl·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.