Procesadores Superescalares

Documentos relacionados
Unidad 4 - Procesamiento paralelo. Arquitectura de computadoras. D o c e n t e : E r n e s t o L e a l. E q u i p o : J e s s i c a F i e r r o

6. PROCESADORES SUPERESCALARES Y VLIW

Procesadores superescalares. Introducción

Modelos de Programación Paralela Prof. Gilberto Díaz

Tecnologías, Organización y Microarquitectura

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

1.2.-Analisis de los componentes

CICLOS DEL PROCESADOR

SISTEMAS OPERATIVOS Arquitectura de computadores

Universidad Autónoma del Estado de México Facultad de Medicina

Organización de Computadoras. Clase 7

Procesadores Superescalares: Paralelismo Implícito a Nivel de Instrucción

Sistemas con Microprocesadores I

ARQUITECTURA SPARC: FORMATO DE INSTRUCCIÓN

Memoria. Organización de memorias estáticas.

El nivel ISA (II)! Conjunto de Instrucciones

Tema: Microprocesadores

Introducción a la arquitectura de computadores

Introducción a los procesadores ILP (Instruction-Level Parallel)

Tema 2: Lenguaje máquina. La interfaz entre el hardware y el software

Instituto Tecnológico de Morelia

Qué es un programa informático?

PROGRAMA INSTRUCCIONAL FUNDAMENTO PARA EL DISEÑO DE SISTEMAS CON MICROPROCESADORES

Unidad I: Organización del Computador. Ing. Marglorie Colina

COMPONENTES DEL PC LEONARDO OLIVARES VILLA MATEO CARDONA ARENAS

EVOLUCIÓN DE LOS PROCESADORES

OPTIMIZACIÓN DEL PROCESO DE EJECUCIÓN DE PRUEBAS FUNCIONALES RELATIVAS A LA PRODUCCIÓN AEROESPACIAL.

Concurrencia. Concurrencia

GUÍA DE APRENDIZAJE ARQUITECTURA DE COMPUTADORES

Asignaturas antecedentes y subsecuentes

ASIGNATURA: Arquitectura de Computadores

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Organización lógica Identificación de bloque

2.3 DEFINICIÓN DE LENGUAJES ALGORÍTMICOS

Tema 2. Arquitectura de CPU avanzadas 15/03/2011

Con estas consideraciones, Flynn clasifica los sistemas en cuatro categorías:

Quinta tarea: Existen varias versiones del 80486:

Arquitectura de Computadores II Clase #16

Compiladores: Generación de Código. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón

GLOSARIO DE TÉRMINOS

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Estructuras de control

Herramientas de Programación. M.C. Juan Carlos Olivares Rojas

Arquitectura del CPU. Organización del Computador 1 Verano 2016

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA

FUNCIONAMIENTO DEL ORDENADOR

MICROCONTROLADORES PIC16F84 ING. RAÚL ROJAS REÁTEGUI

Arquitectura de Computadores II Clase #7

Objetivos. Objetivos. Arquitectura de Computadores. R.Mitnik

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 2. Estructura de un Fichero. Operaciones. Básicas.

GESTION DE LA MEMORIA

Sistemas de información Administrativa II

Organización del Computador I. Introducción e Historia

Organización de Computadoras

Introducción PROCESADOR SUPERESCALAR. Paralelismo. Grado m: en cada ciclo se buscan/decodifican m instrucciones. supes

Arquitectura de Computadores II Clase #7

Evolución del software y su situación actual

Area Académica: Sistemas Computacionales. Tema: Elementos de diseño de memoria caché

Tema 4 (II) El procesador

Introducción a los sistemas operativos. Ing Esp Pedro Alberto Arias Quintero

1.1. Modelos de arquitecturas de cómputo: clásicas, segmentadas, de multiprocesamiento.

Tema V Generación de Código

Tema 14: Sistemas Secuenciales

CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES SYLLABUS ARQUITECTURA DE COMPUTADORES

Sistemas Combinacionales y Sistemas Secuenciales

Comprensión de los sistemas de. control. Ing. Jorge Sofrony. Inicio. Obje%vos del Programa. Misión y Visión del programa

Algoritmos y solución de problemas. Fundamentos de Programación Otoño 2008 Mtro. Luis Eduardo Pérez Bernal

Inicio. Cálculos previos GRASP. Resultados. Fin. Figura 5.1: Diagrama de flujo del algoritmo.

Introducción a los Sistemas Operativos

UNIVERSIDAD NACIONAL DE COLOMBIA SEDE BOGOTÁ FACULTAD DE INGENIERÍA INGENIERÍA MECATRÓNICA

