Reducción de frecuencia en la optimización de código

Requisito previo: diseño del compilador | Optimización de código
La reducción de frecuencia es un tipo de proceso de optimización de bucle que es independiente de la máquina. En el código de reducción de frecuencia dentro de un bucle se optimiza para mejorar el tiempo de ejecución del programa. La reducción de frecuencia se utiliza para disminuir la cantidad de código en un 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. La reducción de frecuencia también se denomina Code Motion.

Objetivo de la Reducción de Frecuencia:
El objetivo de la reducción de frecuencia es:

  • Reducir la frecuencia de evaluación de la expresión.
  • Para sacar declaraciones invariantes del bucle fuera del bucle.

A continuación se muestra el ejemplo de reducción de frecuencia:

Programa 1:

// This program does not uses frequency reduction.
#include <bits/stdc++.h>
  
using namespace std;
  
int main()
{
    int a = 2, b = 3, c, i = 0;
  
    while (i < 5) {
        // c is calculated 5 times
        c = pow(a, b) + pow(b, a); 
  
        // print the value of c 5 times
        cout << c << endl; 
        i++;
    }
    return 0;
}

Programa 2:

// This program uses frequency reduction.
#include <bits/stdc++.h>
  
using namespace std;
  
int main()
{
    int a = 2, b = 3, c, i = 0;
  
    // c is calculated outside the loop
    c = pow(a, b) + pow(b, a); 
  
    while (i < 5) {
  
        // print the value of c 5 times
        cout << c << endl; 
        i++;
    }
    return 0;
}

Producción:

17
17
17
17
17

Explicación:
El Programa 2 es más eficiente que el Programa 1 ya que en el Programa 1 el valor de c se calcula cada vez que se ejecuta el bucle while. Por lo tanto, el valor de c se calcula fuera del ciclo solo una vez y reduce la cantidad de código en el ciclo.

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 *