Articulo de referencia

Desactivación del bucle

La optimización de bucles es una técnica del compilador . Consiste en mover una instrucción condicional dentro de un bucle fuera de él, duplicando el cuerpo del bucle y colocand...

La optimización de bucles es una técnica del compilador . Consiste en mover una instrucción condicional dentro de un bucle fuera de él, duplicando el cuerpo del bucle y colocando una versión del mismo dentro de cada una de las cláusulas if y else de la condición. [ 1 ] Esto mejora la paralelización del bucle. Dado que los procesadores modernos pueden manejar vectores de manera eficiente, esta optimización aumenta la velocidad del programa.

Aquí hay un ejemplo sencillo. Supongamos que queremos sumar los dos arreglos x e y y también hacer algo dependiendo de la variable w . Tenemos el siguiente código C :

bool w ; int x [ 1000 ]; int y [ 1000 ]; para ( int i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; si ( w ) { y [ i ] = 0 ; } }

La condición dentro de este bucle dificulta la paralelización segura del mismo. Cuando desactivamos la condición del bucle, esto se convierte en:

bool w ; int x [ 1000 ]; int y [ 1000 ]; if ( w ) { for ( int i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; y [ i ] = 0 ; } } else { for ( int i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; } }

Si bien la eliminación del cambio de bucle puede duplicar la cantidad de código escrito, cada uno de estos nuevos bucles ahora puede optimizarse por separado.

La desactivación de bucles se introdujo en gcc en la versión 3.4. [ 2 ]

Referencias

  1. Cooper, Keith; Torczon, Linda (2004). Ingeniería de un compilador . Elsevier. ISBN 9781558606982.
  2. "Serie de lanzamientos de GCC 3.4: cambios, nuevas características y correcciones - Proyecto GNU" .