Está en la página 1de 10

SISTEMAS ELECTRNICOS PARA EL

TRATAMIENTO DE LA INFORMACIN

Tema 8

Procesadores Superescalares:
Paralelismo Explcito a Nivel de Instruccin


IA-64 es una arquitectura de 64 bits desarrollada conjuntamente por Intel y HP (HewlettPackard). Est basado en una tecnologa denominada EPIC (Explicitally Parallel Instruction
Computing, procesamiento de instrucciones explcitamente paralelas), que abarca los siguientes
conceptos bsicos:

- Paralelismo explcito a nivel de instrucciones (explcito en las instrucciones mquina en
lugar de ser identificado por el procesador en tiempo de ejecucin).
- Palabras de instruccin muy grandes (VLIW).
- Ejecucin de saltos basada en predicados.
- Carga especulativa.

En este tema utilizaremos la arquitectura del IA-64 para recorrer diversos aspectos
organizativos de la arquitectura de los procesadores superescalares explcitamente paralelos.

8.1 Introduccin a la arquitectura del IA-64


A continuacin resumimos las diferencias principales entre una arquitectura superescalar y la


arquitectura IA-64:

- En la implementacin superescalar cada instruccin es una palabra. En la IA-64 se
tienen instrucciones VLIW formadas por paquetes de 3 instrucciones de tipo RISC.
- Ambas implementaciones trabajan con mltiples unidades funcionales, si bien en la
arquitectura IA-64 suelen ser ms numerosas.
- La implementacin superescalar utiliza prediccin de saltos con ejecucin especulativa
de un camino, mientras que la IA-64 utiliza la ejecucin especulativa de los dos
caminos de una bifurcacin.
- En la implementacin superescalar se realiza el anlisis del paralelismo, reordenacin y
optimizacin del flujo de instrucciones en tiempo de ejecucin, mientras que la IA-64 lo
hace en tiempo de compilacin.

JUAN F. GUERRERO MARTNEZ

8. 1

JOS V. FRANCS VILLORA


Curso 2010-2011

SISTEMAS ELECTRNICOS PARA EL


TRATAMIENTO DE LA INFORMACIN
- En la implementacin superescalar se realiza la carga de un dato desde memoria slo
cuando es necesario, mientras que en la IA-64 se pueden cargar datos
especulativamente.

Cabe remarcar la diferencia fundamental entre ambas aproximaciones: si bien un
procesador superescalar analiza el paralelismo en tiempo de ejecucin, la arquitectura IA-64
traslada todo ese trabajo al compilador, que lo hace en tiempo de compilacin.

Una desventaja del paralelismo explcito es que la programacin en ensamblador es casi
imposible.
El primer producto de esta arquitectura recibi el nombre clave de Merced. Actualmente Intel
comercializa su arquitectura IA-64 con el nombre de Itanium 2.
Para Intel, crear una nueva arquitectura, incompatible con la arquitectura x86, supone un
decidido paso adelante motivado por los dictados de la tecnologa. La familia x86 comenz su
andadura a finales de los aos setenta. Conforme aumentaron las posibilidades de integracin de
transistores, los procesadores de la familia comenzaron a introducir segmentacin y otras
tcnicas que contribuan al aumento de prestaciones. Sin embargo, mantener la compatibilidad
hacia atrs de los nuevos procesadores de la familia comenz a ser un lastre. Otros fabricantes
aumentaron la velocidad utilizando primero las tecnologas RISC y posteriormente la
implementacin superescalar. Intel, sin embargo, anclado por compatibilidad a una arquitectura
CISC que deba ser compatible hacia atrs, intent con el Pentium utilizar moderadamente
tcnicas superescalares y despus, con el Pentium Pro y el Pentium II, tuvo que incorporar una
traduccin de las instrucciones CISC a microinstrucciones RISC para poder utilizar tcnicas
superescalares ms eficazmente. Actualmente, una forma eficaz de utilizar la gran cantidad de
transistores disponibles es la utilizacin de tcnicas de paralelismo explcito, para lo cual Intel y
HP han decidido crear una nueva arquitectura, independiente de que Intel mantenga la lnea de
procesadores de la popular familia x86.

