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

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

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

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

CaFco - PS II - EJ-04

UNIDAD III

GENERACION DE CODIGO

CUADRUPLOS

NOTACION POLACA

OPTIMIZACION DE CODIGO

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

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

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

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

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.

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

CaFco - PS II - EJ-04

Ejemplo:Expresión a:= b*-c + b*-c

asigna

a +

**

b minosu b minosu

c c

Postfija:

a b c menosu * b c menosu * + asigna

Árbol Sintácticoc

asigna

a +

*

b minosu

GDA

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

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

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

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

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

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 b minosu

c c

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

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

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

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

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

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

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

CaFco - PS II - EJ-04

Optimización Peephole

Consiste en obtener un lenguaje

transformado con un número menor de

instrucciones.

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

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.

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

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.

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

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

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

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

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

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

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

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)

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

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

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

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.

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

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.

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

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+ea:= t

t:= d+eb:= t

c:= t

x:= t3

a[t2]:= t5

a[t4]:= t3

goto B2

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

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:=falseIf (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.

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

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