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

Diferencia Clave - Máquina Dependiente vs Máquina Optimización de código independiente
 

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 idioma. 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 uno de ellos. Hay dos técnicas de optimización como, máquina dependiente y optimización de código independiente de la máquina. los diferencia clave entre la máquina dependiente y la optimización de código independiente de la máquina es que la 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.

CONTENIDO

1. Resumen y diferencia clave
2. ¿Qué es la optimización de código dependiente de la máquina?
3. ¿Qué es la optimización de código independiente de la máquina?
4. Similitudes entre la máquina dependiente y la optimización de código independiente de la máquina
5. Comparación lado a lado: optimización de código de máquina dependiente frente a máquina en forma tabular
6. Resumen

¿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 objetivo, el compilador pasa por varias fases. Primero, el código fuente se le da 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 le da al analizador semántico. Supongamos que hay un fragmento de código como p = q + r;

Aquí, p, q son enteros, pero r es un flotador. Usando el analizador semántico, la variable de entero c se convierte en un flotador. Por lo tanto, hace el análisis semántico. La salida del analizador semántico va al generador de códigos intermedios. 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 programas 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 objetivo. La salida del optimizador de código se asigna al generador de códigos y, finalmente, se genera el código de destino..

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;

De acuerdo con 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. Por lo tanto, esta línea se puede colocar fuera del bucle de la siguiente manera.

b = x + 2;

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

a [j] = 5 * j;

Esto se llama código de movimiento..

Lee las siguientes líneas de código.

j = 5;

si (j == 10)

a = b + 20;

De acuerdo con el código anterior, 'if block' nunca se ejecutará porque el valor j nunca será igual a 10. Ya está inicializado al valor 5. Por lo tanto, esto si el bloque puede ser eliminado. Esta técnica es la eliminación del código muerto..

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

Consulte el siguiente código.

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

valor = j * 5;

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

int temp = 5;

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

temp = temp + 5;

valor = temp;

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

En su lugar, 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 ayb, ambos tienen el mismo número de iteraciones. Ambos se pueden combinar a uno para el bucle de la siguiente manera.

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

printf (“a \ n”);

printf ("b \ n");

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

a = b * c + k;

d = b * c + m;

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

temp = b * c;

a = temp + k;

d = temp + m;

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

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

  • Ambos pertenecen al código de optimización.

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

Dependiente de Máquina vs Optimización de Código Independiente de Máquina 

La optimización de código dependiente de la máquina se aplica al código objeto. La optimización de código independiente de la máquina se aplica al código intermedio.
Implicación con 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 o referencias de memoria absolutas.

Resumen - Máquina Dependiente frente a la máquina de optimización de código 

La optimización de código consta de dos técnicas de optimización, a saber, optimización de código dependiente de la máquina e independiente de la máquina. La diferencia 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.

Descargue la versión en PDF de Machine Dependent vs Machine Independent Code Optimization

Puede descargar la versión en PDF de este artículo y usarla para fines fuera de línea, como se indica en la nota de cita. Descargue la versión en PDF aquí Diferencia entre la máquina dependiente y la optimización de código independiente de la máquina

Referencia:

1. “Diseño del compilador | Optimización de código. ”GeeksforGeeks. Disponible aquí
2.Puntos, Tutoriales. "Diseño del compilador - Optimización de código". Www.tutorialspoint.com, Tutorials Point, 15 de agosto de 2017. Disponible aquí  
3.Estudios4you. “Material de estudio CSE de JNTUH”. Diferencia entre la optimización de código independiente y la dependencia de la máquina. Disponible aquí  

Imagen de cortesía:

1.'Compilador 'Por Yo, Surachit, (CC BY-SA 3.0) vía Commons Wikimedia