Cuando los diseadores han de decidir a qu dedicar los cada vez ms transistores que es
posible integrar en para la fabricacin de un procesador, tienen pocas posibilidades. Por un lado,
incrementar las cachs internas llega a un punto a partir del cual no mejora la tasa de aciertos de
forma significativa. Por otro lado se puede incrementar el grado de paralelismo superescalar,
aadiendo ms unidades de ejecucin, sin embargo la complejidad y la circuitera necesaria
aumentan exponencialmente. Complejidad que sirve para mejorar muy poco las prestaciones de
la mquina, ya que, como vimos en el tema anterior, en la implementacin superescalar se
pueden emitir 5 o ms instrucciones en no ms del 10% de los casos (en las condiciones ms
favorables).
Para solucionar este problema, Intel y HP han apostado por la implementacin de un gran
nmero de unidades funcionales en paralelo, pero utilizando el enfoque del paralelismo explcito.
En esta estrategia, el compilador planifica estticamente las instrucciones en tiempo de
compilacin, en lugar de que lo haga dinmicamente el procesador en tiempo de ejecucin. As,
es el compilador el que determina qu instrucciones pueden ejecutarse en paralelo, e incluye esa
JUAN F. GUERRERO MARTNEZ

8. 2

JOS V. FRANCS VILLORA


Curso 2010-2011

SISTEMAS ELECTRNICOS PARA EL


TRATAMIENTO DE LA INFORMACIN
informacin en la instruccin mquina, liberando de dicha labor al procesador. Una ventaja de
esto es que el procesador no requiere tanta circuitera compleja como un procesador superescalar
con paralelismo implcito. Adems, mientras que el procesador tiene que determinar la
posibilidad de una potencial ejecucin en paralelo en cuestin de nanosegundos, el compilador
dispone de un plazo varios rdenes de magnitud mayor para examinar el cdigo con
detenimiento, y puede considerar el programa en toda su extensin.

8.2 Organizacin

La organizacin de la arquitectura IA-64 se muestra, esquemticamente, en la figura 8.1. Las


caractersticas ms importantes son:

- Gran nmero de registros. El formato de instruccin de la arquitectura IA-64 permite la
utilizacin de hasta 256 registros de 64 bits, 128 de uso general para datos enteros y
lgicos y 128 para datos en coma flotante y grficos. Tambin dispone de 64 registros
predicado de un bit.
- Mltiples unidades de ejecucin. Puede utilizar muchas ms unidades paralelas que las
mquinas superescalares tpicas, de paralelismo implcito a nivel de instrucciones, que
suelen soportar cuatro cauces. Tpicamente se usan ocho o ms unidades funcionales. P.
ej., Itanium 2 tiene 11 unidades funcionales diferentes.


Figura 8.1: Esquema de organizacin de la arquitectura del IA-64.

JUAN F. GUERRERO MARTNEZ

8. 3

JOS V. FRANCS VILLORA


Curso 2010-2011

SISTEMAS ELECTRNICOS PARA EL


TRATAMIENTO DE LA INFORMACIN

El gran tamao del banco de registros supone una diferencia importante respecto a las
mquinas RISC y superescalares. Ntese que una mquina superescalar tpica utiliza el
paralelismo a nivel de instruccin de forma implcita, es decir la gestin del paralelismo a nivel
de instruccin la realiza el procesador. Es por eso que este tipo de mquinas utiliza un mayor
nmero de registros fsicos que lgicos a travs del renombramiento de registros. Sin embargo, el
paralelismo explcito libera al procesador de la carga del renombramiento de registros y del
anlisis de dependencias. Esta tarea pasa a realizarla el compilador, que necesita utilizar un gran
nmero de registros explcitos.


Figura 8.2 Formato de Instruccin de la arquitectura IA-64.

8.3 Formato de Instruccin


Las instrucciones de la arquitectura IA-64 responden al tipo de VLIW, Very Long Instruction
Word, ya que cada instruccin es en realidad un paquete de 128 bits que contiene 3 instrucciones
de 40 bits mas un campo plantilla de 8 bits, figura 8.2. El campo plantilla indica qu
instrucciones se pueden ejecutar en paralelo, de forma que su interpretacin no se limita a un
solo paquete. As, si por ejemplo el flujo de instrucciones permite la ejecucin de ocho
instrucciones en paralelo, el compilador las reordenar para que abarquen paquetes contiguos, y
ajustar los bits de plantilla para informar al procesador cuales son las instrucciones
independientes. Las instrucciones agrupadas no tienen por qu estar en el orden original.

JUAN F. GUERRERO MARTNEZ

8. 4

JOS V. FRANCS VILLORA


Curso 2010-2011

SISTEMAS ELECTRNICOS PARA EL


