OPTIMIZACION DE CODIGO

Slides:



Advertisements
Presentaciones similares
Ejemplo Práctico de un Compilador Pequeño
Advertisements

Clasificación de los compiladores
Compiladores e intérpretes
Prof. Ing.Maria Rosa Damaso Rios
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
¿Compilador ? Es un traductor que convierte un texto escrito en un lenguaje fuente y lo traduce a un programa objeto en código máquina.
Nuestro reto es educar al pensamiento, para que razone de acuerdo a ciertas reglas; con ello podremos ser más eficientes al momento en que ordenamos.
Facultad de Ciencias de la Computación
Fundamentos de programación
Resolución de Problemas Algoritmos y Programación
INSTITUTO TECNOLOGICO DE MINATITLAN
Técnico en programación de Software
Unidad 1. Introducción al proceso de compilación.
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Traducción dirigida por la Sintaxis
Teoría de lenguajes y compiladores
Programas Son una serie o secuencia de instrucciones entendibles por los ordenadores que permiten la realización de las acciones o tareas para las que.
Tema 3. Optimización de Código
TRADUCTOR DE UN PROGRAMA
M.C. Meliza Contreras González
Programación en Matlab
Compiladores II ( /07/ :06) Compiladores II Tema 1. Código Intermedio Lecciones 1 y 2.
Computadoras analógicas Miden magnitudes físicas que se distribuyen en escala continua como pueden ser la temperatura y la presión. Este tipo de computadoras.
Análisis y Diseño de Algoritmos. Propiedades : f ( n )  O ( f ( n ) ) a ) O ( f ( n ) )  O ( g ( n ) )  f ( n )  g ( n )
Problemas, algoritmos y programas: Modelar: Simular o programar su solución en un computador. Algoritmos: Es un conjunto finito, y no ambiguo de etapas.
FUNDAMENTOS DE PROGRAMACION
INGENIERIA EN SISTEMAS COMPUTACIONALES
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
Inteligencia artificial
SOFTWARE DE PROGRAMACIÓN
ESTRUCTURA DE DATOS ESD-243
FORMA INTERNA DE REPRESENTAR
Fundamentos de programación Organización de una computadora.
Material de apoyo Unidad 4 Estructura de datos
Procesadores de Lenguajes
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
Programación de Sistemas
FUNDAMENTOS DE PROGRAMACION
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
COMPILADORES DIANA ROCIO OLAYA MESA.
INFORMATICA VII (Programación e implementación de sistemas)
COMPUTO III Ing. Jimmy Ojeda Arnica.
Unidad 1. Introducción a los Compiladores.
Lenguajes de Programación
JULIAN DARIO RAMIREZ CORRECHA PROSOF12. °QUE ES UN ALGORITMO °CLASES DE ALGORITMOS °QUE ES UN LENGUAJE DE PROGRAMACION °QUE ES UN LENGUAJE DE PROGRAMACION.
Términos algoritmo diseñar algoritmo implementar algoritmo
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
Metodología de la programación
ALGORITMO QUE ES ??.
Preposición: suma= var1 + var2 + 10; Análisis Léxico El analizador léxico lee los caracteres del programa fuente, y verifica que correspondan a una secuencia.
Elaboración de algoritmos usando lógica de programación
Presente un cuestionario con los aspectos mas importantes sobre los
Lic. Carla Aguirre Montalvo
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
Compilador Es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa.
Conceptos Generales Programación I Docente: Ing. Marleny Soria M.
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
Programación de Sistemas
FUNDAMENTOS DE PROGRAMACIÓN
Programación I Docente: Ing. Marleny Soria M..  Es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar.
PARADIGMA Es un marco de referencia que impone reglas sobre cómo se deben hacer las cosas. CONCEPTO DE PARADIGMA DE PROGRAMACION colección de modelos conceptuales.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
Conceptos Generales PROGRAMACIÓN I DOCENTE: ING. MARLENY SORIA M. 1.
Solución a Ecuaciones de Recurrencia Dr. Rogelio Dávila Pérez División de Posgrado Universidad Autónoma de Guadalajara
Tema 8: Programación estructurada Introducción La importancia del conocimiento de programación es mucho mayor de lo que se piensa. Aprender a programar.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Ciclos condicionales y exactos Estructura de control de ciclos
Transcripción de la presentación:

OPTIMIZACION DE CODIGO UNIDAD III GENERACION DE CODIGO CUADRUPLOS NOTACION POLACA OPTIMIZACION DE CODIGO CaFco - PS II - EJ-04

Generación de Código Intermedio Lenguajes Intermedios Representaciones Gráficas Código de tres Direcciones CaFco - PS II - EJ-04

Generación de Código Intermedio Analizador Léxico Analizador sintáctico Semántico Gen. De Cod. Inter Optimador de Codigo Gen. de Codigo Manejador de Errores Admor. Tabla Simbolos Análisis Síntesis CaFco - PS II - EJ-04

