You are on page 1of 8

UNIDAD 3.

- OPTMIZACION
La optimizacin es un proceso que tiene a minimizar o maximizar alguna variable de rendimiento, generalmente tiempo, espacio, procesador, etc. La optimizacin se realiza despus de la generacin de cdigo de todo el programa o de un elemento ejecutable del programa (funcin, procedimiento, etc). Desafortunamente no existen optimizador que hagan un programa ms rpido y que ocupe menor espacio. La optimizacin se realiza reestructurando el cdigo de tal forma que el nuevo cdigo generado tenga mayores beneficios. La mayora de los compiladores tienen una optimizacin baja, se necesita de compiladores especiales para realmente optimizar el cdigo.

3.1 Tipos de optimizacin. Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base al alcance ofrecido por el compilador. La optimizacin va a depender del lenguaje de programacin y es directamente proporcional al tiempo de compilacin; es decir, entre ms optimizacin mayor tiempo de compilacin. Como el tiempo de optimizacin es gran consumidor de tiempo (dado que tiene que recorrer todo el rbol de posibles soluciones para el proceso de optimizacin) la optimizacin se deja hasta la fase de prueba final. Existen distintos tipos de optimizacin, que son las siguientes:

Locales. Ciclos. Globales. De mirilla. 3.1.1 Locales. La optimizacin local se realiza sobre mdulos del programa. En la mayora de las ocasiones a travs de funciones, mtodos, procedimientos, clases, etc. La caracterstica de las optimizaciones locales es que slo se ven reflejados en dichas secciones. Optimizacin Local La optimizacin local sirve cuando un bloque de programa o seccin es crtico por ejemplo: la E/S, la concurrencia, la rapidez y confiabilidad de un conjunto de instrucciones. Como el espacio de soluciones es ms pequeo la optimizacin local es ms rpida. 3.1.2 Ciclos. El problema de la optimizacin en ciclos y en general radica es que muy difcil saber el uso exacto de algunas instrucciones. As que no todo cdigo de proceso puede ser optimizado. Otros uso de la optimizacin pueden ser el mejoramiento de consultas en SQL o en aplicaciones remotas (sockets, E/S, etc.). 3.1.3 Globales. La optimizacin global se da con respecto a todo el cdigo. Este tipo de optimizacin es ms lenta pero mejora el desempeo general de todo programa. Las optimizaciones globales pueden depender de la arquitectura de la mquina. En algunos casos es mejor mantener variables globales para agilizar los procesos (el proceso de declarar variables y eliminarlas toma su tiempo) pero consume ms memoria. Algunas optimizaciones incluyen utilizar como variables registros del CPU, utilizar instrucciones en ensamblador. GRAFO DEL FLUJO DE EJECUCIN

Antes de realizar una optimizacin global es necesario crear el grafo de flujo de ejecucin. El grafo de flujo de ejecucin representa todos los caminos posibles de ejecucin del programa. La informacin contenida en el grafo es til para el programador y el optimizador. La optimizacin global a partir del anlisis del grafo del flujo de ejecucin permite: Una propagacin de constantes fuera del bloque bsico. Eliminacin del cdigo no utilizado Una mejor asignacin de los registros. CONSTRUCCIN DEL GRAFO DEL FLUJO DE EJECUCIN

Pasos: Dividir el programa en bloques bsicos: Se representa el programa en un cdigo intermedio donde queden explcitamente representados los saltos condicionales e incondicionales. Un bloque bsico ser cualquier trozo de cdigo que no contenga saltos ni etiquetas en su interior (es posible tener etiquetas al inicio del bloque y saltos al final). En el grafo, los vrtices representan los bloques bsicos y las aristas representan los saltos de un bloque bsico a otro. DETECCIN DE CDIGO NO UTILIZADO (CDIGO MUERTO) Cdigo muerto: es cdigo que nunca se ejecutar. Deteccin de cdigo no utilizado: El cdigo no utilizado son los bloques bsicos donde no llega ninguna arista. Se quita el bloque y las aristas que salen de l. Repetir hasta no eliminar ningn bloque bsico.

ANLISIS DEL GRAFO DEL FLUJO DE EJECUCIN Hay que considerar como la informacin sobre las variables y expresiones se propaga a travs del grafo. Esta informacin la representaremos en forma de conjuntos como los siguientes: Expresiones disponibles Alcance de las definiciones variables vivas Expresiones muy utilizadas

3.1.4 De mirilla. La optimizacin de mirilla trata de estructurar de manera eficiente el flujo del programa, sobre todo en instrucciones de bifurcacin como son las decisiones, ciclos y saltos de rutinas. La idea es tener los saltos lo ms cerca de las llamadas, siendo el salto lo ms pequeo posible. MIRILLA: secuencia corta de instrucciones objeto. Sustituir la mirilla por otras instrucciones ms rpidas o cortas.

Se puede aplicar tanto al cdigo intermedio como al cdigo objeto. En general, se plantea con un conjunto de reglas de reemplazamiento. Cada mejora puede brindar oportunidades para mejoras adicionales. Cargas y almacenamientos redundantes: (1) MOV R0,a (2) MOV a, R0 Se elimina (2) ya que est garantizado que con (1) el valor de a est en el registro R0 (siempre que no haya saltos a (2)). Cdigo inalcanzable: Se puede eliminar una instruccin sin etiqueta que siga inmediatamente a un salto incondicional. Optimizaciones del flujo de control: Saltos hacia saltos, saltos hacia saltos condicionales y saltos condicionales hacia saltos.