TRATAMIENTO DE LA INFORMACIN
El campo plantilla proporciona una gran flexibilidad. El compilador puede mezclar
instrucciones dependientes e independientes en el mismo paquete, con tan solo indicarlo en el
campo plantilla. Esto no ocurre en otros diseos VLIW, que necesitan insertar instrucciones
NOP hasta completar el paquete para evitar que instrucciones dependientes compartan el mismo
paquete.
La figura 8.2 muestra el formato de cada una de las instrucciones del paquete. La
instrucciones son de 40 bits, lejos de los 32 bits tpicos de las instrucciones RISC. Esto es debido
a que un mayor nmero de registros implica ms bits para codificarlos y, adems, se aade la
referencia a un campo predicado (cuya utilidad se explica en el siguiente apartado).

8.4 Ejecucin con predicados


La ejecucin con predicados es una tcnica que posibilita que la ejecucin de instrucciones
pueda referirse a un registro predicado de 1 bit. Esto indica que la ejecucin de dicha instruccin
ser especulativa, y una vez se sepan los valores de los registros predicado, la instruccin se
retira si el valor final del registro predicado correspondiente es verdadero (valor 1, booleano
TRUE), y se descarta si es falso. Por otro lado, todas aquellas instrucciones sin asignacin de
predicado se ejecutan incondicionalmente.
La siguiente sintaxis

<Pi>

Instruccion

indica la asignacin de una predicado a una instruccin. Esta instruccin slo se retirar si el
valor del registro predicado Pi es 1. De lo contrario se descartar.
El valor de un predicado se obtiene a partir de la ejecucin de la siguiente instruccin:

Pj, Pk = Expresin

As, si la expresin es verdadera, entonces Pj = 1 y Pk = 0. Si es falsa Pj = 0 y Pk = 1.

Tambin es posible que la anterior instruccin tenga, a su vez, asignado un registro predicado.
A esto se le denomina asignacin predicada de predicados:

<Pi> Pj, Pk = Expresin

La ejecucin con predicados posibilita ejecutar en paralelo las dos ramas de una salto
condicional antes de conocer la condicin. De esta forma se utilizan al mximo las unidades
funcionales del procesador con el propsito de evitar la introduccin de ciclos de retardo.

JUAN F. GUERRERO MARTNEZ

8. 5

JOS V. FRANCS VILLORA


Curso 2010-2011

SISTEMAS ELECTRNICOS PARA EL


TRATAMIENTO DE LA INFORMACIN


EJEMPLO 1

Aqu tenemos un sencillo ejemplo de una bifurcacin condicional:



Como vemos en el cdigo ensamblador, dado que la bifurcacin tiene dos posibles resultados,
el compilador ha asignado un predicado diferente a las instrucciones de cada uno de los dos
caminos. Las instrucciones del primer camino apuntarn al registro predicado P1, y la del
segundo a la del P2. Cuando la CPU conoce el resultado de la comparacin, en tiempo de
ejecucin, desecha los resultados de las instrucciones ejecutadas del camino no vlido y entrega
las del camino vlido.
En este caso las tres instrucciones se podran ejecutar en un solo ciclo, entregndose slo los
resultados de la instruccin correcta.



EJEMPLO 2

Otro ejemplo ms elaborado es el del siguiente cdigo fuente:

JUAN F. GUERRERO MARTNEZ

8. 6

JOS V. FRANCS VILLORA


Curso 2010-2011

SISTEMAS ELECTRNICOS PARA EL


TRATAMIENTO DE LA INFORMACIN
En este ejemplo vemos cmo dos sentencias if seleccionan tres posibles caminos de
ejecucin. A continuacin tenemos el cdigo en lenguaje ensamblador que producira un
procesador tpico:


Sin embargo el compilador del IA-64 genera el siguiente cdigo con predicados:


Las dos bifurcaciones condicionales del cdigo ensamblador se convierten aqu en tres
instrucciones de comparacin. Si la primera instruccin pone P2 a falso, la segunda instruccin
de comparacin (I2) no se tiene en cuenta y es la instruccin de comparacin I4 la que se tiene en
cuenta. De otra forma, si P2 es verdadero se tiene en cuenta la instruccin de comparacin en I2.
Este es el procedimiento que finalmente determina cual es la instruccin que ha de ejecutarse,
que ser aquella de las I3, I5 o I6 cuyo predicado tenga un valor final verdadero.
Ntese que en un cauce superescalar normal utilizaramos la prediccin de saltos, y si la
prediccin es equivocada el cauce tendr que vaciarse. Un procesador IA-64 inicia la ejecucin
de todas las instrucciones, y cuando se dispone de los valores de los predicados, se entregan slo
los resultados de la instruccin vlida. Por tanto un procesador IA-64 utiliza las unidades de
ejecucin adicionales en paralelo para evitar los retardos debido al vaciado del cauce.


