Fusión de ciclos

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 10 de enero de 2017; la verificación requiere 1 edición .

La fusión de ciclos (fusión de bucles, fusión de bucles ing .  , atasco de bucles ing. ) es una optimización del compilador que fusiona varios ciclos adyacentes en el árbol de ciclos en uno solo. La transformación es posible si los bucles tienen el mismo número de iteraciones y no dependen unos de otros según . La combinación de ciclos puede mejorar la ubicación de los datos [1] [2] , lo que mejora la eficiencia de la memoria caché .  

Combinar bucles no siempre reduce el tiempo de ejecución del programa. En algunas arquitecturas , puede ser más beneficioso ejecutar dos bucles en lugar de uno combinado, ya que, por ejemplo, la localidad de los datos en este caso puede ser mayor. En tales casos, se puede aplicar la optimización inversa, la descomposición de bucles , que divide un bucle en varios.

Ejemplos

int i , a [ 100 ], b [ 100 ]; para ( yo = 0 ; yo < 100 ; yo ++ ) un [ yo ] = 1 ; para ( yo = 0 ; yo < 100 ; yo ++ ) segundo [ yo ] = 2 ;

equivalente a:

int i , a [ 100 ], b [ 100 ]; para ( yo = 0 ; yo < 100 ; yo ++ ) { un [ yo ] = 1 ; segundo [ yo ] = 2 ; }

Notas

  1. Manjikian, N., Abdelrahman, T.S. Fusión de bucles para paralelismo y localidad
  2. Steinberg B.Ya., Steinberg O.B., Vasilenko A.A. Ciclos de fusión para la localización de datos

Enlaces