Optimización de bucles en el diseño del compilador – Part 1

La optimización de bucles es el proceso de aumentar la velocidad de ejecución y reducir los gastos generales asociados con los bucles. Desempeña un papel importante en la mejora del rendimiento de la memoria caché y en el uso efectivo de las capacidades de procesamiento en paralelo. La mayor parte del tiempo de ejecución de un programa científico se gasta en bucles.

Loop Optimization es una optimización independiente de la máquina.

Disminuir el número de instrucciones en un bucle interno mejora el tiempo de ejecución de un programa incluso si aumenta la cantidad de código fuera de ese bucle.

Técnicas de optimización de bucle:

  1. Reducción de frecuencia (movimiento de código):
    en la reducción de frecuencia, se reduce la cantidad de código en bucle. Una declaración o expresión, que se puede mover fuera del cuerpo del ciclo sin afectar la semántica del programa, se mueve fuera del ciclo.

    Ejemplo:

    Initial code:
    
    while(i<100)
    {
     a = Sin(x)/Cos(x) + i;
     i++;
    }
    
    Optimized code:
    
    t = Sin(x)/Cos(x);
    while(i<100)
    {
     a = t + i;
     i++;
    } 
  2. Desenrollado de bucles:
    El desenrollado de bucles es una técnica de transformación de bucles que ayuda a optimizar el tiempo de ejecución de un programa. Básicamente eliminamos o reducimos las iteraciones. El desenrollado de bucles aumenta la velocidad del programa al eliminar las instrucciones de control de bucles y las instrucciones de prueba de bucles.

    Ejemplo:

    Initial code:
    
    for (int i=0; i<5; i++)
        printf("Pankaj\n");
    
    Optimized code:
    
    printf("Pankaj\n");
    printf("Pankaj\n");
    printf("Pankaj\n");
    printf("Pankaj\n");
    printf("Pankaj\n"); 
  3. Interferencia de bucle:
    la interferencia de bucle es la combinación de dos o más bucles en un solo bucle. Reduce el tiempo necesario para compilar la gran cantidad de bucles.

    Ejemplo:

    Initial Code:
    
    for(int i=0; i<5; i++)
        a = i + 5;
    for(int i=0; i<5; i++)
        b = i + 10;
    
    Optimized code:
    for(int i=0; i<5; i++)
    {
     a = i + 5;
     b = i + 10;
    } 

Publicación traducida automáticamente

Artículo escrito por pp_pankaj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *