Unidad 3-4 Actividad kl1

8
UNIDAD 3Aplicar las técnicas para la optimización del código intermedio generado Las sentencias de un bloque básico constituyen una unidad sobre la cual se aplican las optimizaciones locales. Estas optimizaciones se pueden dividir en: a) Optimizaciones que no modifican la estructura. Son: 1. Eliminación de sub-expresiones comunes. 2. Eliminación de código muerto. 2. Eliminación de código muerto. 3. Renombrar variables temporales. 4. Intercambio de sentencias independientes adyacentes. b) Transformaciones algebraicas. Son aquellas transformaciones que simplifican expresiones y/o reemplazan operaciones costosas de la máquina por otras menos costosas.

description

automatas

Transcript of Unidad 3-4 Actividad kl1

Page 1: Unidad 3-4 Actividad kl1

UNIDAD 3Aplicar las técnicas para la optimización del código intermedio generado

Las sentencias de un bloque básico constituyen una unidad sobre la cual se aplican las optimizaciones locales. Estas optimizaciones se pueden dividir en:

a) Optimizaciones que no modifican la estructura.

Son:

1. Eliminación de sub-expresiones comunes.

2. Eliminación de código muerto.

2. Eliminación de código muerto.

3. Renombrar variables temporales.

4. Intercambio de sentencias independientes adyacentes.

b) Transformaciones algebraicas.

Son aquellas transformaciones que simplifican expresiones y/o reemplazan operaciones costosas de la máquina por otras menos costosas.

Page 2: Unidad 3-4 Actividad kl1

Código Intermedio

En acción Códigos de tres direccionesCada orden son funciones de dos registros

Solo se puede utilizar tipos básicos, no hay funciones y todo el código se realiza por bloques

La gestión de memoria se realiza en el código

Tendremos que afrontar algunas cuestiones

Gestión de etiquetas para implementar mediante saltos condicionales o incondicionales las estructuras de control (“mientras”).

Tabla de símbolos

Comprobar las reglas sobre declaraciones de identificadores

Asociar, a cada identificador que encontramos en “tiempo de compilación”, la memoria que le corresponderá en “tiempo de ejecución”.

Codigo de Tres Direcciones Uno concreto y sencillísimo para nuestros primeros ejemplos y ejercicios Vamos a simplificar un poco el c´odigo de tres direcciones.

# comentario $p2 :read

# lectura $p2 :write

# escritura $p4 : $p3

# copia $p21 : $p32 + $p13

# operacion, admite +, -, *, / ident:

# etiqueta $p8 : jump ident

# salto condicional: salta si <= 0 Simplificaciones: Todas las variables son “temporales” ( se ordena leer y escribir en memoria sin decir dónde) y equivalentes entre s´ı(todos son n´umeros enteros). (No distinguimos acumulador, ni registros entre s´ı, ni registros de posiciones de memoria; no hay offsets. . . )

Page 3: Unidad 3-4 Actividad kl1

http://ocw.unican.es/ensenanzas-tecnicas/procesadores-de-lenguaje/materiales-de-clase-1/codigo-intermedio.pdf

http://ditec.um.es/~jmgarcia/papers/ensayos.pdf

UNIDad 4

x86 es la denominación genérica dada a ciertos microprocesadores de la familia Intel, sus compatibles y la arquitectura básica a la que estos procesadores pertenecen, por la terminación de sus nombres numéricos: 8086, 80286, 80386, 80486, etc. Son comúnmente conocidos por versiones abreviadas de sus nombres, como 286 ó i286, 386 ó i386, 486 ó i486, e incluso 086, por i8086 o i8088 (su respectiva versión de 8 bits).

A partir del i486, sus sucesores serán conocidos por los nombres no numéricos referentes a la marca, logotipo o nombre clave con los que fueron lanzados al mercado, y se les comercializó (a menudo seguido de su frecuencia, en megahertzios, de ciclos de reloj), como los Pentium (y Pentium MMX), o los K5, para el 80586 (ó i586), en sus respectivas versiones de Intel y AMD; los Pentium Pro, Pentium II, Pentium III y K6, así como los 6x86, de Cyrix, para el 80686 (ó i686); ó los Pentium 4, Pentium D y K7 (Athlon, Athlon XP, Duron y Sempron), para los 80686 de séptima generación. Con la octava generación de procesadores compatibles x86, los x86-64, que utilizan arquitectura y bus de 64 bits, con posibilidad de múltiples núcleos, introducida por AMD y clonada por Intel, se introducen por primera vez nuevas variantes y formas, en lo que a la denominación y clasificación del procesador se refiere, tales como el nombre comercial ó tecnología del modelo, la compañía fabricante, su número de serie, la cantidad de bits a la que puede trabajar o la cantidad de núcleos por los que está compuesto, por ejemplo: Intel Core 2 Duo E2180, o lo que es lo mismo, i686 ó Intel Pentium de doble núcleo E2180, de 64 bits y de 1,6 a 2,0 Ghz; ó AMD Athlon 64 X2, es decir, un AMD 64 bits, Athlon X de doble núcleo a 2 Ghz; todos ellos englobados bajo el denominador común x86-64, y compatibles con subarquitecturas anteriores de 32, 16 y 8 bits, de la familia de procesadores x86 de Intel, y compatibles.