Eliminacin de instrucciones intiles. a=a*1 b=b+0 Utilizacin de instrucciones especficas (machine idioms). a=a+1 inc a Reacondicionamiento de instrucciones.

3.2 Costos. Los costos son el factor ms importante a tomar en cuenta a la hora de optimizar ya que en ocasiones la mejora obtenida puede verse no reflejada en el programa final pero si ser perjudicial para el equipo de desarrollo. La optimizacin de una pequea mejora tal vez tenga una pequea ganancia en tiempo o en espacio pero sale muy costosa en tiempo en generarla. Las aplicaciones multimedias como los videojuegos tienen un costo de ejecucin alto por lo cual la optimizacin de su desempeo es crtico, la gran mayora de las veces requieren de procesadores rpidos (e.g.tarjetas de video) o de mucha memoria. 3.2.1 Costo de ejecucin. (memoria, registros, pilas) La memoria es uno de los recursos ms importantes de la computadora y, en consecuencia, la parte del sistema operativo responsable de tratar con este recurso, el gestor de memoria, es un componente bsico del mismo. El gestor de memoria del sistema operativo debe hacer de puente entre los requisitos de las aplicaciones y los mecanismos que proporciona el hardware de gestin de memoria. COSTO DE EJECUCIN Los costos de ejecucin son aquellos que vienen implcitos al ejecutar el programa. En algunos programas se tiene un mnimo para ejecutar el programa, por lo que el espacio y la velocidad del microprocesador son elementos que se deben optimizar para tener un mercado potencial ms amplio. Algunos lenguajes de programacin utilizan la pila para almacenar datos que son locales a espacio para los datos locales se asigna a los temas de la pila cuando el procedimiento se introduce, y son borradas cuando el procedimiento termina. Organizacin de la memoria en tiempo de ejecucin Las tcnicas de gestin de la memoria durante la ejecucin del programa difieren de unos lenguajes de programacin a otros, e incluso de unos compiladores a otros. Para datos, bsicamente la memoria se divide en: - Memoria Esttica. - La Pila. - Heap (El Monton).

Otro tipo de aplicaciones que deben optimizarse son las aplicaciones para dispositivos mviles. Los dispositivos mviles tienen recursos ms limitados que un dispositivo de cmputo convencional razn por la cual, el mejor uso de memoria y otros recursos de hardware tiene mayor rendimiento. En algunos casos es preferible tener la lgica del negocio ms fuerte en otros dispositivos y hacer uso de arquitecturas descentralizadas como Cliente / servidor. Registros Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los registros son espacios fsicos dentro del microprocesador con capacidad de 4 bits hasta 64 bits dependiendo del microprocesador que se emplee. Los registros son direccionables por medio de una vieta, que es una direccin de memoria. Los bits, por conveniencia, se numeran de derecha a izquierda (15,14,13. 3,2,1,0), los registros estn divididos en seis grupos los cuales tienen un fin especifico. La pila La aparicin de lenguajes con estructura de bloque trajo consigo la necesidad de tcnicas de alojamiento en memoria ms flexibles, que pudieran adaptarse a las demandas de memoria durante la ejecucin del programa. En, en general los compiladores, la asignacin de memoria de variables locales se hace de una forma flexible, atendiendo al hecho de que solamente necesitan memoria asignada desde el momento que comienza la ejecucin de la funcin hasta el momento en que sta finaliza. Memoria Esttica La forma ms sencilla de almacenar el contenido de una variable en memoria, en tiempo de ejecucin, es hacerlo en la memoria esttica. As, el almacenamiento de dichas variables ser permanente (durante la ejecucin del programa). Por ello, resulta obvio que los datos etiquetados como constantes y las variables globales de un programa tengan asignada la memoria necesaria durante toda la ejecucin del programa. Sin embargo, no todas las variables pueden almacenarse estticamente. As, cada vez que comienza la ejecucin de un procedimiento (o funcin) se crea un registro de activacin para contener los objetos necesarios para su ejecucin, eliminndolo una vez terminada sta.

Dado que durante la ejecucin un programa es habitual que unos procedimientos llamen a otros y estos a otros, sucesivamente, se crea cadena jerrquica de llamadas a procedimiento. El Montn (Heap) Cuando el tamao de un objeto a colocar en memoria puede variar en tiempo de ejecucin, no es posible ubicarlo en memoria esttica, ni siquiera en la pila. Ejemplos de este tipo de objetos son: las listas, los rboles, etc. Para manejar este tipo de objetos el compilador debe disponer de un rea de memoria de tamao variable, que no se vea afectada por la activacin o desactivacin de procedimientos.

3.2.2 Criterios para mejorar el cdigo. La mejor manera de optimizar el cdigo es hacer ver a los programadores que optimicen su cdigo desde el inicio, el problema radica en que el costo podra ser muy grande ya que tendra que codificar ms y/o hacer su cdigo mas legible. Los criterios de optimizacin siempre estn definidos por el compilador. Muchos de estos criterios pueden modificarse con directivas del compilador desde el cdigo o de manera externa. Este proceso lo realizan algunas herramientas del sistema como los buscadores para cdigo mvil y cdigo para dispositivos mviles. 3.2.3 Herramientas para el anlisis del flujo de datos. Existen algunas herramientas que permiten el anlisis de los flujos de datos, entre ellas tenemos los depuradores y desambladores. La optimizacin al igual que la programacin es un arte y no se ha podido sistematizar del todo.