Capítulo 1. Sistemas de Asignación Contigua Basados en Particiones

COMPUTADORES VECTORIALES (DLXV)

UNIVERSIDAD NACIONAL HERMILIO VALDIZAN DIRECCION DE EDUCACION A DISTANCIA Y VIRTUAL CENTRO DE ESTUDIOS INFORMATICOS HUANUCO PERU

CAPITULO 1 INTRODUCCION AL PROYECTO

Fecha de Introducción. Velocidad de reloj. Anchura del bus. Número de transistores. (microns) Memoria direccionable.

HISTORIA DEL PIPELINE. Juan Antonio Romano Largo. Arquitectura de Computadores.

Ejercicios del tema 4. El procesador

Memoria Cache. Departamento de Arquitectura de Computadores

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Materia: Introducción a los Sistemas Operativos

Usuario. Programas de Aplicación. Sistema Operativo. Hardware. Figura 1. Sistema de cómputo estructurado por capas.

PROGRAMA: COMPUTACION I

Estructura del Computador

Los valores obtenidos de speedup tienden a incrementarse hasta los ocho procesadores. al usar diez procesadores éste se mantiene igual o decrece. Esto

UNIVERSIDAD DE GUADALAJARA

Introducción a la Tecnología de la Información y la Comunicación (TIC's)

Partes de una computadora. Conceptos Generales. Elementos de Computación (CU) Computación (TIG) El Hardware de una computadora

Organización del Computador 1 Memoria Cache

Ejemplo, generación de #s aleatorios

Universidad Centroccidental Lisandro Alvarado. Decanato de Ciencias y Tecnología Departamento de Sistemas

UNIVERSIDAD DEL CARIBE UNICARIBE. Escuela de Informática. Programa de Asignatura

Velocidades Típicas de transferencia en Dispositivos I/O

Escuela Politécnica Superior de Jaén

Manipulación de procesos

Contenidos. Arquitectura de ordenadores (fundamentos teóricos) Elementos de un ordenador. Periféricos

M. C. Felipe Santiago Espinosa

Microprocesadores. Informática Aplicada DSI-EIE FCEIA

ESTRUCTURAS DE CONTROL

Transcripción:

Universidad de Concepción Facultad de Ingeniería Departamento de Ingeniería Informática y Ciencias de Computación Programa de Magíster en Ciencias de la Computación Tarea 3 Procesadores Superescalares Arquitectura y Organización de Sistemas de Computación I-2002 Nombre: Johana Pérez M. Profesor: Yussef Farrán L. Fecha: 4 de Junio de 2002

Sumario En el presente informe se hace referencia a los procesadores superescalares. La arquitectura de estos procesadores es una implementación en la que las instrucciones pueden iniciar su ejecución simultánea y además ejecutarse independientemente. Para desarrollar este documento, y abordar los aspectos generales de la implementación superescalar de procesadores, se realiza un contraste de esta implementación con la supersegmentación, técnica antes estudiada. El diseño de los procesadores escalares debe ser tratado en forma muy cuidadosa, con el fin de evitar algunos tipos de conflictos, tanto de datos como de instrucciones, que se producen al existir dependencias o secuencialidades entre dos o más instrucciones que se ejecuten. Por otra parte, es necesario mencionar que el diseño superescalar se relaciona en forma directa con la arquitectura RISC. Pese, a que el conjunto de instrucciones reducido que presenta una máquina RISC, permite que el uso de técnicas superescalares se realice muy fácilmente, no es exclusivo el uso de estas técnicas a sólo este tipo de arquitectura, pues también es posible implementarlas en arquitecturas CISC. Finalmente, para complementar el estudio se analiza la implementación de procesamiento superescalar en el procesador Pentium, al cual se han agregado algunas mejoras que intentan reducir el impacto de los conflictos que se podrían producir. Como último comentario, es posible indicar que el procesamiento superescalar es la última (más actual) de una serie de innovaciones tendientes a producir procesadores cada vez más rápidos, disminuyendo cada vez más el tiempo de procesamiento y el de respuesta.

Índice de Contenidos CAPÍTULO 1: INTRODUCCIÓN...2 CAPÍTULO 2: ASPECTOS GENERALES...4 2.1.- Procesador superescalar vs. Procesador supersegmentado...4 2.2.- Restricciones...6 2.2.1.- Dependencia verdadera de datos...6 2.2.2.- Dependencia relativa al procedimiento...6 2.2.3.- Conflicto en los recursos...7 2.2.4.- Dependencia de salida...7 2.2.5.- Antidependencia...7 CAPÍTULO 3: DISEÑO DEL PROCESADOR SUPERESCALAR...8 3.1.- Paralelismo...8 3.1.1.- Paralelismo a nivel de instrucciones...8 3.1.2.- Paralelismo a nivel de máquina...9 3.2.- Políticas de emisión de instrucciones...9 3.3.- Renombramiento de registros...12 CAPÍTULO 4: ALGUNOS EJEMPLOS...14 4.1.- Procesadores Pentium...14 4.1.1.- Mejoras en arquitecturas superescalares...15 4.1.2.- Rendimiento...15 CAPÍTULO 5: CONCLUSIONES Y COMENTARIOS FINALES...16 CAPÍTULO 5: REFERENCIAS BIBLIOGRÁFICAS...17

Índice de Figuras Figura 2.1 Comparación procesador superescalar y supersegmentado...5 Figura 2.2 Dependencia de datos verdadera...6 Figura 2.3 Dependencia de salida...7 Figura 2.4 Antidependencia...7 Figura 3.1 Ejemplo de paralelismo a nivel de instrucciones...8 Figura 3.2 Emisión en orden y finalización en orden...10 Figura 3.3 Emisión en orden y finalización desordenada...11 Figura 3.4 Emisión desordenada y finalización desordenada...12 Figura 3.5 Uso de Renombramiento de registros...13 Acrónimos RISC Reduced Instruction set Computer Conjunto reducido de instrucciones de computador CISC Complex Instruction Set Computer Conjunto complejo de instrucciones de computador CPU Central Process Unit Unidad Central de Proceso PC Program Counter Contador de Programas SO -------- Sistema Operativo

Capítulo 1: Introducción El presente trabajo se enmarca en el desarrollo de temas de la asignatura Arquitectura y Organización de Sistemas de Computación, perteneciente al curso de Postgrado para Ingeniería Civil Informática dictado en la Universidad de Concepción. Trata el tema de, el cual será abordado con el fin de cumplir con los objetivos presentados a continuación. Objetivo: Definir y caracterizar qué es y para qué se utilizan los procesadores superescalares Objetivos específicos:!"caracterizar el procesador superescalar.!"estudiar las restricciones de uso o diseño que el procesador superescalar presenta!"abordar temas de diseño de los procesadores superescalares La elaboración del informe se realizó siguiendo la pauta del libro indicado por el profesor: Arquitectura y Organización de Computadores, de William Stallings. Para completar los temas se utilizó información presentada en páginas Web y en algunos informes técnicos, los cuales se indican en el Capítulo 5: Referencias Bibliográficas de este informe. Como primera aproximación al tema de investigación, es posible indicar que una implementación superescalar de la arquitectura de un procesador es una implementación en la que las instrucciones comunes pueden iniciar su ejecución en forma simultánea e independiente. La tecnología ha avanzado a pasos agigantados, y así como ha ido avanzando se han desarrollado nuevas formas para incrementar la velocidad de ejecución de las instrucciones y de esta forma aumentar el nivel de prestaciones. Junto con este crecimiento de la informática, las necesidades de los usuarios aumentan y es imprescindible contar con procesadores que respondan en forma rápida y correcta a las peticiones que ellos presentan. Es así como han surgido los Supercomputadores, entre los cuales es posible distinguir distintos tipos de procesadores: Los procesadores vectoriales, que operan con un subconjunto de elementos de un vector con una única instrucción, mientras que los procesadores escalares han de manipularlos elemento a elemento y, por lo tanto, deberán ejecutar una misma instrucción de manera iterativa para conseguir el mismo resultado que una única instrucción vectorial. 2

Los procesadores superescalares pueden iniciar la ejecución simultánea de varias instrucciones escalares en paralelo de forma que pueden operar varios elementos de un vector dentro de una misma iteración. Con respecto a la organización de memoria que presentan estos procesadores, es posible indicar que si la memoria está compartida entre todos los procesadores, la programación es mucho más sencilla, ya que los datos se pueden colocar en cualquier módulo de la memoria y su acceso es uniforme para todos los procesadores. De otra forma, si cada procesador tiene acceso a su propia memoria, entonces la programación es más compleja, pero tiene la ventaja de su escalabilidad, con lo que el sistema puede crecer hasta un mayor número de procesadores. Esta forma de memoria única para cada procesador, es ideal para máquinas paralelas. Por último, la memoria distribuida compartida combina las ventajas de ambas organizaciones, la memoria está físicamente distribuida y. por lo tanto, el sistema es escalable, pero se accede con un espacio único de direcciones y es fácilmente programable. En este informe se intentará caracterizar los procesadores superescalares, comenzando con una visión general del concepto superescalar, comparándolo o contrastándolo con el concepto de supersegmentación. Luego, con el desarrollo del informe es posible acercarse a temas de diseño de estos procesadores, abordando las limitaciones o restricciones asociadas a la implementación superescalar. Los temas se han divido principalmente en dos partes: Aspectos Generales y Conceptos de Diseño del Procesador Superescalar. Finalmente, se presentan las conclusiones generadas una vez finalizada la investigación, junto a algunos comentarios al respecto. 3

Capítulo 2: Aspectos Generales Para comenzar a caracterizar y definir qué es y qué usos tiene un procesador superescalar, es necesario contar cómo nace el término superescalar y definir el entorno en el cual se aplica. El término superescalar, nace en 1987, y se refiere a una máquina diseñada para mejorar la velocidad de ejecución de las instrucciones escalares 1. El objetivo de aumentar la velocidad de procesamiento, es más o menos contradictoria si se piensa en el uso del procesamiento vectorial, el cual es otra forma de acelerar la ejecución de instrucciones. La idea general de los procesadores superescalares, es ser procesadores de uso general en prestaciones altas. El asegurar que el uso de máquinas del tipo superescalar aumenta la velocidad de procesamiento no es antojadizo, muchos investigadores, han realizado diferentes pruebas, y han llegado a la conclusión que la velocidad de procesamiento puede sufrir un incremento en el rango de 1,5 a 8 veces. Las diferencias en los resultados obtenidos dependen del hardware utilizado y de la aplicación elegida para realizar el experimento. 2.1.- Procesador superescalar vs. Procesador supersegmentado Otra forma de aumentar las prestaciones de una máquina es la supersegmentación, término que nació en 1988. Este método aprovecha el hecho de que muchas etapas del ciclo de instrucción realizan tarea que requieren menos de la mitad de un ciclo de reloj, teniendo como base esta idea, se dobla la velocidad de reloj interna, con lo cual es posible realizar dos tareas en un ciclo de reloj externo. En al figura siguiente se comparan ambas soluciones, en la primera parte del diagrama se presenta una ejecución normal de instrucciones con cuatro etapas: Captación de instrucción Decodificación de la operación Ejecución de la operación Escritura del resultado Luego, se presenta la implementación supersegmentada, en la cual es posible ejecutar dos etapas del cauce por ciclo de reloj. Esta forma de implementación es denominada de grado 2, pues, las funciones realizadas en cada etapa se dividen en dos y cada una de ellas se realiza en medio ciclo de reloj. Por último, se presenta la implementación superescalar, en al cual es posible ejecutar dos instrucciones en paralelo. 1 Escalar hace referencia a la operación de cantidades individuales 4

Ambas implementaciones (supersegmentada y superescalar) ejecutan el mismo número de instrucciones en el mismo tiempo en forma ininterrumpida. Pero el procesador supersegmentado se retrasa al comienzo del programa y al ejecutar un salto- Clave Captación de Instrucción Decodificación Ejecución Escritura Máquina Base Instrucciones consecutivas Supersegmentada Superescalar 0 1 2 3 4 5 6 7 8 9 Tiempos en ciclos base Figura 2.1 Comparación procesador superescalar y supersegmentado 5

2.2.- Restricciones Se ha visto que la aproximación superescalar depende de la habilidad para ejecutar múltiples instrucciones en forma paralela. Existen algunas limitaciones fundamentales del paralelismo a las cuales el sistema tiene que enfrentarse a las siguientes limitaciones: 2.2.1.- Dependencia verdadera de datos También llamada dependencia de flujo o dependencia escritura-lectura. Se produce cuando una instrucción necesita un dato producido por una instrucción que la precede. Ver ejemplo 2.2. add r1, r2 ; carrgar el registro r1 con el contenido de r2 más el contenido de move r3, r1 ; cargar el registro r3 con el contendio de r1 Figura 2.2 Dependencia de datos verdadera Si no hay dependencias, se pueden captar y ejecutar dos instrucciones en paralelo. Si existe dependencia de datos entre un par de instrucciones, se retrasa la segunda instrucción tantos ciclos de reloj como sea necesario para eliminar la dependencia. 2.2.2.- Dependencia relativa al procedimiento Ya se ha visto que la presencia de bifurcaciones en una secuencia de instrucciones complican el funcionamiento del cauce. Las instrucciones que siguen a una bifurcación (se pueden saltar o no)tienen una dependencia relativa al procedimiento en la bifurcación y no se pueden ejecutar hasta que se ejecute la bifurcación. La mala elección a la hora de decidir qué hacer frente a una bifurcación, en un procesador superescalar tiene consecuencias más graves, pues las oportunidades de comenzar a ejecutar nuevas instrucciones en cada ciclo son mayores. El uso de instrucciones de longitud variable, genera otro tipo de dependencia relativa al procedimiento. Al no conocer la longitud, ésta debe ser decodificada parcialmente antes de captar la siguiente, y de esta forma se está impidiendo la captación simultánea para un cauce superescalar. Por esta razón, las técnicas de procesamiento superescalar se utilizan en arquitecturas RISC, las cuales presentan una longitud de instrucción fija. 6

2.2.3.- Conflicto en los recursos Un conflicto en un recurso es una competencia de dos o más instrucciones por el mismo recurso o unidad funcional (memoria, caches, buses, etc.) al mismo tiempo. Desde el punto de vista del cauce, un conflicto por recursos presenta el mismo comportamiento que la dependencia de datos, sin embargo existen algunas diferencias, las cuales se enumeran a continuación: Los conflictos en los recursos pueden superarse duplicando éstos Cuando una operación tarda más del tiempo considerado normal, los conflictos de recursos se pueden minimizar segmentando la unidad funcional correspondiente. 2.2.4.- Dependencia de salida También llamada dependencia lectura-escritura. El ejemplo de la figura 2.3 ilustra esta dependencia. La instrucción I3 si se ejecuta antes del final de, se captará un valor incorrecto de R3 para la ejecución de, por lo tanto I3 debe terminar después de. Para asegurar esto, la emisión de la tercera instrucción debe detenerse si su resultado puede ser sobrescrito más tarde por una instrucción anterior que tarda más en finalizar. R3 := R3 op R5 R4 := R3 +1 R3 := R5 +1 R7 := R3 op R4 () (I2) (I3) () Figura 2.3 Dependencia de salida 2.2.5.- Antidependencia También llamada lectura-escritura. El ejemplo de la figura 2.4 ilustra esta dependencia. La instrucción I3 no puede finalizar antes de que la instrucción I2 comience a ejecutarse y haya captado sus operandos, esto, porque I3 actualiza el registro R3, que es operando fuente de I2. R3 := R3 op R5 R4 := R3 +1 R3 := R5 +1 R7 := R3 op R4 () (I2) (I3) () Figura 2.4 Antidependencia El término antidependencia es utilizado porque la restricción es similar a al de la dependencia verdadera pero a al inversa. (la segunda instrucción destruye un valor que usa la primera instrucción) 7

Capítulo 3: Diseño del procesador superescalar 3.1.- Paralelismo El concepto de paralelismo toma gran importancia en el desarrollo de soluciones que incrementen la velocidad de procesamiento de una máquina determinada. Particularmente, al diseñar un procesador superescalar, será necesario manejar este concepto y evitar los conflictos que podrían surgir al ejecutar instrucciones en forma paralela cuando realmente deberían ser ejecutadas en forma secuencial. Se define dos conceptos relacionados con el paralelismo: el paralelismo a nivel de instrucciones y el paralelismo a nivel de máquina. 3.1.1.- Paralelismo a nivel de instrucciones Se dice que existe paralelismo a nivel de instrucciones cuando las instrucciones de una secuencia son independientes y por lo tanto pueden ejecutarse en forma paralela solapándose. En el ejemplo de la figura 3.1, se muestran dos secuencias de instrucciones, una que permite ejecución solapada de instrucciones y otra que no, pues, en este último caso, el registro 3 (R3) debe ser actualizado primero (sumándole 1) antes de sumarle el contenido del registro 2 (R2) y almacenarlo en el registro 4 (R4). Load R1 R2(23) Add R3 R3, "1" Add R4 R4,R0 Add R3 R3, "1" Add R4 R3, R2 Store[R4] R0 paralelismo =3 Es posible ejecutar las instrucciones en forma paralela paralelismo =1 Las instruccione son dependientes entre elllas Figura 3.1 Ejemplo de paralelismo a nivel de instrucciones El paralelismo a nivel de instrucciones es función de la frecuencia de dependencias de datos verdaderas y relativas al procedimiento que haya en el código. Depende también, de la arquitectura del set de instrucciones, de la aplicación, y a la llamada espera de una operación, lo cual corresponde al tiempo que pasa hasta que el resultado de una instrucción esté disponible para ser usado como operando por otra instrucción posterior. 8

3.1.2.- Paralelismo a nivel de máquina Este concepto es un índice de la capacidad del procesador para sacar partido al paralelismo a nivel de instrucciones. Depende de factores como: Número de instrucciones que pueden captarse y ejecutarse al mismo tiempo Velocidad y sofisticación del mecanismo del procesador para lograr instrucciones independientes Tanto el paralelismo a nivel de máquina como el paralelismo a nivel de instrucciones son factores importantes a la hora de aumentar las prestaciones. Es importante, tener en cuenta que si se emplea una arquitectura RISC, aumentará el paralelismo a nivel de instrucciones (esto, porque las instrucciones son de longitud fija). Además, ambos conceptos están muy relacionados con el nivel de prestaciones del sistema, es así como, si existe un escaso paralelismo de máquina, las prestaciones se verán limitadas, sin importar la naturaleza del programa. 3.2.- Políticas de emisión de instrucciones El procesador debe ser capaz de identificar el paralelismo a nivel de instrucciones y organizar la captación, decodificación y ejecución de las instrucciones en paralelo. Algunos autores, utilizan el término emisión de instrucciones, para hacer referencia al inicio de ejecución de instrucciones en las unidades funcionales del procesador, de ahí, surge el término política de emisión de instrucciones, el cual hace referencia al protocolo utilizado para emitir las instrucciones. El procesador intenta buscar instrucciones que puedan ser agregadas al cauce y luego ser ejecutadas. Para encontrar y elegir qué nueva instrucción es incorporada al cauce existen básicamente tres formas de ordenamiento: Orden para captar instrucciones Orden para ejecutar instrucciones Orden en el que las instrucciones alteran los registros y las posiciones de memoria. A diferencia de otros métodos utilizados para incrementar la velocidad de procesamiento, en este caso la única restricción que tiene el procesador es que el resultado sea correcto. Por lo tanto, la única preocupación del procesador deberá ser acomodar las dependencias y conflictos que se puedan presentar entre los datos y las instrucciones. 9

Es importante destacar, que mientras más sofisticado sea el procesador, menos limitado se encontrará por la relación entre los tres tipos de orden vistos antes. Para un procesador superescalar, las políticas de emisión de instrucciones, se pueden dividir en: Emisión en orden y finalización en orden: pese a ser muy básica, pues muy pocos procesadores (ni siquiera los superescalares) utilizan esta política. La idea central es ejecutar las instrucciones en el orden en que se captan y decodifican. Además, la emisión de instrucciones se detiene cuando hay una disputa por alguna unidad funcional, o cuando se requiere más de un ciclo para generar un resultado. Ver el ejemplo de la figura 3.2, par el cual existen las siguientes restricciones: o necesita dos ciclos para ejecutarse o I3 e compiten por la misma unidad funcional o I5 depende de un valor generado por o I5 e compiten por unidad funcional. Decodificación Ejecución Escritura Ciclo I2 1 I3 I2 2 I3 3 I3 12 4 I5 5 I5 I3 6 7 I5 8 Figura 3.2 Emisión en orden y finalización en orden Emisión en orden y finalización desordenada: utilizada en los procesadores RISC escalares para mejorar la velocidad de las instrucciones que necesitan muchos ciclos. Utilizando esta política, es posible tener cualquier número de instrucciones en al etapa de ejecución en un momento dado, la única restricción para esto es el grado máximo de paralelismo de la máquina. Al igual que en el caso anterior, la emisión de instrucciones se detiene cuando existe una dependencia de datos, o relativa al procedimiento, y cuando hay una pugna por alguna unidad funcional. 10

Si se observa el ejemplo 3.3, es posible observar que se ahorra un ciclo de ejecución, pues, I2 puede terminar antes que I2 finalice su ejecución, y de esta forma I3 se adelanta (las restricciones son las mencionadas en el punto anterior) Decodificación Ejecución Escritura Ciclo I2 1 I3 I2 2 I3 I2 3 I5 I3 4 I5 5 I5 6 Figura 3.3 Emisión en orden y finalización desordenada 7 Emisión desordenada y finalización desordenada: con la emisión en orden el procesador sólo decodificará instrucciones hasta encontrar un conflicto o una dependencia, por lo tanto no está permitido buscar instrucciones que pueden ser independientes a las que se encuentran en el cauce hasta que el conflicto se solucione. Para utilizar esta política es necesario desacoplar las etapas del cauce de decodificación y de ejecución, lo cual se hace con un buffer llamado ventana de instrucciones. Al decodificar una instrucción, ésta se pasa a la ventana de instrucciones, mientras el buffer no esté llene es posible seguir captando y decodificando. Cualquier instrucción puede ser emitida siempre que:!"necesite una unidad funcional que no esté ocupada!"no esté bloqueada por conflicto o dependencia Lo que ocurre, es que el procesador tiene la capacidad de anticiparse, de esta forma identifica las instrucciones que son independientes y pueden ser introducidas al cauce. Notar, que la ventana de instrucciones, no es una etapa adicional del cauce, por lo cual no aumenta el esfuerzo. Esta política está sujeta a las mismas restricciones que las políticas anteriores. Lo que ocurre ahora, es que al existir más instrucciones dispuestas a ser emitidas, hay menos posibilidad de detener una etapa del cauce. En el ejemplo de la figura 3.4, se ilustra esta política, en el cuarto ciclo es posible emitir antes de I5, de esta forma se produce un ahorro en las etapas de ejecución y de escritura. 11

Decodificación Ventana Ejecución Escritura Ciclo I2 1 I3,I2 I2 2 I5 I3, I3 I2 3,I5, I3 4 I5 I5 5 I5 6 Figura 3.4 Emisión desordenada y finalización desordenada 3.3.- Renombramiento de registros El uso de emisión desordenada y/o finalización desordenada puede dar origen a dependencias de salida y antidependencias, las cuales surgen porque los valores de los registros, no pueden reflejar ya la secuencia de valores dictada por el flujo del programa. Al usar algún tipo de desordenación, los valores de los registros no pueden conocerse completamente en cada instante considerando sólo la secuencia de instrucciones dictada por el programa. Así, los valores entran en conflicto por el uso de los registros, y el procesador debe solucionar estos conflictos deteniendo alguna etapa del cauce. Cuando varias instrucciones compiten por el uso de los mismos registros, se generan restricciones en el cauce, lo cual retarda las respuestas entregadas por el sistema, al suceder esto el sistema está enfrentando un conflicto de almacenamiento. Para solucionar este conflicto se utiliza la solución más básica: duplicación de los recursos que causan el conflicto, en este caso los registros. La técnica en cuestión se conoce como renombramiento de registros. Básicamente la asignación dinámica de registros asociados con los valores que necesitan las instrucciones, está a cargo del hardware. Se asigna un nuevo registro cada vez que se crea un nuevo valor de registro, las instrucciones que siguen y que accedan al valor del nuevo registro como operando fuente deben ser renombradas, es decir, las referencias a registros de esas instrucciones deben revisarse para referenciar el registro que tiene el valor que se necesita, así, las referencias a un mismo registro original con diferentes instrucciones podrá ser referenciada a distintos registros reales. 12

La figura 3.5. ilustra el uso de renombramiento de registros. Observar que, las referencias a un registro sin el subíndice corresponden a una referencia a un registro lógico, en cambio, la referencia a un registro con el subíndice, corresponde a un registro hardware asignado para contener un nuevo valor. La creación del registro R3c en la instrucción I3 evita la antidependencia de la segunda instrucción y la dependencia de salida de la primera instrucción, no impidiendo que acceda a un valor correcto. I3, entonces, puede emitirse inmediatamente. Si no se usara renombramiento I3 sólo podría emitirse hasta que la primera instrucción haya finalizado y la segunda haya sido ya emitida. R3b := R3a op R5a R4b := R3b +1 R3c := R5a +1 R7b := R3c op R4b () (I2) (I3) () Figura 3.5 Uso de Renombramiento de registros Recordar que, cuando se hace una nueva asignación para un registro lógico, se hace que las referencias de instrucciones posteriores a ese registro lógico como operando fuente se refieran al registro hardware asignado en forma más reciente en términos de la secuencia de instrucciones del programa. 13

Capítulo 4: Algunos ejemplos 4.1.- Procesadores Pentium Los procesadores Pentium ofrecen un juego de instrucciones CISC, pero internamente están diseñados como procesadores RISC. Cada instrucción CISC del juego x86 antiguo se descompone en una o varias RISC. Este proceso de conversión sólo ocupa el 3% del circuito que se dedica a microprogramas. El procesador Pentium tiene dos unidades de ejecución de enteros (U y V), y una de punto flotante. Presenta encadenamiento (o pipeline) de cinco etapas para los enteros y de ocho etapas para los números de punto flotante. Para realizar una operación de punto flotante, se aprovechan las 4 primeras etapas de la primera unidad de enteros, y la unidad de punto flotante toma el control para las 4 últimas etapas. Para saber si las instrucciones pueden ser ejecutadas de forma paralela, el procesador sigue un sencillo algoritmo, por ejemplo: para ejecutar las instrucciones e I2 el algoritmo sería como se indica a continuación: IF es simple AND I2 también simple AND no es salto AND destino de no es fuente de I2 AND destino de no es destino de I2 THEN envía a U envía I2 a V ELSE envía a U, para I2 (será evaluada con I3) Si se utiliza un compilador que conoce este modo de funcionamiento, la velocidad de procesamiento mejora hasta un 30%. 14

Una de las técnicas más importantes del procesamiento paralelo superescalar es la "ejecución especulativa", que es la que permite ejecutar una instrucción sin que el procesador este del todo seguro que deba ser ejecutada. Esta técnica esta pensada para evitar detenciones en el flujo de ejecución debidas a las instrucciones de salto. Otra aplicación de esta idea, aun teórica, es la especulación sobre los valores de los datos. Es una idea curiosa: se trata de calcular resultados sobre valores predecidos y no calculados previamente. Entonces, la instrucción que se arriesga a usar estos valores predecidos (que pueden o no ser correctos) se ejecuta especulativamente, "superespeculativamente" 4.1.1.- Mejoras en arquitecturas superescalares Existen mejoras en las arquitecturas superescalares, que intentan reducir el impacto de los conflictos de datos, analizados en los capítulos anteriores, en el rendimiento. A continuación se mencionan dos de estas mejoras: Out of order execution: Es decir, ejecución desordenada. Para comprender este concepto, conviene suponer un conflicto de datos entre las instrucciones i y j consecutivas. El procesador retarda sólo j y las instrucciones que dependen de ella, pero no otras instrucciones independientes que vayan detrás de i. Esto implica mayor complejidad, pero también mayor ancho de banda de ejecución. Los procesadores Pentium Pro y el HP8000 usan esta técnica. Registros en la sombra: También llamados Shadow Registers o Dynamic Register Renaming. Esta técnica consiste en eliminar las dependencias de orden o de salida teniendo varios juegos de registros, uno por unidad de ejecución. 4.1.2.- Rendimiento Los procesadores superescalares, como el Alpha 21264, el Sillicon Graphics MIPS/R10000, el PowerPC 604 y el Pentium Pro ejecutan hasta 4 instrucciones simultáneas. Pero, el indicador 1/IPC 2 es menor de lo esperado en programas reales, debido a conflictos que no se pueden solucionar. El IPC ideal en estos procesadores sería de 4, pero en la práctica sólo se alcanza entre 0,5 y 1,5. Estos valores disminuyen a medida que aumenta el número de unidades replicadas. 2 Instrucciones Por Ciclo 15

Capítulo 5: Conclusiones y comentarios finales La tecnología ha avanzado a pasos agigantados, y así como ha ido avanzando se han desarrollado nuevas formas para incrementar la velocidad de ejecución de las instrucciones y de esta forma aumentar el nivel de prestaciones, de ahí que surjan nuevas técnicas para aumentar las prestaciones de los computadores. El procesamiento superescalar es la última de una serie de innovaciones tendientes a producir procesadores cada vez más rápidos. La idea básica de este tipo de procesadores es explotar al máximo el paralelismo a nivel de instrucciones, tanto así que algunos procesadores superescalares son capaces de ejecutar más de una instrucción por ciclo de reloj (dos, tres, cuatro, y ocho). Con respecto a la implementación de las técnicas superescalares, es posible mencionar que el conjunto de instrucciones reducido que presenta una máquina RISC, permite que el uso de estas técnicas se realice muy fácilmente, de todos modos, estas técnicas no es exclusivo el uso de estas técnicas a sólo este tipo de arquitectura, pues también es posible implementarlas en arquitecturas CISC. Los procesadores superescalares pueden iniciar la ejecución simultánea de varias instrucciones escalares en paralelo de manera que se pueden operar varios elementos de un vector dentro de una misma iteración. Para esto, es necesario que existan varias unidades aritmético-lógicas, de punto flotante y de control las cuales contribuyen a al ejecución de las instrucciones y operaciones en forma paralela. Por otra parte, no basta con ejecutar un mayor número de instrucciones en paralelo para lograr un procesador más rápido, se debe tener mucho cuidado al diseñar este tipo de procesadores, pues existen una serie de problemas o conflictos tanto de datos como de instrucciones, los cuales, al no ser tratados en forma adecuada pueden actuar en desmedro de la mejora de rendimiento, que se busca con la aplicación de este tipo de técnica. 16

Capítulo 5: Referencias bibliográficas Libros Stallings, William Arquitectura y Organización de Computadores 2º Edición. Madrid. España. Prentice Hall, 1998 URLs Superordenadores. Alberto Visto http://www.encomix.es/~fisico/pc-html Técnicas Superespeculativas en procesadores superescalares Dra. Patricia Borensztejn http://dc.uba.ar/people/charlasdc/charlas/charla01/charla01.html http://www.angelfire.com/ca6/germancho/superescalar.html 17