JUAN F. GUERRERO MARTNEZ

8. 7

JOS V. FRANCS VILLORA


Curso 2010-2011

SISTEMAS ELECTRNICOS PARA EL


TRATAMIENTO DE LA INFORMACIN

8.5 Carga especulativa


La carga especulativa es una tcnica que permite al procesador cargar datos desde memoria
antes de que el programa los necesite. De esta forma, evita los ciclos de retraso que se producen
si la carga desde memoria se realiza en la instruccin anterior a la instruccin que la necesita.
Puede verse que la funcin de la carga especulativa es similar a la carga retardada. Sin embargo,
Que diferencias hay entre ambas?
Como vemos, la figura 8.3a ilustra el diagrama de flujo de un fragmento de cdigo. La
instruccin I8 realiza una carga desde memoria de un operando que utiliza la instruccin I9. No
obstante, para ahorrar ciclos de retraso se puede adelantar la carga lo mximo posible (es obvio
que la carga adelantada no puede adelantar instrucciones anteriores que utilicen el mismo
registro). Ntese que lo mximo que se podra hacer en este diagrama sera intercambiar la carga
de la instruccin I8 con la instruccin I7 (si sta no hiciese referencia al mismo registro que se
carga). No podra adelantarse ms porque se llega a una bifurcacin condicional. En general la
carga retardada tiene esta limitacin.
Las cargas retardadas no adelantan una instruccin de bifurcacin porque podra ocurrir que la
carga no se produzca realmente si el flujo del programa toma otro camino en la bifurcacin. En
el caso de que el flujo tomara otro camino y que la carga adelantada hubiera generado una
excepcin o falta de pgina, el tiempo necesario para atender este evento es mucho mayor del
que se gana utilizando una carga retardada. Este es el motivo de esta limitacin.
Sin embargo, la carga especulativa permite superar esta limitacin permitiendo mover la
carga por encima de una bifurcacin. Cmo lo hace? Separando el funcionamiento de la carga
del de la excepcin. Una instruccin de carga en el programa original se reemplaza, figura 8.3b,
por dos instrucciones :

- Una carga especulativa (ld.s) ejecuta la captacin desde memoria. sta lleva a cabo la
carga y la deteccin de excepciones, pero, si la hubiere, no lanza la excepcin. Esta
instruccin se mueve a un punto que el compilador decida que sea adecuado.
-

Una instruccin de comprobacin (check.s) permanece en el lugar de la carga original y


lanza las excepciones. Esta instruccin podra asignarse a un predicado de forma que se
ejecute slo si el predicado es verdadero.


Como vemos, esta tcnica permite cargar los datos desde memoria moviendo la carga por
encima de una bifurcacin, asegurando que, si la carga est en condiciones de producir una
excepcin, esta no se producir, sino que se aplazar hasta encontrar la instruccin de
comprobacin.
Si ld.s detecta una excepcin, ajusta un bit de recuerdo asociado con el registro destino, de
forma que si la instruccin check.s se ejecuta y dicho bit est a uno, la instruccin check.s llama
a la rutina de servicio de la excepcin.

JUAN F. GUERRERO MARTNEZ

8. 8

JOS V. FRANCS VILLORA


Curso 2010-2011

SISTEMAS ELECTRNICOS PARA EL


TRATAMIENTO DE LA INFORMACIN


(a) Bifurcacin original. Sin carga especulativa.


(b) Utilizacin de la carga especulativa.
Figura 8.3 Ejemplo de utilzacin de la carga especulativa en el IA-64.


JUAN F. GUERRERO MARTNEZ

8. 9

JOS V. FRANCS VILLORA


Curso 2010-2011

SISTEMAS ELECTRNICOS PARA EL


TRATAMIENTO DE LA INFORMACIN
A continuacin tenemos otro ejemplo con cdigo que muestra cmo la utilizacin de la carga
especulativa ha permitido mover la carga por encima de la bifurcacin condicional. Ntese el uso
de ld.s y check.s

JUAN F. GUERRERO MARTNEZ

8. 10

JOS V. FRANCS VILLORA


Curso 2010-2011