stringtranslate.com

División de bucle

La división de bucles es una técnica de optimización del compilador que intenta simplificar un bucle o eliminar dependencias dividiéndolo en varios bucles que tienen los mismos cuerpos pero que iteran sobre diferentes partes contiguas del rango de índices.

Pelado de bucles

El pelado de bucles es un caso especial de división de bucles que divide las primeras (o últimas) iteraciones problemáticas del bucle y las realiza fuera del cuerpo del bucle.

Supongamos que un bucle se escribiera así:

 int p = 10 ; para ( int i = 0 ; i < 10 ; ++ i ) { y [ i ] = x [ i ] + x [ p ]; p = i ; }                  

Tenga en cuenta que p = 10solo para la primera iteración y para todas las demás iteraciones, p = i - 1. Un compilador puede aprovechar esto desenrollando (o "pelando") la primera iteración del bucle.

Después de pelar la primera iteración, el código se vería así:

 y [ 0 ] = x [ 0 ] + x [ 10 ]; para ( int i = 1 ; i < 10 ; ++ i ) { y [ i ] = x [ i ] + x [ i -1 ]; }                

Esta forma equivalente elimina la necesidad de la variable pdentro del cuerpo del bucle.

La separación de bucles se introdujo en GCC en la versión 3.4. La división de bucles más generalizada se agregó en GCC 7. [1]

Breve historia del término

Al parecer, el término "pelado" fue utilizado por primera vez por Cannings, Thompson y Skolnick [2] en su artículo de 1976 sobre modelos computacionales para la herencia (humana). Allí, el término se utilizó para denotar un método para colapsar la información fenotípica sobre los progenitores. A partir de allí, el término se utilizó nuevamente en sus artículos, incluido su artículo seminal sobre las funciones de probabilidad en pedigríes complejos. [3]

En tecnología de compiladores, el término apareció por primera vez a finales de los años 1980 en artículos sobre VLIW y compilación superescalar, incluidos [4] y [5] .

Referencias

  1. ^ Serie de lanzamientos de GCC 7: cambios, nuevas características y correcciones - Proyecto GNU
  2. ^ Cannings, C.; Thompson, EA; Skolnick, HH (1976). "La derivación recursiva de probabilidades en pedigríes complejos". Avances en probabilidad aplicada . 8 (4): 622–625. doi :10.2307/1425918. JSTOR  1425918.
  3. ^ Cannings, C.; Thompson, EA; Skolnick, HH (1978). "Funciones de probabilidad en pedigríes complejos". Avances en probabilidad aplicada . 10 (1): 26–61. doi :10.2307/1426718. JSTOR  1426718.
  4. ^ Callahan, D.; Kennedy, Ken (1988). "Compilación de programas para multiprocesadores de memoria distribuida". The Journal of Supercomputing . 2 (2): 151–169. doi :10.1007/BF00128175. S2CID  10214341.
  5. ^ Mahlke, SA; Lin, DC; Chen, WY; Hank, RE; Bringman, RA (1992). Soporte efectivo del compilador para ejecución predicada utilizando el hiperbloque . 25.° Simposio Internacional Anual sobre Microarquitectura. págs. 45–54.

Lectura adicional