Ensayo de Optimización de Código Intermedio
Enviado por sauloe.valencia • 25 de Octubre de 2016 • Ensayo • 1.535 Palabras (7 Páginas) • 903 Visitas
[pic 1][pic 2][pic 3]
Introducción:
En este escrito se tomaran en cuenta algunas de las técnicas necesarias para hacer la optimización de código, como ya sabemos estas técnicas consisten en hacer que el código que tenemos de entrada en un lenguaje dado pueda ser reducido o mejor dicho optimizado. Este concepto parte de la necesidad de economizar los recursos.
Se le llama optimizar a analizar cuáles de las líneas de código tienen redundancia, algunas operaciones que se pueden hacer desde el comienzo, como también en momentos tenemos algunas optimizaciones más complejas dentro de ciclos, o instrucciones específicas. Por ello necesitamos estudiar estas técnicas que desarrollaré.
Tendencias de Optimización
La optimización de código surgió en el comienzo de la computación por la necesidad de reducir el número de líneas de código o reducir el número de registros a usar. En el principio por el poca capacidad de las computadoras al tener no mucha memoria y por lo tanto menos registros y menos espacio de almacenamiento, al hacer un programa necesitabas reorganizarlo o sintetizarlo para obtener un código más reducido.
Todas estas técnicas aún se siguen utilizando, ya no es tanto el problema el espacio y los registros, ya que la arquitectura moderna nos permite tener hasta cierto punto tener menos preocupaciones por la reducción. Muchas de las máquinas que utilizamos tienen memoria suficiente y registros suficientes, sin embargo, es necesario reducir ciertas líneas de código para tener menos tiempo de ejecución y al mismo tiempo hacer que nuestro procesador trabaje menos.
Aho (2008) nos dice que una transformación debe valer la pena, no tiene sentido que el escritor de un compilador haga esfuerzo intelectual de aplicar una transformación que mejore el código y que el compilador gaste tiempo adicional compilando programas fuente si este esfuerzo no es recompensado cuando se ejecutan los programas objeto. Agregando que en ocasiones interesa reducir el espacio que ocupa el código compilado, pero no toda transformación consigue mejorar todo programa y ocasionalmente una “optimización” puede ralentizar ligeramente un programa.
Creo que esta tendencia es una de las más usadas, ya que si no se tiene una gran optimización e incluso es aún más el gasto de registros y del compilador al reducir que en el mismo código en sí, esto nos indica que es mejor dejarlo como está. Nos dará mejor resultado no hacer la optimización a hacerla de esta forma.
También en la parte de bucles o ciclos se tiende a optimizar ya que muchas veces en estos ciclos como programadores a menudo metemos variables, estructuras o simplemente metemos demasiada información por ello dentro de García Carrasco (2005) encontramos un ejemplo de cómo podríamos optimizar los bucles.
Hace mención sobre la optimización de bucles y dice que la mayoría de las veces un programa se pasa repitiendo una pequeña parte del programa, y a eso se le llama la regla 9010, queriendo decir que del 90% del programa es pasado en el 10%, o sea el 10% por lo general son bucles de distintos tipos, por ello la optimización debe de ser la siguiente:
1. Movimiento de Código
2. Eliminación de variables Incluidas.
3. Sustitución de variables costosas por otras menos costosas.
También se usan estos dos pasos peros en menor medida:
4. Expansión de código.
5. Unión de Bucles.
En esta parte encontramos algo que a mi parecer es importante, cambiar variables costosas por otras menos costosas, muchas veces utilizamos variables que usan mucho espacio como arreglos, dobles, etc. Estas variables cuando las creamos usan mucho espacio y por lo tanto cuestan mucho en el procesador y registros, por tanto si las cambiamos por otras variables que reserven menos espacio podrían ayudarnos a hacer una optimización.
Las variables menos costosas pueden ser de gran ayuda en programas grandes y de muchas líneas de código porque así podríamos hacer los procesos más rápido y no tendía que sobre cargarse el procesador de operaciones, tal vez no lo notaremos en el momento pero a la larga, si analizamos el rendimiento del procesador veremos cómo redunda menos y se enfoca más en los proceso que en buscar acomodo a todas esas variables.
Otra técnica que encontramos es reemplazar las expresiones por su resultado cuando se pueden evaluar en tiempo de compilación. Como por ejemplo en las operaciones aritméticas, operaciones lógicas, operaciones comparativas, etc.
Aho (2008) en este tipo de optimización nos dice podemos eliminar las sobrexpresiones comunes, la programación de copias, la eliminación de código inactivo y el cálculo previo de constantes.
● Sobrexpresiones comunes: una ocurrencia de la expresión E se denomina sobrexpresión común si E ha sido previamente calculada y los valores de las variables dentro de E no han cambiado desde el cálculo anterior. Se puede evitar recalcular la expresión si se puede utilizar el valor calculado previamente.
● Propagación de copias: consiste en detectar expresiones iguales, asignando a esa expresión a una nueva variable: a:=d+e y b:d+e pasan a ser solo una expresión: c:=d+e
● Eliminación de código inactivo: eliminar proposiciones que calculan valores que nunca llegan a utilizarse.
● Cálculo previo de constantes: como su nombre lo indica, consiste en calcular previamente los valores de las constantes.
Otra técnica para optimizar relacionada con modificar la estructura de datos por ejemplo si tenemos una lista enlazada, entonces tenemos estos pasos:
...