La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "CaFco - PS II - EJ-04 UNIDAD III GENERACION DE CODIGO CUADRUPLOS NOTACION POLACA OPTIMIZACION DE CODIGO."— Transcripción de la presentación:

1

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

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

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

5 CaFco - PS II - EJ-04 Representaciones grafícas a)Notación postfija: es la forma para representaciones intermedias. b)árboles sintácticos: describe la estructura jerárquica natural de una expresión dada. c)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.

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

7 CaFco - PS II - EJ-04 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

8 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: a)Cada instrucción tiene a lo sumo un operador, además de la asignación. (el compilador decide la prioridad del operador) b)El compilador debe generar un nombre temporal para guardar los valores calculados. c)Aparte de calcular expresiones también pueden manejar construcciones de flujo de control y llamadas a procedimientos

9 CaFco - PS II - EJ-04 Ejemplo: a:=b*-c+b*-c t 1: := - c t 2: := b * t 1 t 3 := - c t 4: := b * t 3 t 5: := t 2 + t 4 a := t 5 asigna a + * * b minosu b c c

10 CaFco - PS II - EJ-04 Ejemplo: a:=b*-c+b*-c t 1: := - c t 2: := b * t 1 t 3 := t 2 + t 2 a := t 3 asigna a+ * b minosu c

11 CaFco - PS II - EJ-04 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). OPTIMIZACION DE CODIGO

12 CaFco - PS II - EJ-04 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. Optimización de Código

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

14 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.

15 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.

16 CaFco - PS II - EJ-04 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

17 CaFco - PS II - EJ-04 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. ORGANIZACIÓN DEL COMPILADOR OPTIMIZADOR

18 CaFco - PS II - EJ-04 Instrucciones especiales ("idioms") Formas para que se de la optimización 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: MOV AX,B MUL AX,D DIV AX,C MOV A,AX

19 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)

20 CaFco - PS II - EJ-04 Reordenación de operaciones 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: (*,a,b,t1) (+,t1,c,t1) (+,t1,d,t1) necesitaremos sólo una variable auxiliar. Optimización de bucles Regiones Asignaciones muertas

21 CaFco - PS II - EJ-04 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. Transformaciones que preservan la función.

22 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.

23 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+eb:= d+e c:= d+e t:= d+e a:= t t:= d+e b:= t c:= t x:= t3 a[t2]:= t5 a[t4]:= t3 goto B2

24 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.

25 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


Descargar ppt "CaFco - PS II - EJ-04 UNIDAD III GENERACION DE CODIGO CUADRUPLOS NOTACION POLACA OPTIMIZACION DE CODIGO."

Presentaciones similares


Anuncios Google