Representaciones grafícas Notación postfija: es la forma para representaciones intermedias. árboles sintácticos: describe la estructura jerárquica natural de una expresión dada. GDA: grafo dirigido aciclico, proporciona la misma información que el árbol sintáctico, pero de una forma mas compacta, ya que se identifican las subexpresiones (expresiones calculadas mas de una vez) dentro de un bloque. CaFco - PS II - EJ-04

Expresión a:= b*-c + b*-c Ejemplo: Expresión a:= b*-c + b*-c Postfija: a b c menosu * b c menosu * + asigna asigna a + * b minosu c c asigna a + * b minosu GDA Árbol Sintáctico CaFco - PS II - EJ-04

Resultado Operando1 Operador Operando2 Generación de Código Intermedio El código intermedio es una interpretación de las operaciones que se tienen en un lenguaje generados para una máquina virtual -una máquina inexistente pero con las características que toda computadora posee. El código de tres direcciones: que recibe este nombre porque emplea tres entidades o direcciones para reconocer los operandos y el resultado de una operación. Se representa generalmente como: Resultado Operando1 Operador Operando2 CaFco - PS II - EJ-04

Código de tres direcciones El código de tres direcciones es como el lenguaje ensamblador Ya que consiste en una secuencia de instrucciones donde cada una tiene como máximo 3 operándoos. Propiedades: Cada instrucción tiene a lo sumo un operador, además de la asignación. (el compilador decide la prioridad del operador) El compilador debe generar un nombre temporal para guardar los valores calculados. Aparte de calcular expresiones también pueden manejar construcciones de flujo de control y llamadas a procedimientos CaFco - PS II - EJ-04

Ejemplo: a:=b*-c+b*-c t1::= - c t2::= b * t1 t3:= - c t4::= b * t3 t5::= t2 + t4 a := t5 asigna a + * b minosu c CaFco - PS II - EJ-04

Ejemplo: a:=b*-c+b*-c t1::= - c t2::= b * t1 t3:= t2 + t2 a := t3 asigna a + * b minosu c CaFco - PS II - EJ-04

OPTIMIZACION DE CODIGO La optimización de código no es un problema fácil, y depende de cual sea el nivel deseado de optimización. Toda optimización conlleva la transformación de un código en otro más eficiente. La optimización de código puede realizarse durante la propia generación o como paso adicional, ya sea intercalado entre el análisis semántico y la generación de código (se optimizan las cuádruplas) o situado después de ésta (se optimiza a posteriori el código generado). CaFco - PS II - EJ-04

Optimización de Código Requisitos que debe cumplir toda optimización. Mantener el significado en la transformación de optimización. Ser mesurable la optimización obtenida mediante la transformación. El esfuerzo de transformar para optimizar debe compensar con la optimización conseguida. ¿Cómo se puede mejorar el rendimiento?. Analizando los Flujos de Control. Analizando los Flujos de Datos. Tipos de optimizaciones. Peephole. Independiente de la Máquina. Dependiente de la máquina. CaFco - PS II - EJ-04

Optimización Peephole Consiste en obtener un lenguaje transformado con un número menor de instrucciones. CaFco - PS II - EJ-04

Optimización Independiente de la Máquina REDUCCIÓN SIMPLE: Evaluar expresiones que son conocidos sus operandos en tiempo de compilación. REACONDICIONAMIENTO DE LAS INSTRUCCIONES: Reducir el número de temporales. ELIMINAR REDUNDANCIAS. REDUCCIÓN DE POTENCIA: Sustituir operaciones software por operaciones Hardware. Ejemplo la potencia de 2, se puede sustituir por desplazamientos. REDUCIR LA EJECUCIÓN ITERATIVA DE BLOQUES INNECESARIOS: Sacar bloques fuera de los lazos. CaFco - PS II - EJ-04

Optimización Dependiente de la Máquina • Reasignar los registros de internos de la máquina adecuadamente. • Usar operaciones especiales de la máquina para expresar operaciones complejas. • Utilizar los recursos y periféricos de la máquina más adecuados para cada momento de ejecución. CaFco - PS II - EJ-04

ANÁLISIS DEL FLUJO DE CONTROL ANÁLISIS DEL FLUJO DE DATOS ORGANIZACIÓN DEL COMPILADOR OPTIMIZADOR OPTIMIZADOR DE CÓDIGO ETAPAS PREVIAS ANÁLISIS DEL FLUJO DE CONTROL ANÁLISIS DEL FLUJO DE DATOS GENERADOR DE CÓDIGO TRANSFORMACIONES CaFco - PS II - EJ-04

