Procesadores Superescalares

Anuncio
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
CISC
CPU
PC
SO
Reduced Instruction set Computer
Complex Instruction Set Computer
Central Process Unit
Program Counter
--------
Conjunto reducido de instrucciones de computador
Conjunto complejo de instrucciones de computador
Unidad Central de Proceso
Contador de Programas
Sistema Operativo
Johana Pérez Muñoz
Procesadores Superescalares
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 Procesadores Superescalares, 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
Johana Pérez Muñoz
•
Procesadores Superescalares
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
Johana Pérez Muñoz
Procesadores Superescalares
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 escalares1. 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
Johana Pérez Muñoz
Procesadores Superescalares
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 saltoClave
Captación de
Instrucción
Decodificación
Ejecución
Escritura
Instrucciones consecutivas
Máquina Base
Supersegmentada
Superescalar
0
1
2
3
4
5
6
7
8
Tiempos en ciclos base
Figura 2.1 Comparación procesador superescalar y supersegmentado
5
9
Johana Pérez Muñoz
Procesadores Superescalares
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
Johana Pérez Muñoz
Procesadores Superescalares
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 I1, se captará un valor
incorrecto de R3 para la ejecución de I4, por lo tanto I3 debe terminar después de I1. 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
R4
R3
R7
:=
:=
:=
:=
R3 op R5
R3 +1
R5 +1
R3 op R4
(I1)
(I2)
(I3)
(I4)
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
R4
R3
R7
:=
:=
:=
:=
R3 op R5
R3 +1
R5 +1
R3 op R4
(I1)
(I2)
(I3)
(I4)
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
Johana Pérez Muñoz
Procesadores Superescalares
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
Add R3
Add R4
R2(23)
R3, "1"
R4,R0
Add R3
Add R4
Store[R4]
paralelismo =3
Es posible ejecutar las instrucciones
en forma paralela
R3, "1"
R3, R2
R0
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
Johana Pérez Muñoz
Procesadores Superescalares
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
Johana Pérez Muñoz
Procesadores Superescalares
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
o
o
o
I1 necesita dos ciclos para ejecutarse
I3 e I4 compiten por la misma unidad funcional
I5 depende de un valor generado por I4
I5 e I6 compiten por unidad funcional.
Decodificación
Ejecución
I1
I2
I3
I4
I1
I3
I4
I1
I5
Escritura
1
I2
2
3
I4
I3
I6
I4
I6
Ciclo
I1
12
4
5
I5
I3
I4
I6
6
7
I5
I6
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
Johana Pérez Muñoz
Procesadores Superescalares
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
I1
I2
I3
I4
I1
I4
I1
I5
Ciclo
1
I2
I6
I6
Escritura
2
I3
I2
I4
I1
3
I3
4
I5
I4
5
I6
I5
6
I6
7
Figura 3.3 Emisión en orden y finalización desordenada
•
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
I6 antes de I5, de esta forma se produce un ahorro en las etapas de ejecución y de
escritura.
11
Johana Pérez Muñoz
Procesadores Superescalares
Decodificación Ventana
Ejecución
I1
I2
I3
I4
I1,I2
I1
I5
I6
I3,I4
I1
Escritura
Ciclo
1
I4,I5,I6
I5
I2
2
I6
I5
I3
I2
3
I4
I1
I3
4
I4
I6
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
Johana Pérez Muñoz
Procesadores Superescalares
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 I4 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
R4b
R3c
R7b
:=
:=
:=
:=
R3 a op R5 a
R3 b +1
R5 a +1
R3 c op R4 b
(I1)
(I2)
(I3)
(I4)
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
Johana Pérez Muñoz
Procesadores Superescalares
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 I1 e I2
el algoritmo sería como se indica a continuación:
IF I1 es simple
AND I2 también simple
AND I1 no es salto
AND destino de I1 no es fuente de I2
AND destino de I1 no es destino de I2
THEN
envía I1 a U
envía I2 a V
ELSE
envía I1 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
Johana Pérez Muñoz
Procesadores Superescalares
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
Johana Pérez Muñoz
Procesadores Superescalares
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
Johana Pérez Muñoz
Procesadores Superescalares
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
Procesadores Superescalares
http://www.angelfire.com/ca6/germancho/superescalar.html
17
Descargar