La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

OPTIMIZACION DE CODIGO

Presentaciones similares


Presentación del tema: "OPTIMIZACION DE CODIGO"— Transcripción de la presentación:

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

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

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

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

13 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

14 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

15 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

16 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

17 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

18 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

19 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

20 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

21 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

22 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

23 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

24 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


Descargar ppt "OPTIMIZACION DE CODIGO"

Presentaciones similares


Anuncios Google