ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

COMO OPTIMIZAR UN COMPILADOR USANDO PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR PARA UN MANEJO ADECUADO DE LOS REGISTROS DEL MICROPROCESADORCOMO OPTIMIZAR UN COMPILADOR USANDO PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR PARA UN MANEJO ADECUADO DE LOS REGISTROS DEL MI


Enviado por   •  21 de Marzo de 2014  •  1.383 Palabras (6 Páginas)  •  692 Visitas

Página 1 de 6

Idealmente, los compiladores deberían producir código objeto que fuera tan bueno como si estuviera escrito directamente por un buen programador. La realidad es que esto es difícil de conseguir y muy pocas veces se alcanza esa meta. Sin embargo, el código generado por el compilador puede ser mejorado por medio de unas transformaciones que se han denominado tradicionalmente optimizaciones, aunque el término optimización es impropio ya que raramente se consigue que el código generado sea el mejor posible.

El objetivo de las técnicas de optimización es mejorar el programa objeto para que nos dé un rendimiento mayor. La mayoría de estas técnicas vienen a compensar ciertas ineficiencias que aparecen en el lenguaje fuente, ineficiencias que son inherentes al concepto de lenguaje de alto nivel, el cual suprime detalles de la máquina objeto para facilitar la tarea de implementar un algoritmo.

Cada optimización está basada en una función de coste y en una transformación que preserve el significado del programa. Mediante la función de coste queremos evaluar la mejora que hemos obtenido con esa optimización y si compensa con el esfuerzo que el compilador realiza para poder llevarla a cabo. Los criterios más comunes que se suelen emplear son el ahorro en el tamaño del código, la reducción del tiempo de ejecución y la mejora de las necesidades del espacio para los datos del programa.

Factores a optimizar:

• Velocidad de ejecución

• Tamaño del programa

• Necesidades de memoria

• Se sigue una aproximación conservadora

TIPOS DE OPTIMIZACIÓN

Existen diversas técnicas de optimización que se aplican al código generado para un programa sencillo. Por programa sencillo entendemos aquel que se reduce a un sólo procedimiento o subrutina. Las técnicas de optimización a través de varios procedimientos se reducen a aplicar las vistas aquí a cada uno de los procedimientos y después realizar un análisis.

En función del ámbito de aplicación.

 Optimizaciones locales.

• Aplicadas dentro de un bloque básico.

 Optimizaciones globales.

• Aplicadas a más de un bloque básico

Optimizaciones locales

a) Optimizaciones que no modifican la estructura.

1. Eliminación de sub-expresiones comunes.

2. Eliminación de código muerto.

3. Renombrar variables temporales.

4. Intercambio de sentencias independientes adyacentes.

b) Transformaciones algebraicas.

Son aquellas transformaciones que simplifican expresiones y/o reemplazan operaciones costosas de la máquina por otras menos costosas.

Además de este tipo de optimizaciones locales a un bloque básico, existe otro tipo de optimizaciones aún más locales, pues su ámbito se reduce a una breve secuencia de instrucciones. A este tipo de optimización local se le llama optimización peephole, e intenta mejorar el rendimiento del programa por medio de reemplazar esa breve secuencia de instrucciones objeto por otra secuencia más corta y/o más rápida. Hay varios tipos de optimización peephole, siendo los más usuales los siguientes:

1. Eliminación de instrucciones redundantes.

2. Optimizaciones en el flujo de control.

3. Simplificaciones algebraicas.

4. Uso de instrucciones máquina específicas.

Las técnicas de optimización global se basan todos ellos en el análisis global de flujo de datos. Este análisis se realiza para el código de todo el programa, es decir, a lo largo de los distintos bloques básicos que forman el código del programa. Suponiendo que tenemos la información que nos proporciona este análisis, que lo veremos en el siguiente apartado, hay dos tipos de optimizaciones importantes que se realizan: la localización y la asignación global de registros para las variables, y las optimizaciones que se realizan en los bucles.

Localización y asignación de registros

Para una máquina con registros -lo común en los procesadores actuales- las instrucciones cuyos operandos están en los registros de la máquina son más cortas y más rápidas que aquellas que tratan con operandos que están en la memoria.

Por lo tanto, es importante decidir qué variables se deben almacenar en los registros (localización) y en qué registro se debe almacenar cada variable (asignación).

Existen

...

Descargar como (para miembros actualizados)  txt (8.7 Kb)  
Leer 5 páginas más »
Disponible sólo en Clubensayos.com