ORGANIZACIÓN DEL COMPILADOR OPTIMIZADOR COMPILADORES OPTIMIZADORES.- Son aquellos compiladores que aplican transformaciones a los programas para mejorar el código. ANÁLISIS DEL FLUJO DE CONTROL.- Proceso que identifica los lazos dentro del grafo de flujo de un programa. ANÁLISIS DEL FLUJO DE DATOS.- Proceso para recopilar información sobre el modo en que se utilizan las variables en un programa. Considera varios algoritmos para recopilar información, y el impacto de construcciones de lenguaje como los procedimientos y apuntadores. TRANSFORMACIONES.- Mejoras que se realizan al código con el fin de obtener programas en lenguaje objeto eficientes. CaFco - PS II - EJ-04

Ej: if (x&4 || x&8) ... se puede representar: Formas para que se de la optimización Instrucciones especiales ("idioms") Ej: if (x&4 || x&8) ... se puede representar: TEST X,12 JZ L ... L: Reordenación del código Por ejemplo: sea la expresión a=b/c*d; MOV AX,B XOR DX,DX DIV AX,C MUL AX,D MOV A,AX Si la reordenamos así: a=b*d/c;, aprovechando que la multiplicación y la división son asociativas, tenemos: CaFco - PS II - EJ-04

Ejecución en tiempo de compilación Eliminación de redundancias Ejemplo: int a,b,c,d; a = a+b*c; (*,b,c,t1) (*,b,c,t1) (+,a,t1,t2) (+,a,t1,t2) (=,t2,,a) (=,t2,,a) d = a+b*c; (*,b,c,t3) (+,a,t3,t4) (+,a,t1,t4) (=,t4,,d) (=,t4,,d) b = a+b*c; (*,b,c,t5) (+,a,t5,t6) (=,t6,,b) (=,t4,,b) Una solución: el programador podría reescribir su programa así: int a,b,c,d,e; e = b*c; (*,b,c,t1) (=,t1,,e) a = a+e; (+,a,e,t2) (=,t2,,a) d = a+e; (+,a,e,t3) (=,t3,,d) b = d; (=,d,,b) CaFco - PS II - EJ-04

Optimización de bucles Reordenación de operaciones Regiones Asignaciones muertas Por ejemplo: sea la expresión (a*b)+(c+d). Sus cuádruplas equivalentes serían: (*,a,b,t1) (+,c,d,t2) (+,t1,t2,t1) En este caso, utilizamos dos variables auxiliares (t1, t2). Pero si aprovechamos la asociatividad de la suma para reordenar de esta manera: (+,t1,c,t1) (+,t1,d,t1) necesitaremos sólo una variable auxiliar. CaFco - PS II - EJ-04

Transformaciones que preservan la función. Hay varias formas en las que un compilador puede mejorar un programa sin modificar la función que calcula. La eliminación de subexpresiones comunes, la propagación de copias, la eliminación de código inactivo, y el cálculo previo de constantes son ejemplos comunes de dichas transformaciones que preservan la función. Subexpresiones comunes. Propagación de copias. Eliminación de código inactivo. Optimizaciones de bucles. Traslado de código. Variables de inducción y reducción de intensidad. CaFco - PS II - EJ-04

Subexpresiones comunes Una ocurrencia de una expresión E se denomina subexpresión común si E ha sido previamente calculada y los valores de la variable 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. CaFco - PS II - EJ-04

Propagación de copias Las asignaciones de la forma f:=g llamadas proposiciones de copias, o copias simplemente es otro tipo de transformación que mejora el código, y que varios algoritmos introducen. La idea en que se basa la propagación de copias es utilizar g por f, siempre que sea posible despues de la proposición de copia f:=g. Esto puede no parecer una mejora, pero como se ve, da la oportunidad de eliminar asignaciones. a:= d+e b:= d+e c:= d+e t:= d+e a:= t b:= t c:= t x:= t3 a[t2]:= t5 a[t4]:= t3 goto B2 CaFco - PS II - EJ-04

Eliminación de código inactivo Una variable esta activa en un punto de un programa si su valor puede ser utilizado posteriormente en caso contrario está inactiva en ese punto. Una idea afín es el código inactivo o inútil, proposiciones que calculan valores que nunca llegan a utilizarse. Ejemplo: depura:=false If (depura) print (“El codigo es correcto”) Generalmente, deducir en el momento de la compilación que el valor de una expresión es una constante y utilizar la constante en su lugar se conoce como cálculo previo de constantes. CaFco - PS II - EJ-04

Optimizaciones de lazos El tiempo de ejecución de un programa puede mejorar si disminuye la cantidad de instrucciones en un lazo interno, incluso si se incrementa la cantidad de código fuera del lazo. Hay 3 técnicas importantes para la optimización de lazos: El traslado de código.- Esta transformación toma una expresión que produce el mismo resultado independientemente del número de veces que se ejecute un lazo y coloca la expresión antes del lazo. Eliminación de variables de inducción.- Eliminar aquellos valores que se relacionan o permanecen atados, pues cuando uno se modifica, el otro valor también cambiará. Reducción de intensidad.- Sustituir un operador más caro po otro más barato. x**2= x*x 2*x= x+x x/2 = x*0.5 CaFco - PS II - EJ-04