La comercial popularidad de esta arquitectura hizo que muchos fabricantes, además de Intel, empezaran a fabricar en masa microprocesadores basados en esta arquitectura. Estas compañías son entre otras AMD, Cyrix, NEC Corporation y Transmeta.

Page 4: Unidad 3-4 Actividad kl1

La arquitectura es notablemente no limpia, por mantener compatibilidad con la línea de procesadores de 16 bits de Intel, que a su vez también eran compatibles con una familia de procesadores de 8 bits. Existen dos sucesores de 64 bits para esta arquitectura:

IA64, empleada en los procesadores Itanium de Intel y no compatible con X86, excepto bajo emulación.

AMD64 o x86-64, de AMD, que es básicamente una extensión de 64 bits de la familia x86.

Técnicamente, la arquitectura es denominada IA32 (Intel Architecture 32 bits). Está basada en un modelo de arquitectura CISC (del inglés Complex Instruction Set Computing).

Intel Itanium, antes conocida como IA-64 (Intel Architecture-64), es una arquitectura de 64 bits desarrollada por Intel en cooperación con Hewlett-Packard para su línea de procesadores Itanium e Itanium 2. Usa direcciones de memoria de 64 bits y está basada en el modelo EPIC[1] (Explicitly Parallel Instruction Computing, procesamiento de instrucciones explícitamente en paralelo).

Los procesadores Intel Itanium 2 representan el diseño de producto más complejo del mundo con más de 1.700 millones de transistores. Esto permite obtener sólidas capacidades de virtualización, mejorar la confiabilidad y niveles de rendimiento líderes del mercado.

A diferencia de productos de los pocos fabricantes* de procesadores RISC que siguen operando, la serie de procesadores Intel Itanium 2 ofrece libertad al usuario final a través de una amplia gama de opciones de software con más de 8.000 aplicaciones en producción. Los servidores y sistemas de cómputo de alto desempeño basados en el procesador Itanium ofrecen soporte de misión crítica para Windows, Linux, Unix y otros sistemas operativos.

Los últimos pentiums, son en realidad máquinas RISC que emulan a una máquina CISC por temas de retrocompatibilidad.

x86-64 es una arquitectura basada en la extensión del conjunto de instrucciones x86 para manejar direcciones de 64 bits. Además de una simple extensión contempla mejoras adicionales como duplicar el número y el tamaño de los registros de uso general y de instrucciones SSE.

Se trata de una arquitectura desarrollada por AMD e implementada bajo el nombre de AMD64. El primer procesador con soporte para este conjunto de instrucciones fue el Opteron, lanzado en abril de 2003. Posteriormente ha sido implementado en múltiples variantes del Athlon 64 y del Pentium 4 de Intel, en éste último caso bajo una versión de Intel llamada Intel 64 (antes EM64T).

Page 5: Unidad 3-4 Actividad kl1

Descripción de la arquitectura

El conjunto de instrucciones del AMD x86-64 (renombrado posteriormente como AMD64) es una extensión directa de la arquitectura del x86 a una arquitectura de 64 bits, motivado por el hecho de que los 4GB de memoria que son direccionables directamente por una CPU de 32 bits ya no es suficiente para todas las aplicaciones. Algunos de los cambios:

Nuevos registros. El número de registros de propósito general se ha incrementado de 8 en los procesadores x86-32 a 16, y el tamaño de todos estos registros se ha incrementado de 32 bits a 64 bits. Adicionalmente, el número de registros MMX de 128 bits (usados para las instrucciones extendidas SIMD) se ha incrementado de 8 a 16. Los registros adicionales incrementan el rendimiento.

Registros XMM (SSE) adicionales: Igualmente el número de registros de 128 bits (usados para las instrucciones SSE) han aumentado de 8 a 16.

Espacio de direcciones mayor. Debido a la arquitectura de 64 bits, la arquitectura AMD64 puede direccionar hasta 16 exabytes de memoria. Esto, comparado con los 4GB del x86-32, de los que sólo la mitad está disponible para aplicaciones en la mayoría de las versiones de Microsoft Windows, el sistema operativo dominante en entornos domésticos. Las implementaciones futuras de la arquitectura del AMD64 puede proporcionar hasta 2 exabytes de memoria disponible. Si la paginación de memoria se utiliza correctamente, los sistemas operativos de 32 bits podrían tener acceso a algunas de las extensiones de dirección físicas sin tener que realizar la ejecución en modo largo (long). Aunque la memoria virtual de todos los programas en el modo de 32 bits está limitada a 4 GB.

Figura 1.0

Page 7: Unidad 3-4 Actividad kl1