Diferencia entre optimización de código dependiente de la máquina e independiente de la máquina

Tabla de contenido:

Diferencia entre optimización de código dependiente de la máquina e independiente de la máquina
Diferencia entre optimización de código dependiente de la máquina e independiente de la máquina

Video: Diferencia entre optimización de código dependiente de la máquina e independiente de la máquina

Video: Diferencia entre optimización de código dependiente de la máquina e independiente de la máquina
Video: La máquina de Turing (explicada) 2024, Noviembre
Anonim

Diferencia clave: Optimización de código dependiente de la máquina frente a independiente de la máquina

Los programas de computadora son conjuntos de instrucciones dadas al hardware para realizar tareas. La mayoría de estos programas están escritos en lenguajes de alto nivel y la computadora no entiende ese lenguaje. Por lo tanto, se utiliza un compilador para convertir esas instrucciones en código de máquina o código de destino. Pasa por varias fases para construir el código de destino. La optimización de código es una de ellas. Existen dos técnicas de optimización, como la optimización de código dependiente de la máquina y la independiente de la máquina. La diferencia clave entre la optimización del código dependiente de la máquina y la independiente de la máquina es que la optimización dependiente de la máquina se aplica al código objeto, mientras que la optimización del código independiente de la máquina se aplica al código intermedio.

¿Qué es la optimización de código dependiente de la máquina?

Al convertir el código fuente en código objeto o código de destino, el compilador pasa por varias fases. Primero, el código fuente se entrega al analizador léxico que produce tokens. Luego, la salida se entrega al analizador de sintaxis que investiga si los tokens generados están en orden lógico. Esa salida se entrega al analizador semántico. Supongamos que hay un fragmento de código como p=q + r;

Aquí, p, q son números enteros, pero r es un flotante. Usando el analizador semántico, la variable entera c se convierte en un flotante. Por lo tanto, hace el análisis semántico. La salida del analizador semántico va al generador de código intermedio. Devuelve un código intermedio que luego va al optimizador de código. La optimización de código es el proceso de eliminar las declaraciones de programa no esenciales sin cambiar el significado del código fuente real. No es una optimización obligatoria, pero puede mejorar el tiempo de ejecución del código de destino. La salida del optimizador de código se entrega al generador de código y, finalmente, se crea el código de destino.

Diferencia entre la optimización de código dependiente de la máquina e independiente de la máquina
Diferencia entre la optimización de código dependiente de la máquina e independiente de la máquina
Diferencia entre la optimización de código dependiente de la máquina e independiente de la máquina
Diferencia entre la optimización de código dependiente de la máquina e independiente de la máquina

Figura 01: Fases del Compilador

En la optimización de código dependiente de la máquina, la optimización se aplica al código fuente. La asignación de una cantidad suficiente de recursos puede mejorar la ejecución del programa en esta optimización.

¿Qué es la optimización de código independiente de la máquina?

Cuando la optimización se realiza en el código intermedio, se denomina optimización de código independiente de la máquina. Existen diferentes técnicas para lograr la optimización de código independiente de la máquina. Se describen utilizando los siguientes ejemplos.

Lee las siguientes líneas de código.

para (j=0; j<10; j ++) {

b=x+2;

a[j]=5 j;

}

Según el código anterior, b=x+2 se calcula una y otra vez en cada iteración. Una vez que se calcula b, no cambia. Entonces, esta línea se puede colocar fuera del ciclo de la siguiente manera.

b=x+2;

para (j=0; j< 10; j++)

{a[j]=5j;

}

Esto se llama movimiento de código.

Lee las siguientes líneas de código.

j=5;

si (j==10) {

a=b+20;

}

Según el código anterior, 'if block' nunca se ejecutará porque el valor j nunca será igual a 10. Ya está inicializado en el valor 5. Por lo tanto, este bloque if puede eliminarse. Esta técnica es la eliminación de código muerto.

Otro método es la reducción de fuerza. Las operaciones aritméticas como la multiplicación requieren más memoria, tiempo y ciclos de CPU. Estas expresiones caras se pueden reemplazar por expresiones baratas como b=a2; o puede ser reemplazado por suma, b=a + a;

Consulte el siguiente código.

para (j=1; j <=5; j ++) {

valor=j5;

}

En lugar de la multiplicación, el código se puede cambiar de la siguiente manera.

int temperatura=5;

para (j=1; j<=5; j++) {

temperatura=temperatura + 5;

valor=temperatura;

}

Es posible evaluar las expresiones que son constantes en tiempo de ejecución. Se llama plegamiento constante. Puede establecerse como b[j+1]=c [j+1];

En cambio, se puede cambiar de la siguiente manera.

n=j +1;

b[n]=c[n];

Puede haber bucles de la siguiente manera.

para (j=0; j<5; j++) {

printf(“a\n”);

}

para (j=0; j <5; j++) {

printf(“b\n”);

}

Imprimiendo a y b, ambos tienen el mismo número de iteraciones. Ambos se pueden combinar en un bucle for de la siguiente manera.

para (j=0; j <5; j++) {

printf(“un\n”);

printf(“b\n”);

}

Otra técnica importante es la eliminación de la subexpresión común. Es reemplazar las expresiones idénticas con una sola variable para hacer el cálculo. Consulte el siguiente código.

a=bc + k;

d=si c + m;

Este código se puede convertir de la siguiente manera.

temperatura=bc;

a=temperatura + k;

d=temperatura + m;

No es necesario calcular bc una y otra vez. El valor multiplicado puede almacenarse en una variable y reutilizarse.

¿Cuál es la similitud entre la optimización de código dependiente de la máquina e independiente de la máquina?

Ambos pertenecen a la optimización del código

¿Cuál es la diferencia entre la optimización de código dependiente de la máquina e independiente de la máquina?

Optimización de código dependiente de la máquina frente a independiente de la máquina

La optimización del código dependiente de la máquina se aplica al código objeto. La optimización del código independiente de la máquina se aplica al código intermedio.
Participación con el hardware
La optimización dependiente de la máquina implica registros de CPU y referencias de memoria absolutas. La optimización de código independiente de la máquina no implica registros de CPU ni referencias de memoria absolutas.

Resumen: Optimización de código dependiente de la máquina frente a independiente de la máquina

La optimización del código consta de dos técnicas de optimización, a saber, la optimización del código dependiente de la máquina y la optimización del código independiente de la máquina. La diferencia entre la optimización de código dependiente de la máquina e independiente de la máquina es que la optimización dependiente de la máquina se aplica al código objeto, mientras que la optimización del código independiente de la máquina se aplica al código intermedio.

Descargue la versión en PDF de la optimización del código dependiente de la máquina frente a la independiente de la máquina

Puede descargar la versión en PDF de este artículo y utilizarlo sin conexión según la nota de la cita. Descargue la versión en PDF aquí Diferencia entre optimización de código dependiente de la máquina e independiente de la máquina

Recomendado: