Вы находитесь на странице: 1из 58

Captulo 3

Procesamiento superescalar
Los procesadores superescalares son procesadores segmentados que incorporan recursos
hardware para aumentar el aprovechamiento del paralelismo entre instrucciones
incrementando el nmero de instrucciones terminadas por ciclo (IPC), o lo que es lo mismo,
reduciendo el nmero medio de ciclos por instruccin (CPI) en las instrucciones procesadas.
En un procesador superescalar, cada una de las etapas del cauce puede procesar varias
instrucciones por ciclo.
Captacin
(IF)
Registros de
la arquitectura

Escritura
(WB)

Emisin
(ISS)

Ventana de instrucciones,
ROB, Bfer de renombrado, etc.

Registros UF

Registros UF

Registros UF

Unidad
funcional

Unidad
funcional

Unidad
funcional

Registro UF

Registro UF

Registro UF

Cola de
instrucciones
Decodificacin
(ID)

Ejecucin
(EX)

Figura 1. Esquema simplificado de un cauce superescalar.

La Figura 1 muestra un esquema simplificado de las etapas de un procesador superescalar y


de las estructuras que suelen incluirse para acoplar la velocidad de procesamiento en ciertas
etapas consecutivas y controlar el paso de instrucciones entre ellas. La etapa de captacin
puede captar varias instrucciones por ciclo y las almacena en una cola de instrucciones, desde
donde la etapa de decodificacin las toma para su decodificacin, tambin a un ritmo de
varias instrucciones por ciclo instrucciones. Las instrucciones decodificadas se introducen en
unas estructuras que permiten determinar si una instruccin puede pasar a ejecutarse porque
tiene sus operandos disponibles y la unidad funcional que necesita disponible. Estas tareas se
pueden implementar utilizando distinto tipo de estructuras como son la ventana de
instrucciones, la estacin de reserva, el bfer de renombrado, o el bfer de reordenamiento
(ROB). Las instrucciones que estn disponibles pueden emitirse a las unidades de
procesamiento para su ejecucin. El nmero mximo de instrucciones que pueden emitirse
es una caracterstica importante de la microarquitectura del procesador superescalar. Una vez
que las instrucciones han terminado su ejecucin escriben sus resultados en estructuras como
el bfer de reordenamiento, desde donde se van pasando al banco de registros, o bien se
escriben directamente en el banco de registros. El nmero de resultados por ciclo que

pueden escribirse en el banco de registros, desde las unidades funcionales o desde el bfer de
reordenamiento (a fin de cuentas es el nmero mximo de instrucciones que pueden
terminar de procesarse por ciclo) es otra caracterstica importante del procesador
superescalar.
En un procesador superescalar las instrucciones se captan y se decodifican ordenadamente,
es decir en el mismo orden en que se encuentran en el programa almacenado en memoria.
Una vez decodificadas, las instrucciones se almacenan en una o varias estaciones de reserva
desde donde se envan (dispatch) a las unidades funcionales disponibles en el procesador para
su ejecucin. Para que una instruccin pueda enviarse a la unidad funcional correspondiente
sta debe estar libre y los operandos de la instruccin disponibles. En el caso de que haya
una nica estacin de reserva centralizada a la que se conectan todas las unidades funcionales
(en cuyo caso, a veces, tambin se llama ventana de instrucciones), el envo de instrucciones se
suele denominar emisin (issue) y comprende tanto la seleccin como el envo a la unidad
funcional donde se ejecutar la instruccin. Cuando hay varias estaciones de reserva
asociadas cada una a una unidad funcional, o a un grupo de ellas, en el procesamiento de la
instruccin se distingue entre emisin (issue), desde la unidad de decodificacin hasta la
estacin de reserva adecuada, y envo (dispatch), desde la estacin de reserva a la unidad
funcional cuando la instruccin tiene sus operandos disponibles. El envo (o la emisin en el
caso de una estacin de reserva centralizada) puede ser ordenado o desordenado. En el caso de
emisin o envo ordenado, una instruccin no se enva a ejecutar hasta que las instrucciones
que estn delante de ella en el cdigo (y por lo tanto estarn antes que ella en la estacin de
reserva) no estn listas para enviarse junto a ella, o se hayan enviado ya. En el caso de
emisin o envo desordenado, una instruccin puede enviarse a ejecutar incluso aunque haya
instrucciones que la preceden en la estacin de reserva que no puedan empezar a ejecutarse
porque necesitan alguno de sus operandos o que la unidad funcional correspondiente est
libre. En los procesadores superescalares ha habido una tendencia clara hacia el
envo/emisin desordenado para aprovechar el mximo paralelismo posible entre
instrucciones.
INSTRUCCIN

mult
sub
sub
add

r5, r1, r5
r6, r5, r2
r5, r4, r3
r2, r3, r1

1
IF
IF

2
ID
ID
IF
IF

EX

9
WB

10
EX

ID
ID

EX

11
WB

WB
EX

WB

Figura 2. Traza de la ejecucin de un fragmento de cdigo en un procesador con emisin desordenada,


una unidad de suma/resta y un multiplicador.

CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

OP1

OK1

OP2

OK2

PRED

sub

r6

r5

[r2]

mult

r5

[r1]

[r5]

add

r2

[r3]

[r1]

sub

r5

[r4]

[r3]

sub

r6

r5

[r2]

add

r2

[r3]

[r1]

sub

r6

r5

[r2]

sub

r6

r5

[r2]

6
9

Tabla 1. Evolucin de la ventana de instrucciones en el ejemplo mostrado en la Figura 2.

La Figura 2 proporciona un ejemplo de emisin desordenada de una secuencia de cuatro


instrucciones en un procesador que utiliza una ventana de instrucciones o estacin de reserva
centralizada a la que estn conectadas una unidad de suma/resta y otra de multiplicacin. En
la Tabla 1 se puede observar la evolucin de la ventana de instrucciones o estacin de reserva
centralizada del procesador usado en este ejemplo. Cada una de las filas de esta estructura
est formada por los siguientes campos de izquierda a derecha:

El nmero de la entrada de la ventana de instrucciones.

La operacin a realizar.

El registro en el que se debe almacenar el resultado.

Dos campos consecutivos para el primer operando y otros dos para el


segundo. El primero de ellos indica el valor del operando si el segundo
campo (denominado usualmente campo de operando vlido) es igual a uno.
En el caso de que el segundo campo de operando sea cero, el primer
operando codifica el registro de donde se obtendr el dato. Cuando se
genere el valor del operando, el primer campo se cargar con el valor
obtenido y el segundo campo se har igual a uno.
Un campo que indica si la instruccin se ha introducido en el cauce de
forma especulativa.

Haciendo uso de esta estructura, la etapa de emisin podr mandar a ejecutar las
instrucciones en cuanto tengan sus dos campos de operando vlido a uno y est disponible la
unidad funcional que se necesita para la operacin. Como se puede observar en la Tabla 1,
las instrucciones se han introducido de forma ordenada (en la etapa de decodificacin) en la
estacin de reserva o ventana de instrucciones. En el ciclo 3 podr emitirse la primera
instruccin, dado que tiene sus operandos disponibles y la unidad de ejecucin que necesita
tambin se supone libre. La instruccin (2) necesita el valor de r5 calculado por la instruccin
(1), por lo que tendr que esperar hasta el ciclo 9 para ser emitida. Por ltimo, las
instrucciones (3) y (4) entran en la ventana de instrucciones en el ciclo 3. Ambas tienen sus
operandos disponibles, pero como slo hay una nica unidad de suma/resta, la instruccin
(4) tendr que esperar a que se ejecute la instruccin (3) para ser emitida. Como se puede
comprobar, las instrucciones empiezan a ejecutarse (y terminan de hacerlo) en un orden
distinto al que tienen en el cdigo.

Uno de los problemas que se deben afrontar a la hora de disear un cauce superescalar es el
de los riesgos de datos. La Figura 2 muestra un ejemplo de los tres tipos de riesgos que
pueden aparecer: RAW (Read-After-Write), WAR (Write-After-Read) y WAW (Write-After-Write).
El primero de ellos aparece cuando una instruccin necesita un operando (read) despus
(after) de que sea generado (write) por otra instruccin previa, tal y como ocurre entre las
instrucciones (2) y (1). Para solucionar este tipo de riesgo, la etapa de emisin bloquea a las
instrucciones en la ventana de instrucciones (o bien las etapa de envo en las estaciones de
reserva) hasta que no tengan sus operandos disponibles, tal y como se ha explicado ms
arriba.
En cuanto a los riesgos de datos WAR y WAW, realmente no son riesgos de datos
verdaderamente, ya que aparecen debido al uso repetido del mismo registro como registro de
destino de diferentes instrucciones, por lo que se pueden evitar usando diferentes registros
para almacenar los resultados, es decir, renombrando los registros de destino. La Figura 2
muestra un ejemplo de cada uno de estos riesgos. Por ejemplo, entre las instrucciones (4) y
(2) existe un riesgo WAR causado por el uso de r2, ya que aunque la instruccin (4) es
posterior a la instruccin (2), modifica el valor de r2 antes de que se ejecute la instruccin (2),
por lo que cuando se ejecute la instruccin (2) operar con un valor futuro de r2 en lugar de
operar con el valor adecuado. Por otra parte, tambin existe un riesgo WAW entre las
instrucciones (3) y (1) a causa del uso repetido del registro de destino r5. Como la instruccin
(1) modifica el registro despus que la instruccin (3), a partir de ciclo 10 todas las
instrucciones que usen r5 operarn con un valor pasado del registro. Para evitar estos dos
riesgos bastara con que las instrucciones (3) y (4) escribieran sus resultados en otros
registros, por ejemplo en r7 y r9.
El renombrado de registros es, por tanto, una tcnica que hace desaparecer los riesgos WAR
y WAW y puede ser implementada por el compilador, o bien mediante hardware, usando
unas estructuras denominadas bferes de renombrado. En la Figura 3 se muestran dos esquemas
de bferes de renombrado correspondientes a dos alternativas de acceso posibles. En el
bfer de renombrado con acceso asociativo (Figura 3.a) se distinguen cinco campos en cada
lnea, de izquierda a derecha:

El campo entrada vlida indica, cuando est a 1, que esa lnea se est
utilizando para hacer un renombrado de registro.
El campo registro de destino indica el registro que se ha renombrado en esa
lnea.
El campo valor es el que corresponde al espacio reservado para el
renombrado, es decir la nueva ubicacin para el dato asociada al registro de
destino usado en la instruccin.
El campo valor vlido indica si el contenido de lo almacenado en el campo
valor es vlido.
El campo ltimo indica si esa lnea contiene el ltimo renombrado que se ha
hecho para el registro.

Cuando llega una instruccin se comprueba asociativamente si alguno de sus operandos est
incluido en el bfer de renombrado. Por ejemplo, en la Figura 3.a se est comprobando si
hay algn renombrado del registro r2 (se supone que es uno de los operandos de una
instruccin) comparando asociativamente con las entradas del bfer de renombrado. Si

hubiera varias entradas que renombraran al registro buscado, se utilizar la lnea


correspondiente al ltimo renombrado (la que tenga a 1 campo ltimo).
En el caso de acceso indexado, hay un bfer con una lnea para cada uno de los registros del
banco de registros del procesador. En cada una de esas lneas hay un campo entrada vlida que
indica (cuando est a 1) si se ha hecho un renombrado al registro correspondiente a esa lnea
y otro campo que apunta a una lnea del bfer de renombrado propiamente dicha. En esa
lnea est el espacio reservado para el renombrado del registro (campo valor) y hay adems
otro campo que indica si el valor es vlido o no (campo valor vlido). Aqu no hay necesidad
de un campo de ltimo dado que en el campo de ndice se mantiene el puntero al ltimo
renombrado realizado para el registro de la lnea correspondiente.
#

ENTRADA
VLIDA

REGISTRO
DE DESTINO

VALOR

VALOR
VLIDO

LTIMO

r2

50

r3

1200

r2

20

r1

(a) Bfer asociativo.


#

ENTRADA
VLIDA

NDICE
BFER

VALOR

VLIDO

50

1200

...

20

(b) Bfer indexado.


Figura 3. Bferes de renombrado.

En un procesador superescalar las instrucciones pueden terminar de ejecutarse en un orden


distinto al que aparecen en el cdigo, incluso aunque la emisin sea ordenada, dado que las
unidades funcionales pueden tener tiempos de latencia diferentes. Por tanto, es necesario
mantener la consistencia secuencial de los programas, es decir, asegurar que el orden en que
se completa el procesamiento de las instrucciones (escribiendo sus resultados en los registros
de la arquitectura) y el orden en que se hacen las lecturas y escrituras en memoria es
consistente con el orden que las instrucciones tienen en el cdigo. Se distinguen dos tipos de
consistencia, consistencia de procesador que se refiere al orden en que se completan las
instrucciones, y consistencia de memoria, en relacin con el orden en que se realizan los accesos a
memoria. Se puede distinguir entre consistencia fuerte y dbil, en funcin de que se respete o no
el orden en que las instrucciones aparecen en el cdigo.
As, en un procesador hay consistencia de memoria fuerte si los accesos a memoria para
lectura o escritura se realizan en el mismo orden en que aparecen en el cdigo, y hay
consistencia dbil si se permiten accesos a memoria desordenados, siempre y cuando se

respeten las dependencias de datos. En cuanto a la consistencia de procesador, la


consistencia dbil permite que las instrucciones se completen desordenadamente
(lgicamente, respetando las dependencias) mientras que en la dependencia fuerte se
completan en el orden en que aparecen en el cdigo. La tendencia en el diseo de los
procesadores ha ido hacia la consistencia de memoria dbil y hacia la consistencia de
procesador fuerte.
Para mantener la consistencia de procesador fuerte se han propuesto diversas estructuras,
entre las que est el bfer de reordenamiento (ROB). El ROB es un bfer en el que las
instrucciones se introducen ordenadamente a medida que se van decodificando (es decir, se
encuentran en el orden de programa) ocupando una lnea del bfer cada una. Una
instruccin se podr retirar del bfer cuando haya finalizado su ejecucin y adems todas las
instrucciones que la precedan en el ROB (y por tanto en el cdigo) se hayan retirado. El
momento en que una instruccin se retira del ROB es cuando se escribe el resultado de la
misma en el banco de registros de la arquitectura y se dice que la instruccin finaliza su
procesamiento (desaparece del cauce del procesador). Hasta ese momento, los resultados de
las instrucciones que estn en el ROB pueden estar almacenados en un campo especfico de
la propia lnea del ROB donde est la instruccin, o bien en un campo de una lnea del bfer
de renombrado al que apunte un puntero en la lnea del ROB, dependiendo de la
implementacin del procesador. El nmero mximo de instrucciones que pueden retirarse
del ROB (es decir el nmero mximo de instrucciones que pueden finalizar por ciclo en el
procesador) es una caracterstica importante para determinar la velocidad pico del procesador
(en MIPS) y depende de ciertas caractersticas de la microarquitectura (nmero de puertos de
escritura del banco de registros, buses de conexin entre el ROB y el banco de registros,
etc.).
#

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

mult

r1

st

add

r1

17

xor

r1

Tabla 2. Ejemplo de bfer de reordenamiento.

En la Tabla 2 se muestra un ROB en el que hay cuatro instrucciones que se han introducido
ordenadamente (desde la lnea nmero 3 a la nmero 6). Los campos de las lneas del ROB
que se muestran en la Tabla 2 tienen el siguiente significado, de izquierda a derecha:

Nmero de lnea del ROB (no hace falta que est implementado como tal
en la lnea).
Cdigo de la operacin a ejecutar para cada instruccin.
Registro del banco de registros del procesador donde se debe escribir el
resultado de la instruccin cuando se retire.
Campo donde se almacenar temporalmente el resultado de la operacin
hasta que la instruccin se retire.
Campo que indica si el valor almacenado para el dato en la lnea del ROB es
vlido.

Para que una instruccin pueda retirarse, tanto dicha instruccin como todas las que estn en
lneas anteriores del ROB tienen que tener el campo valor vlido (o el campo flush) con el valor
1. Como se puede ver en la Tabla 2, la suma (en la lnea 5 del ROB) ha terminado de
ejecutarse pero todava no ha escrito su resultado en el registro r1 dado que no puede
retirarse antes que las instrucciones de las lneas anteriores del ROB. En esta implementacin
del ROB que hemos descrito, el renombrado de registros se hace en el ROB, por lo que no
sera necesario aadir a nuestro procesador bferes de renombrado. El ROB es una
estructura muy til. De hecho, con ayuda del campo flush puede ayudar tambin en el
procesamiento de interrupciones y saltos, como veremos a continuacin.
Como los procesadores superescalares son tambin procesadores segmentados, las
instrucciones de salto y las interrupciones tienen un efecto muy pernicioso en sus
prestaciones dado que pueden dar lugar a cambios en la secuencia de instrucciones que
deben introducirse en el cauce (debindose anular o evitar el efecto de instrucciones que ya
se haban introducido en el mismo). Como, adems, el nmero de instrucciones que se
captan y decodifican en cada ciclo puede ser considerable, la probabilidad de que se procesen
instrucciones de salto en un ciclo aumenta, por lo que el nmero de instrucciones que
pueden haberse introducido incorrectamente en el cauce tambin es elevado.
En los procesadores superescalares la tcnica de salto retardado no es eficaz porque las
instrucciones se envan a ejecutar desordenadamente, adelantando las instrucciones
independientes a las que estn bloqueadas por algn tipo de dependencia. La tcnica usual
para el procesamiento de las instrucciones de salto es la prediccin de saltos. Esta tcnica se basa
en continuar el procesamiento de instrucciones a partir de la instruccin que, con ms
probabilidad, seguir a la instruccin de salto que se introduce en el cauce. Cuando la
condicin de salto se evala, se comprueba si la prediccin que se haba hecho era correcta o
no. En el caso de que no sea correcta habr que retomar el procesamiento de instrucciones a
partir de la instruccin correspondiente y deshacer el efecto de las instrucciones que se han
introducido en el cauce incorrectamente. Obviamente, la eficacia de este procedimiento se
basa en la capacidad para predecir correctamente la instruccin que seguir a la instruccin
de salto antes de que sta se procese. Existen procedimientos de prediccin estticos en los que
el procesador acta a partir de caractersticas de la propia instruccin de salto como por
ejemplo, segn la direccin del salto sea hacia direcciones anteriores o posteriores a la
direccin de la instruccin de salto, segn la condicin de salto utilizada (saltar si igual a cero,
si mayor que cero, etc.), o incluso segn el compilador ponga a uno o a cero un bit
determinado en el cdigo mquina de la instruccin de salto. En todos estos casos, la
prediccin de saltos se especifica a travs del cdigo que se va a ejecutar y las predicciones
no tienen en cuenta el comportamiento real del cdigo al ejecutarse con las entradas
correspondientes. Las tcnicas de prediccin dinmica tienen en cuenta la historia del
comportamiento pasado de cada instruccin de salto condicional para determinar el
comportamiento ms probable cada vez que dicha instruccin entre en el cauce. Para ello se
utiliza una estructura, denominada frecuentemente BTB (Branch Target Buffer). En cada lnea
del BTB se introduce informacin para una instruccin de salto del programa que se est
ejecutando. As, junto con la direccin de la instruccin de salto, la lnea tambin almacena
una serie de bits que codifican la historia la ejecucin del salto en las ltimas iteraciones y, en
algunas implementaciones se incluyen campos para la direccin de destino de salto en el caso
de que deba producirse o incluso la propia instruccin de destino de salto, para acelerar as el
acceso a dicha instruccin en el caso de que se prediga que hay que saltar.

Cuando una instruccin llega al cauce se comprueba si hay informacin de ella en el BTB
buscando (asociativamente) si su direccin se encuentra en el campo correspondiente del
BTB. Si es la primera vez que se procesa la instruccin, no estar incluida en el BTB, por lo
que se tendr que realizar una prediccin esttica del salto (por ejemplo una prediccin
teniendo en cuenta si el salto es hacia atrs o hacia adelante), se le asignar una lnea del BTB
y se inicializar convenientemente el campo de bits de historia teniendo en cuenta si se ha
acertado o no en la prediccin. En el caso de que la instruccin de salto que entra en el cauce
ya est incluida en el BTB, se realiza la prediccin segn los bits de historia y se actualizan los
mismos segn se haya acertado o no en la prediccin. La Figura 4 proporciona un ejemplo
de diagrama de estados para un procedimiento de prediccin dinmica de salto basado en
dos bits de historia. Existen cuatro posibles estados correspondientes a las cuatro
combinaciones de los dos bits de historia. A dos de esas combinaciones se les asigna la
prediccin de salto tomado (Tomado Fuerte y Tomado Dbil) y a las otras dos la de salto no
tomado (No Tomado Dbil y No Tomado Fuerte). Segn se produzca el salto (T, salto tomado) o
no (NT, salto no tomado), los arcos del diagrama indican cmo cambiarn los bits de historia
para realizar la prediccin la siguiente vez que llegue la instruccin de salto. Como se puede
ver, mientras que se acierta en la prediccin se mantiene la misma, y slo cuando se falla dos
veces consecutivas se cambia el sentido de sta. Dada la importancia de disponer de un
esquema de prediccin con elevados porcentajes de aciertos, ha habido un trabajo de
investigacin bastante activo en este mbito y se han propuesto una gran cantidad de
procedimientos de prediccin con unos requisitos de memoria para los bits de historia
bastante considerables en muchos casos. En [ORT05] se puede completar la informacin
acerca de stos.
NT
T

NT

11

10
T

Tomado
fuerte

NT
01

T
Tomado
dbil

Predecir tomado

00

NT

T
No tomado
dbil

No tomado
fuerte

Predecir no tomado

Figura 4. Diagrama de estados para prediccin dinmica con dos bits de historia.

El ROB facilita el procedimiento de recuperacin tras una prediccin incorrecta. Para ello se
puede aadir un campo nuevo a cada lnea, pred, que permite marcar las instrucciones que se
hayan introducido en el cauce tras la prediccin de un salto (incluso se puede indicar el tipo
de prediccin, T o NT que se haya hecho). Adems, se aade un bit (frecuentemente
denominado bit de vaciado o de flush) a cada lnea. Este bit de vaciado se activa, en todas las
instrucciones que se introdujeron tras la instruccin de salto, en el momento en que se
resuelve la condicin de salto y, al procesar la instruccin de salto, se determina que la
prediccin era incorrecta. Todas las instrucciones que tienen ese bit activado (todas las que se
haban introducido especulativamente en el cauce) se retiran del ROB sin realizar ninguna
modificacin en el procesador.
La gestin de las interrupciones/excepciones precisas en un procesador superescalar tambin
puede facilitarse gracias a la utilizacin del ROB. Para ello se introduce en cada lnea del
ROB otro campo adicional, denominado campo de excepcin, tal y como muestra la Tabla 3.
Cuando se produce una excepcin en el procesamiento de una instruccin, se activa el

campo de excepcin de la lnea del ROB correspondiente a dicha instruccin y se activan


tambin los bits de vaciado o flush de las instrucciones que estn en el ROB a continuacin de
la que da lugar a la excepcin. Cuando una instruccin se retira (es decir, cuando todas las
que le preceden se han retirado ya) se comprueba si el bit del campo de excepcin est
activo. Si es as, se retiran del ROB todas las instrucciones con el campo de vaciado activo
(las que siguen a la instruccin que genera la excepcin) sin que tengan ningn efecto en el
procesador y se atiende la excepcin. Segn el tipo de excepcin, el programa se reanudar
en la propia instruccin que dio lugar a la excepcin o en la siguiente. En la Tabla 3, el
procesamiento de la instruccin de almacenamiento (en la lnea 4 del ROB) ha dado lugar a
una excepcin que se atender cuando dicha instruccin se vaya a retirar (despus de que se
termine la ejecucin de la multiplicacin y sta se retire escribiendo su resultado en el registro
r1). Las siguientes instrucciones (entradas 5 y 6) se retirarn del cauce sin tener ningn efecto
(no se escribirn sus resultados en el registro r1).
#

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

EXCEP

FLUSH

mult

r1

st

add

r1

17

xor

r1

0xa1

Tabla 3. Gestin de interrupciones/excepciones precisas con un ROB.

Existen otros procedimientos para gestionar las interrupciones/excepciones, como son el


uso de bferes de historia, puntos de chequeo, o registros de futuro. En [ORT05] se
describen con ms detalle.

Problemas

1.

Para el fragmento de cdigo siguiente:


lw
lw
add
mul
add
add
add
sub
sub
sw
sw

r1, 0x1ac
r2, 0xc1f
r3, r0, r0
r4, r2, r1
r3, r3, r4
r5, r0, 0x1ac
r6, r0, 0xc1f
r5, r5, #4
r6, r6, #4
(r5), r3
(r6), r4

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
; (7)
; (8)
; (9)
; (10)
; (11)

y suponiendo que se pueden captar cuatro instrucciones por ciclo y emitir cuatro
instrucciones por ciclo, indique el orden en que se emitirn las instrucciones para cada uno
de los siguientes casos:
a) Una ventana de instrucciones centralizada con emisin ordenada y alineada
b) Una ventana de instrucciones centralizada con emisin desordenada y
alineada
c) Una estacin de reserva de tres lneas para cada unidad funcional, con envo
ordenado y ventana deslizante.
NOTA: Considere que hay una unidad funcional para la carga (2 ciclos), otra para el almacenamiento
(1 ciclo), tres para la suma/resta (1 ciclo), y una para la multiplicacin (6 ciclos).

Solucin
La Figura 5 muestra la evolucin de las instrucciones en un cauce con una ventana de instrucciones
centralizada con emisin ordenada y alineada. En este caso, hasta que no se han emitido todas las
instrucciones que entraron en la ventana al decodificarse, no se introducen nuevas instrucciones que
puedan ser emitidas. Esta situacin se muestra en la figura mediante una lnea gruesa. A continuacin
se comentan los atascos que se producen en el cauce:

Ciclo 5:

La ejecucin de la instruccin (2) debe retrasarse al producirse un riesgo


estructural en la unidad de carga con la instruccin (1).
La instruccin (3) debe retrasarse hasta que la instruccin (1) haya cargado el
valor de r1.

Ciclo 7:

La instruccin (4) debe retrasarse hasta que la instruccin (2) haya cargado el
valor de r2.
Las instrucciones (5) (8) no se pueden decodificar hasta que se vace la
ventana de instrucciones porque la emisin es alineada.

Ciclo 13:

Las instrucciones (6) y (7) deben esperar a que se emita la (5) porque la emisin
es ordenada.

Ciclo 14:

La instruccin (5) depende del resultado de la (4).

La instruccin (8) depende del resultado de la (6).


Las instrucciones (9) (11) no se pueden decodificar hasta que se vace la
ventana de instrucciones porque la emisin es alineada.

Ciclo 16:

La instruccin (11) depende del resultado de la (9).

INSTRUCCIN

lw
lw
add
mul
add
add
add
sub
sub
sw
sw

r1, 0x1ac
r2, 0xc1f
r3, r0, r0
r4, r2, r1
r3, r3, r4
r5, r0, 0x1ac
r6, r0, 0xc1f
r5, r5, #4
r6, r6, #4
(r5), r3
(r6), r4

1
IF
IF
IF
IF

2
ID
ID
ID
ID

10

11

12

13

14

15

16

EX
EX
EX
EX

IF
IF
IF
IF

ID
ID
ID
ID

EX
EX
EX
EX

IF
IF
IF

ID
ID
ID

EX
EX
EX

Figura 5. Traza de la ejecucin del cdigo del problema 1 usando una ventana de instrucciones
centralizada con emisin ordenada y alineada.
INSTRUCCIN

lw
lw
add
mul
add
add
add
sub
sub
sw
sw

r1, 0x1ac
r2, 0xc1f
r3, r0, r0
r4, r2, r1
r3, r3, r4
r5, r0, 0x1ac
r6, r0, 0xc1f
r5, r5, #4
r6, r6, #4
(r5), r3
(r6), r4

1
IF
IF
IF
IF

2
ID
ID
ID
ID

ID
ID
ID
ID

EX
EX

10

11

12

13

14

15

EX
EX
EX
EX

IF
IF
IF
IF

EX

IF
IF
IF

EX
ID
ID
ID

EX
EX
EX

Figura 6. Traza de la ejecucin del cdigo del problema 1 usando una ventana de instrucciones
centralizada con emisin desordenada y alineada.

La Figura 6 muestra la evolucin de las instrucciones en un cauce con una ventana de instrucciones
centralizada con emisin desordenada y alineada. Los cambios con respecto a la situacin anterior son:

Ciclo 3:

Ciclo 8:

Se adelanta la ejecucin de la instruccin (3).

Se adelanta la ejecucin de las instrucciones (5) y (6).

Ciclo 13:

Las instrucciones (9) (11) se han podido decodificar un ciclo antes, ya que la
emisin desordenada ha permitido que se vace la ventana de instrucciones un
ciclo antes.

En el caso se utilizar estaciones de reserva, las instrucciones se emiten desde el decodificador a cada
estacin de reserva en la etapa de decodificacin. Desde ah se envan a las correspondientes unidades
funcionales. Se ha supuesto que la emisin a las estaciones de reserva se hace de forma que se
distribuyen las instrucciones entre todas las unidades del mismo tipo, para minimizar las colisiones y
los tiempos de espera en la correspondiente estacin. Como muestra la Figura 7, en este caso el
tiempo de ejecucin del programa est determinado por el riesgo estructural en la unidad de carga
entre las instrucciones (1) y (2), y por las dependencias RAW entre las instrucciones (4) y (2), (5) y (4),
(10) y (5), y (11) y (10).
INSTRUCCIN

lw
lw
add
mul
add
add
add
sub
sub
sw
sw

r1, 0x1ac
r2, 0xc1f
r3, r0, r0
r4, r2, r1
r3, r3, r4
r5, r0, 0x1ac
r6, r0, 0xc1f
r5, r5, #4
r6, r6, #4
(r5), r3
(r6), r4

1
IF
IF
IF
IF

2
ID
ID
ID
ID
IF
IF
IF
IF

10

11

12

13

14

15

EX
EX
EX
EX
ID
ID
ID
ID
IF
IF
IF

EX
EX
EX
ID
ID
ID

EX
EX
EX
EX

Figura 7. Traza de la ejecucin del cdigo del problema 1 usando una estacin de reserva de tres lneas
para cada unidad funcional, con envo ordenado y ventana deslizante.

2.

Indique como evolucionaran los registros de renombrado al ejecutar las siguientes


instrucciones en un procesador superescalar con renombrado de registros en el que se
utilizan registros especficos para implementar el renombrado y acceso indexado a esos
registros a travs de una tabla de mapeo.
mul
add
sub

r2, r0, r1
r3, r1, r2
r2, r0, r1

; (1)
; (2)
; (3)

Solucin
La Figura 8 muestra el resultado de insertar la primera instruccin de la secuencia en el bfer de
renombrado. Se ha supuesto que los registros r0 y r1 estaban previamente renombrados y con valores
vlidos en las entradas 2 y 4 del bfer, y se ha reservado la entrada 6 para almacenar el resultado de la
instruccin, por tanto, dicha entrada permanecer marcada como no vlida hasta que el resultado est
disponible.
La Figura 9 muestra el estado del bfer tras la insercin de la instruccin de suma. Se reserva la
entrada 5 del bfer para almacenar el resultado de la instruccin, se marca como no vlida, y como el
valor de r2 todava no est disponible, se indica que el valor de dicho registro se tomar de la entrada 6
del bfer cuando est disponible.
Por ltimo, la Figura 10 muestra el contenido del bfer de renombrado tras la insercin de la ltima
instruccin de la secuencia. Se reserva la entrada 7 para el nuevo valor de r2 y se marca como no
vlida. Las dos instrucciones anteriores no se ven afectadas por este nuevo renombrado, ya que la
multiplicacin almacenar el valor anterior de r2 en la entrada 6, de la que lo tomar la suma,
independientemente del resultado de la resta, que se almacenar en la entrada 7.

REGISTRO

ENTRADA
VLIDA

NDICE
BFER

VALOR

VLIDO

10

15

Figura 8. Introduccin de la instruccin de multiplicacin en el bfer de renombrado del problema 2.


REGISTRO

ENTRADA
VLIDA

NDICE
BFER

VALOR

VLIDO

10

15

1
0
0

Figura 9. Introduccin de la instruccin de suma en el bfer de renombrado del problema 2.


REGISTRO

ENTRADA
VLIDA

NDICE
BFER

VALOR

VLIDO

10

15

1
0
0
0

Figura 10. Introduccin de la instruccin de resta en el bfer de renombrado del problema 2.

3.

Suponga que las siguientes instrucciones se introducen una tras otra (en los ciclos indicados
entre parntesis) en un bfer de renombrado con acceso asociativo.
multd f3, f1, f2
addd f2, f3, f1
subd f3, f3, f1
addd f5, f1, f2

; (ciclo 3)
; (ciclo 4)
; (ciclo 5)
; (ciclo 5)

a) Cmo evoluciona el bfer de renombrado para esas instrucciones?


b) En qu momento empieza y termina la ejecucin de las instrucciones?

c) Cules son los valores que quedan en los registros de la arquitectura al


terminar, si inicialmente f1 = 2.0 y f2 = 3.0?
NOTA: La multiplicacin tarda 6 ciclos, y la suma y la resta 2 ciclos, y hay suficientes unidades
funcionales como para que no afecten los riesgos estructurales.

Solucin
La Tabla 4 muestra la evolucin del bfer de renombrado a lo largo de la ejecucin de las
instrucciones del fragmento de cdigo del enunciado, marcando en negrita los cambios que ocurren
en cada ciclo. Se ha supuesto que los registros f1 y f2 estn previamente renombrados y con los valores
vlidos 2.0 y 3.0 respectivamente. A continuacin se describe brevemente el contenido de la tabla:
En el ciclo 3 se decodifica la multiplicacin y se crea la entrada 2 para renombrar f3,
con un valor no vlido, ya que todava no se ha ejecutado y con el bit ltimo
activado porque es la ltima entrada que ha renombrado el registro f3.

En el ciclo 4 se introduce la suma en el bfer de renombrado, y como se hace una


asignacin nueva a f2, el bit ltimo de la entrada 1 del bfer se fija al valor 0,
indicando que si una instruccin posterior necesitase tomar el valor de f2, lo debe
tomar de la entrada 3 del bfer. El bit valor vlido de la nueva entrada asignada
debe estar a 0.

En el ciclo 5 se insertan las dos ltimas instrucciones en el bfer de renombrado. Se


asigna la entrada 4 a f3, por lo que el bit ltimo de la entrada 2 del bfer se pone a 0.
Tambin se asigna la entrada 5 del bfer a f5.

CICLO

ENTRADA
VLIDA

REGISTRO

VALOR

VALOR
VLIDO

LTIMO

f1

2.0

f2

3.0

f3

f1

2.0

f2

3.0

f3

f2

f1

2.0

f2

3.0

f3

f2

f3

f5

Tabla 4. Evolucin del bfer de renombrado en el problema 3.

La Figura 11 muestra la traza de ejecucin de la secuencia de instrucciones. Slo se han dibujado las
etapas de decodificacin y ejecucin, ya que es en la primera en la que se introducen las instrucciones
en el bfer de renombrado y en la segunda en la que se ejecutan las instrucciones. Como la
multiplicacin tiene sus dos operandos disponibles, se comenzar su ejecucin en el siguiente ciclo, y
se terminar en el ciclo 9. La operacin de suma de addd f2, f3, f1 no podr ejecutarse antes del ciclo 10
(cuando termine la multiplicacin), y tomar el valor de f3 de la entrada 2 del bfer de renombrado.
Terminar en el ciclo 11, y el resultado se escribir en la entrada 3 del bfer. La instruccin subd
f3, f3, f1 tomar el valor de f1 de la entrada 1 del bfer (su valor es 2.0) y tomar el valor de f3 que

necesita de la entrada 2 del bfer. Esta operacin empezar a ejecutarse en el ciclo 10 y terminar en el
ciclo 11 escribiendo el resultado en la entrada 4. En cuanto a la instruccin addd f5, f1, f2, tomar el
valor de f1 de la entrada 1 del bfer (su valor es 2.0) y tomar el valor de f2 que necesita de la entrada 3
del bfer. Esta operacin empezar a ejecutarse en el ciclo 12 y terminar en el ciclo 13.
INSTRUCCIN

multd
addd
subd
addd

f3, f1, f2
f2, f3, f1
f3, f3, f1
f5, f1, f2

3
ID

10

11

12

13

EX
ID

EX
ID
ID

EX

Figura 11. Traza de la ejecucin del cdigo del problema 3.

La Tabla 5 muestra los momentos de inicio y finalizacin de las instrucciones de la secuencia as como
sus valores finales. De esta tabla se pueden obtener los valores finales para los registros de la
arquitectura, que sern f1 = 2.0, f2 = 8.0, f3 = 4.0, f5 = 10.0.
INSTRUCCIN

INICIO

FIN

RESULTADO

multd f3, f1, f2

2.0 3.0 = 6.0

addd f2, f3, f1

10

11

6.0 + 2.0 = 8.0

subd f3, f3, f1

10

11

6.0 2.0 = 4.0

addd f5, f1, f2

12

13

2.0 + 8.0 = 10.0

Tabla 5. Resultados y ciclos de inicio y finalizacin de las instrucciones del problema 3.

4.

Suponga que las siguientes instrucciones se introducen una tras otra (en los ciclos indicados
entre parntesis) en un bfer de renombrado con acceso asociativo.
multd
addd
subd
multd
addd

f3, f1, f2
f2, f3, f1
f3, f3, f1
f5, f1, f4
f6, f2, f3

; (ciclo 3)
; (ciclo 4)
; (ciclo 4)
; (ciclo 5)
; (ciclo 6)

a) Cmo evoluciona el bfer de renombrado para esas instrucciones?


b) En qu momento empieza y termina la ejecucin de las instrucciones
suponiendo que en el procesador hay una unidad de multiplicacin y otra de
suma/resta, y se utiliza emisin desordenada?
c) Indique el menor nmero de unidades de multiplicacin y de suma/resta
que habra que aadir para minimizar el tiempo de ejecucin de las
instrucciones.
NOTA: La unidad de multiplicacin tarda 5 ciclos, y la de suma/resta 2 ciclos, y cada unidad dispone
de una estacin de reserva con espacio suficiente para tres instrucciones.

Solucin
La Tabla 6 muestra la evolucin del bfer desde el ciclo 3 al ciclo 6, marcando en negrita los cambios
que ocurren en cada ciclo. A continuacin se describe brevemente su contenido:

En el ciclo 3 se decodifica la instruccin multd f3, f1, f2 y se renombra f3 en la


entrada 0. Como hemos supuesto que inicialmente el bfer de renombrado est
vaco y que todos los valores con los que se va a operar estn preparados en el

banco de registros del computador, esta instruccin podr empezar a ejecutarse en


el ciclo siguiente.
En el ciclo 4 se introducen en el bfer de renombrado las instrucciones
addd f2, f3, f1 y subd f3, f3, f1. Como ambas operan con los mismos operandos, las
dos toman el operando f1 del banco de registros y marcan al segundo operando en
la estacin de reserva como pendiente y esperando a que se calcule y se almacene en
la entrada 1 del bfer de renombrado. Como la instruccin subd f3, f3, f1 vuelve a
escribir en f3, se pone a 1 el bit ltimo de la entrada 3 y a 0 el de la entrada 0.

En el ciclo 5 se introduce en el bfer de renombrado la instruccin multd f5, f1, f4,


con lo que se renombra al registro f5 en la siguiente entrada del bfer de
renombrado. Como tiene sus dos operandos disponibles en el banco de registros,
podr pasar a ejecutarse en el siguiente ciclo.

Por ltimo, en el ciclo 6, se introduce en el bfer de renombrado la instruccin


addd f6, f2, f3, que depende de los operandos f2 y f3 que estn pendientes y que se
tomarn de las entradas del bfer de renombrado 2 y 3 respectivamente cuando
estn disponibles. Esta instruccin provoca el renombrado del registro f6.

CICLO

ENTRADA
VLIDA

REGISTRO

VALOR

VALOR
VLIDO

LTIMO

f3

f3

f2

f3

f3

f2

f3

f5

f3

f2

f3

f5

f6

Tabla 6. Evolucin del bfer de renombrado en el problema 4.


INSTRUCCIN

multd
addd
subd
multd
addd

f3, f1, f2
f2, f3, f1
f3, f3, f1
f5, f1, f4
f6, f2, f3

3
ID

6
EX

ID
ID

10

11

12

13

14

EX
EX
EX

ID
ID

EX

Figura 12. Traza de la ejecucin del cdigo del problema 4.

Conforme vaya finalizando la ejecucin de las instrucciones, se irn escribiendo sus resultados en el
campo valor de sus entradas del bfer de renombrado. En el momento de escribir el valor, se
cambiar el campo valor vlido de 0 a 1 y cualquier instruccin que est esperando el dato escrito
podr pasar a ejecutarse. Teniendo en cuenta las dependencias de datos, las latencias de las unidades
de ejecucin, y que solamente hay un sumador y un multiplicador, los ciclos de inicio y finalizacin de
la ejecucin de las instrucciones son los que se muestran en la Figura 12. Slo se han dibujado las
etapas de decodificacin y ejecucin, ya que es en la primera en la que se introducen las instrucciones
en el bfer de renombrado y en la segunda en la que se ejecutan las instrucciones.

Aumentando el nmero de sumadores y de multiplicadores a 2, eliminamos todos los riesgos


estructurales y conseguimos que los nicos atascos en el cauce se deban a dependencias entre datos, lo
que nos ahorra dos ciclos en la ejecucin del programa, como muestra la Figura 13.
INSTRUCCIN

multd
addd
subd
multd
addd

f3, f1, f2
f2, f3, f1
f3, f3, f1
f5, f1, f4
f6, f2, f3

3
ID

6
EX

ID
ID

10

11

12

EX
EX
ID

EX
ID

EX

Figura 13. Traza de la ejecucin del cdigo del problema 4 aumentando el nmero de unidades de
ejecucin.

5.

Suponga que las siguientes instrucciones se han decodificado en los ciclos indicados entre
parntesis, introducindose en una estacin de reserva comn para todas las unidades
funcionales de coma flotante.
multd
addd
subd
addd

f3, f1, f2
f2, f3, f1
f3, f3, f1
f4, f1, f2

; (ciclo 2)
; (ciclo 2)
; (ciclo 3)
; (ciclo 3)

Teniendo en cuenta que el procesador superescalar dispone de un ROB para implementar la


finalizacin ordenada, y que la emisin es desordenada y no alineada,
a) Cmo evolucionara el ROB para esas instrucciones?
b) En qu momento empieza y termina la ejecucin de las instrucciones?
c) Cules son los valores que quedan en los registros de la arquitectura al
terminar, si inicialmente f1 = 3.0 y f2 = 2.0?
NOTA: La multiplicacin tarda 4 ciclos, y la suma y la resta 2 ciclos. Hay tantas unidades funcionales
como sea necesario para que no haya riesgos estructurales. Se pueden enviar, retirar, etc., dos
instrucciones por ciclo como mximo.

Solucin
Para resolver el problema se parte de la Figura 14, en la que se indican los ciclos en los que las
instrucciones se terminan de decodificar (ID) y han pasado a la estacin de reserva, los ciclos en los
que comienza y termina la ejecucin de la operacin correspondiente a la instruccin (EX), los ciclos
en los que el resultado de la operacin se ha almacenado en el ROB, y el momento en que despus de
retirar la instruccin del ROB, los resultados se han almacenado en el banco de registros de la
arquitectura (WB). Esta figura constituye la respuesta al segundo del problema. Las instrucciones
segunda y tercera deben esperar que termine la ejecucin de la primera, y la cuarta instruccin espera
que termine la segunda.
INSTRUCCIN

multd
addd
subd
addd

f3, f1, f2
f2, f3, f1
f3, f3, f1
f4, f1, f2

1
IF
IF

2
ID
ID
IF
IF

5
EX

ID
ID

7
8
9
10
11
12
ROB WB
EX
ROB WB
EX
ROB WB
EX
ROB WB

Figura 14. Traza de la ejecucin del cdigo del problema 5.

CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

multd

f3

addd

f2

multd

f3

addd

f2

subd

f3

addd

f4

multd

f3

6.0

addd

f2

subd

f3

addd

f4

addd

f2

subd

f3

addd

f4

addd

f2

9.0

subd

f3

3.0

addd

f4

10

addd

f4

11

addd

f4

12.0

Tabla 7. Evolucin del ROB en el problema 5.

La Figura 14 tambin ayuda a determinar la evolucin del ROB, detallada en la Tabla 7:

El ROB empieza a llenarse al final del ciclo 2, despus de haberse decodificado las
dos primeras instrucciones.
Al finalizar el tercer ciclo se introducen en el ROB las dos instrucciones restantes, y
tambin habr empezado a ejecutar la multiplicacin.
Hasta el ciclo 7 no ocurre nada en el ROB (en relacin con las instrucciones que
indica el problema). Al final de este ciclo se habr terminado la multiplicacin, y el
resultado estar almacenado en el campo de valor de la entrada 0 del bfer, el bit de
valor vlido estar a 1, y tambin se habr iniciado la ejecucin de las instrucciones
(2), y (3).
En el ciclo 8 se retirar la instruccin (1) del ROB.
Al final del ciclo 9 habr terminado la ejecucin de las instrucciones (2) y (3) y sus
resultados estarn almacenados en las entradas 1 y 2 el ROB, y habr empezado la
ejecucin de la instruccin (4).
Al final del ciclo 10 se habrn retirado las instrucciones (2) y (3) y se escribirn sus
resultados en los registros f2 y f3.
Al finalizar el ciclo 11 el resultado de la instruccin 4 se habr almacenado en la
entrada 3 del ROB.
En ciclo 12 se retirar la instruccin (4) y se escribir el resultado en f1.

Teniendo en cuenta la evolucin del ROB y las operaciones realizadas, los registros quedan al final
con los valores:

6.

f1 = 3.0

f2 = 9.0

f3 = 3.0

f4 = 12.0

Se dispone de un procesador superescalar con la siguiente configuracin:

una estacin de reserva RS1 para las sumas y restas

una estacin de reserva RS2 para las multiplicaciones y divisiones

un bfer de reordenamiento ROB

dos unidades de ejecucin de sumas/restas con una latencia de 2 ciclos

una unidad de ejecucin de multiplicaciones con una latencia de 5 ciclos

una unidad de ejecucin de divisiones con una latencia de 40 ciclos

El procesador es capaz de captar, decodificar, emitir y retirar hasta dos instrucciones por
ciclo, y las estaciones de reserva pueden realizar envos no alineados y desordenados a las
unidades de ejecucin. Si los registros f1 y f2 tienen inicialmente los valores 10.0 y 5.0, qu
valores se obtendrn tras la ejecucin del siguiente programa y en qu ciclos se escribir en
los registros de la arquitectura?
addd
addd
multd
divd
subd

f3, f1, f2
f2, f3, f2
f4, f3, f2
f5, f2, f1
f2, f3, f1

; (1)
; (2)
; (3)
; (4)
; (5)

Solucin
La Figura 15 muestra una traza de la ejecucin del programa en el procesador que se detalla en el
enunciado. A continuacin se describe lo que ocurre en el procesador para cada instruccin:

La instruccin (1) se emite a la estacin de reserva RS1 en el ciclo 2 y puede


enviarse al sumador 1 al siguiente ciclo (ciclo 3) de su emisin, ya que sus
operandos f1 y f2 estn disponibles en la estacin de reserva RS1 en el momento de
su emisin. Tras los dos ciclos que tarda una suma, la instruccin finaliza almacena
el resultado en el ROB y en las estaciones de reserva que necesiten el nuevo valor
de f3 en el ciclo 5. Al ciclo siguiente (ciclo 6) se retirar del ROB almacenando en el
registro f3 el valor 15.
La instruccin (2) tambin se emite en el ciclo 2 a RS1, pero como tiene una
dependencia RAW con la instruccin (1) en f3, debe esperar a que f3 se haya
calculado para poder ejecutarse. En cuanto tiene disponible f3 (ciclo 5) pasa a
ejecutarse al sumador 1 y almacena el resultado en el ROB en el ciclo 7 (los
sumadores tienen una latencia de 2 ciclos). En el siguiente ciclo (ciclo 8) se retirar
del ROB y almacenar en el registro f2 el valor 20.

La instruccin (3) se emite en el ciclo 3 a la estacin de reserva RS2, ya que las dos
primeras se emitieron en el ciclo 2 y slo se pueden emitir dos instrucciones por
ciclo. Esta instruccin no podr ejecutarse hasta el ciclo 7, ya que tiene
dependencias RAW con las instrucciones (1) y (2) en los registros f3 y f2
respectivamente, y almacenar su resultado en el ROB en el ciclo 12 porque el
multiplicador tiene una latencia de 5 ciclos. En el ciclo 13 se retirar del ROB
escribiendo en el registro f4 el valor 300.
La instruccin (4) se emite tambin a RS2 en el ciclo 3 pero no podr ejecutarse
hasta el ciclo 7 debido a la dependencia RAW con las instruccin (2) en f2. Como
las divisiones tienen una latencia de 40 ciclos, esta instruccin estar ejecutndose
desde el ciclo 7 hasta el 46. En el ciclo 47 escribir el resultado en el ROB y en el
ciclo 48 se retirar escribiendo en el registro f5 el valor 2.
La instruccin (5) se emitir en el ciclo 4 a RS1, ya que las dos anteriores se
emitieron en el ciclo anterior, y en el ciclo 5, como ya tiene disponible el valor de f3
que produce la instruccin (1), podr pasar a ejecutarse a uno de los sumadores. En
el ciclo 7 almacenar el resultado en el ROB, pero no podr retirarse hasta el ciclo
48, que es cuando se retira la instruccin (4), ya que la retirada debe ser ordenada,
as que como pueden retirarse dos instrucciones por ciclo, en el ciclo 48 se retirar y
escribir en el registro f2 el valor 5.

INSTRUCCIN

addd
addd
multd
divd
subd

f3, f1, f2
f2, f3, f2
f4, f3, f2
f5, f2, f1
f2, f3, f1

1
IF
IF

2
ID
ID
IF
IF

4
EX

ID
ID
IF

5
6
7
8
ROB WB
EX
ROB WB

10

11

EX
ID

EX

12

13

14

ROB WB
EX

ROB

46

47

48

ROB WB
WB

Figura 15. Traza de la ejecucin del cdigo del problema 6.

7.

Considere que el fragmento de cdigo siguiente:


lw
addi
add
lw
lw
mult
add
add
sw
sw
sub

r3, 0x10a
r2, r0, #128
r1, r0, 0x0a
r4, 0(r1)
r5, 8(r1)
r6, r5, r3
r5, r6, r3
r6, r4, r3
0(r1), r6
8(r1), r5
r2, r2, #16

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
; (7)
; (8)
; (9)
; (10)
; (11)

se ejecuta en un procesador superescalar que es capaz de captar 4 instrucciones/ciclo, de


decodificar 2 instrucciones/ciclo, de emitir (utilizando una ventana de instrucciones con
emisin no alineada) 2 instrucciones/ciclo, escribir hasta 2 resultados/ciclo en los registros
correspondientes (registros de reordenamiento, o registros de la arquitectura segn el caso), y
completar (o retirar) hasta 2 instrucciones/ciclo.
a) Indique el nmero de ciclos que tardara en ejecutarse el programa
suponiendo:

Emisin ordenada y ejecucin desordenada.

Emisin desordenada y ejecucin desordenada.

b) Qu mejoras realizara en el procesador para reducir el tiempo de ejecucin


en la mejor de las opciones anteriores sin cambiar el diseo de las unidades
funcionales (multiplicador, sumador, etc.) y sin cambiar el tipo de memorias
ni la interfaz entre procesador y memoria (no vara el nmero de
instrucciones captadas por ciclo)?
c) Qu pasara si se reduce el tiempo de multiplicacin a la mitad?
NOTA: Considere que el procesador tiene una unidad funcional de carga con una latencia de 2 ciclos,
una unidad de almacenamiento con una latencia de 1 ciclo, tres unidades de suma/resta con
una latencia de 1 ciclo, una unidad de multiplicacin con una latencia de 6 ciclos, y que no
hay limitaciones para el nmero de lneas de la cola de instrucciones, ventana de
instrucciones, bfer de reordenamiento, puertos de lectura/escritura etc.

Solucin
En la emisin ordenada (Figura 16) los instantes en los que las instrucciones empiezan a ejecutarse
(etapa EX) deben estar ordenados de menor a mayor, a diferencia de lo que ocurre en la emisin
desordenada (Figura 17). Dado que el procesador utiliza un bfer de reordenamiento (ROB), la
finalizacin del procesamiento de las instrucciones es ordenada y por ello, las etapas WB de las
instrucciones (momento en que se retiran las instrucciones del ROB y se escriben en los registros de la
arquitectura) deben estar ordenadas en ambas tablas.
INSTRUCCIN

lw
addi
add
lw
lw
mult
add
add
sw
sw
sub

r3, 0x10a
r2, r0, #128
r1, r0, 0x0a
r4, 0(r1)
r5, 8(r1)
r6, r5, r3
r5, r6, r3
r6, r4, r3
0(r1), r6
8(r1), r5
r2, r2, #16

1
IF
IF
IF
IF

2
ID
ID

4
5
6
7
8
9
10
EX
ROB WB
EX ROB
WB
ID EX ROB
WB
ID
EX
ROB WB
ID
EX
ROB WB
ID
ID
ID
IF
ID
IF
ID
IF
ID

IF
IF
IF
IF

11

12

13

14

EX

15

16

17

18

19

ROB WB
EX ROB WB
EX ROB WB
EX ROB WB
EX ROB WB
EX ROB WB

Figura 16. Traza de la ejecucin del cdigo del problema 7 usando una emisin ordenada.
INSTRUCCIN

lw
addi
add
lw
lw
mult
add
add
sw
sw
sub

r3, 0x10a
r2, r0, #128
r1, r0, 0x0a
r4, 0(r1)
r5, 8(r1)
r6, r5, r3
r5, r6, r3
r6, r4, r3
0(r1), r6
8(r1), r5
r2, r2, #16

1
IF
IF
IF
IF

2
ID
ID

IF
IF
IF
IF

4
5
6
7
8
9
10
EX
ROB WB
EX ROB
WB
ID EX ROB
WB
ID
EX
ROB WB
ID
EX
ROB WB
ID
ID
ID
EX ROB
IF
ID
EX ROB
IF
ID
IF
ID EX
ROB

11

12

EX

13

14

15

16

17

18

ROB WB
EX ROB WB
WB
WB
EX ROB WB
WB

Figura 17. Traza de la ejecucin del cdigo del problema 7 usando una emisin desordenada.

Otro aspecto que debe tenerse en cuenta a la hora de realizar la traza es la posibilidad de que ocurran
riesgos estructurales. En este caso, debido a que slo hay una unidad de carga, aparece un riesgo
estructural entre las instrucciones (4) y (5), lo que provoca que la ejecucin de la instruccin (5) se
tenga que retrasar hasta el ciclo 7. Adems hay que tener en cuenta que se decodifican, emiten,
escriben en el ROB, o retiran, dos instrucciones por ciclo como mximo, por tanto, en un mismo ciclo
no puede haber ms de dos instrucciones en las etapas ID, EX, ROB, y WB. Esta limitacin afecta a la
instruccin (11) en la Figura 17 que escribe el resultado en el ROB en el ciclo 10, y no en el 9.

Como excepcin a la regla anterior tenemos el caso de las instrucciones de almacenamiento en la etapa
WB. Se ha supuesto que la limitacin de retirar hasta dos instrucciones por ciclo se deriva de que slo
hay dos puertos de escritura en el banco de registros, pero como las instrucciones de almacenamiento
no escriben en el banco de registros, en un mismo ciclo se podrn retirar hasta dos instrucciones que
escriban en el banco de registros y adems todas las instrucciones de almacenamiento que hayan
finalizado.
Para resolver la segunda cuestin, inicialmente se considera que se decodifican el mismo nmero de
instrucciones que se captan, ya que no existen limitaciones impuestas por las instrucciones al ritmo de
decodificacin (ste viene determinado por las posibilidades de los circuitos de descodificacin y la
capacidad para almacenar las instrucciones decodificadas hasta que se emitan). Tambin se considera
que no existen limitaciones para el nmero de instrucciones por ciclo que se emiten, escriben el ROB,
y se retiran. Por ltimo, se consideran que estn disponibles todas las unidades funcionales que se
necesiten para que no haya colisiones (riesgos estructurales).
INSTRUCCIN

lw
addi
add
lw
lw
mult
add
add
sw
sw
sub

r3, 0x10a
r2, r0, #128
r1, r0, 0x0a
r4, 0(r1)
r5, 8(r1)
r6, r5, r3
r5, r6, r3
r6, r4, r3
0(r1), r6
8(r1), r5
r2, r2, #16

1
IF
IF
IF
IF

2
ID
ID
ID
ID
IF
IF
IF
IF

4
5
EX
ROB
EX ROB
EX ROB
EX
ID
EX
ID
ID
ID
IF ID
IF ID
IF ID EX

6
7
WB
WB
WB
ROB WB
ROB WB

10

11

EX

12

13

14

15

ROB WB
EX ROB WB
WB
WB
EX ROB WB
WB

EX ROB
EX ROB
ROB

Figura 18. Traza de la ejecucin del cdigo del problema 7 usando una emisin desordenada y sin
restricciones en el nmero de unidades de ejecucin, instrucciones procesadas por etapa, tamao de los
bferes, etc.

Una vez encontrada la distribucin temporal de las instrucciones en las distintas etapas, tal y como se
muestra en la Figura 18, se observa que, las mejoras necesarias (sin modificar los tiempos de
procesamiento de las unidades funcionales) para reducir el tiempo al mnimo que permiten las
dependencias RAW entre las instrucciones han sido: decodificar 4 instrucciones por ciclo, emitir,
escribir en el ROB, y retirar hasta tres instrucciones por ciclo, y aadir una unidad de carga de
memoria ms.
En la Figura 19 se muestra la distribucin temporal de instrucciones en etapas cuando, adems de las
mejoras anteriores, se reduce el tiempo de la multiplicacin a tres ciclos (la mitad de lo que duraba
antes). Como se puede comprobar, esa reduccin de tres ciclos tambin se observa en el tiempo final
de la secuencia de instrucciones. Se pone as de manifiesto, que el tiempo de la multiplicacin es uno
de los determinantes fundamentales de las prestaciones.
INSTRUCCIN

lw
addi
add
lw
lw
mult
add
add
sw
sw
sub

r3, 0x10a
r2, r0, #128
r1, r0, 0x0a
r4, 0(r1)
r5, 8(r1)
r6, r5, r3
r5, r6, r3
r6, r4, r3
0(r1), r6
8(r1), r5
r2, r2, #16

1
IF
IF
IF
IF

2
ID
ID
ID
ID
IF
IF
IF
IF

4
5
6
EX
ROB WB
EX ROB
WB
EX ROB
WB
EX ROB
ID
EX ROB
ID
ID
ID
EX
IF ID
IF ID
IF ID EX ROB

10

11

12

WB
WB
EX

ROB WB
EX ROB WB
ROB
WB
EX ROB
WB
EX ROB WB
WB

Figura 19. Traza de la ejecucin del cdigo del problema 7 usando una emisin desordenada,
procesando hasta res instrucciones por ciclo, con dos unidades de carga y con un multiplicador de tres
ciclos de latencia.

Si se tiene en cuenta que la secuencia consta de 11 instrucciones, que el tiempo mnimo que tarda la
primera instruccin en salir son 6 ciclos (lo tomamos como tiempo de latencia de inicio del cauce), y
que el tiempo total de ejecucin en este caso es de 12 ciclos, se puede escribir:
T n 12 TLI n 1 CPI 6 11 1 CPI

con lo que, si se despeja, se tiene que el procesador superescalar presenta una media de 0.6 ciclos por
instruccin, o lo que es lo mismo, ejecuta 1.67 instrucciones por ciclo.

8.

Indique cmo evolucionara el bfer de reordenamiento en el mejor de los casos del


problema anterior.

Solucin
La Tabla 8 muestra la evolucin del bfer de reordenamiento marcando en negrita los cambios que se
producen en cada ciclo:

En el ciclo 2 se decodifican las instrucciones (1) (4) y se introducen en el ROB.

En el ciclo 3 se decodifican las instrucciones (5) (8) y se introducen en el ROB.

En el ciclo 4 se decodifican las instrucciones (9) (11) y se introducen en el ROB.


Simultneamente se almacena en el ROB los resultados de las instrucciones (2) y
(3), cuya ejecucin finaliz en el ciclo anterior.
En el ciclo 5 se escribe en el ROB el resultado de la instruccin (1).
En el ciclo 6 se retiran las tres primeras instrucciones y se escriben los resultados de
las instrucciones (4), (5) y (11) en el ROB.
En el ciclo 7 se retiran las instrucciones (4) y (5) y se escribe en el ROB el resultado
de la instruccin (8).
En el ciclo 8 se activa el bit valor vlido de la instruccin (9) en el ROB, indicando
que la instruccin de almacenamiento ya ha escrito en memoria.
En el ciclo 9 se escribe el resultado de la instruccin (6) en el ROB.
En el ciclo 10 se retira la instruccin (6) y se escribe el resultado de la instruccin
(7) en el ROB.
En el ciclo 11 se retiran las instrucciones (7), (8) y (9) y se indica que la instruccin
(10) ya ha escrito en memoria.
En el ciclo 12 se retiran las dos ltimas instrucciones del ROB.
CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

lw

r3

addi

r2

add

r1

lw

r4

Tabla 8. Evolucin del ROB en el problema 8.

CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

lw

r3

addi

r2

add

r1

lw

r4

lw

r5

mult

r6

add

r5

add

r6

lw

r3

addi

r2

128

add

r1

0x0a

lw

r4

lw

r5

mult

r6

add

r5

add

r6

sw

sw

10

sub

r2

lw

r3

[0x1a]

addi

r2

128

add

r1

0x0a

lw

r4

lw

r5

mult

r6

add

r5

add

r6

sw

sw

10

sub

r2

lw

r4

[0x0a]

lw

r5

[0x0a 8]

mult

r6

add

r5

add

r6

sw

sw

10

sub

r2

112

Tabla 8. Evolucin del ROB en el problema 8.

CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

mult

r6

add

r5

add

r6

r4 + r3

10

11

sw

sw

10

sub

r2

112

mult

r6

add

r5

add

r6

r4 + r3

sw

sw

10

sub

r2

112

mult

r6

r5 r3

add

r5

add

r6

r4 + r3

sw

sw

10

sub

r2

112

add

r5

r6 + r3

add

r6

r4 + r3

sw

sw

10

sub

r2

112

sw

10

sub

r2

112

Tabla 8. Evolucin del ROB en el problema 8.

9.

Considere que el fragmento de cdigo siguiente:


subd
addd
subd
multd
subd
subd

f2, f2, f1
f4, f2, f3
f5, f2, f3
f6, f2, f3
f2, f2, f5
f7, f4, f6

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)

se ejecuta en un procesador superescalar capaz de captar, decodificar y emitir (mediante una


ventana de instrucciones centralizada) 3 instrucciones/ciclo, y completar (o retirar) hasta 2
instrucciones/ciclo.
a) Si el procesador dispone de un bfer de reordenamiento para permitir la
ejecucin desordenada y la finalizacin ordenada, indique el tiempo de
ejecucin en el caso de emisin ordenada (no alineada). Se gana tiempo si
la emisin es desordenada (y no alineada)?

b) Para la situacin ms favorable, qu es mejor aumentar en uno el nmero


unidades de suma/resta o reducir el tiempo de ejecucin de las existentes en
una unidad?
NOTA: El procesador dispone de 2 unidades de suma/resta (de 2 ciclos), una de multiplicacin (de 4
ciclos), y que no hay limitaciones en el nmero de lneas de la cola de instrucciones, bfer de
reordenamiento, puertos de lectura/escritura, etc.

Solucin
En la Figura 20 se muestra la evolucin temporal del conjunto de instrucciones indicado usando una
emisin ordenada (no alineada).
INSTRUCCIN

subd
addd
subd
multd
subd
subd

f2, f2, f1
f4, f2, f3
f5, f2, f3
f6, f2, f3
f2, f2, f5
f7, f4, f6

1
IF
IF
IF

2
ID
ID
ID
IF
IF
IF

4
EX

ID
ID
ID

5
6
7
8
ROB WB
EX
ROB WB
EX
ROB WB
EX
EX

10

11

ROB WB
ROB WB
EX
ROB

12

WB

Figura 20. Traza de la ejecucin del cdigo del problema 9 usando emisin ordenada.

Las instrucciones (2), (3), y (4) han de esperar a que termine de ejecutarse la instruccin (1) para
disponer de su operando f2. La instruccin (5) tambin tiene que esperar al operando f2, pero como
tambin necesita f5, que es producida por la instruccin (3), debe esperar hasta que haya terminado
sta. Por otra parte, tampoco podra enviarse, dado que no se pueden enviar ms de tres instrucciones
por ciclo, y se envan las instrucciones (2), (3), y (4) en el ciclo 5. Por ltimo, la instruccin (6) debe
esperar que termine la (4) porque depende de f6.
Si la emisin es desordenada no se ganara nada para las instrucciones indicadas, ya que lo que limita
su emisin son las dependencias RAW entre ellas. Ninguna instruccin posterior a la instruccin (1) se
puede enviar antes del ciclo 5 (la instruccin (1) produce f2 que es consumido por las instrucciones
(2), (3), (4), y (5)). La instruccin (5) no puede enviarse antes del ciclo 7, ya que necesita el valor de f5
que produce la instruccin (3). La instruccin (6) no puede lanzarse antes del ciclo 9 dado que necesita
el valor de f6, que se tiene en el ciclo 8, obtenido por la instruccin (4).
Como hemos dicho antes, todas las instrucciones que se retrasan en la secuencia de cdigo lo hacen
por un riesgo RAW, as que no conseguiramos ninguna mejora aadiendo ms unidades de ejecucin.
Sin embargo, si las unidades de ejecucin fueran un ciclo ms rpidas, el programa tardara 9 ciclos
independientemente de si la emisin es o no ordenada, como muestra la Figura 21. Por lo tanto, para
este programa es mejor reducir el tiempo de ejecucin de las unidades funcionales existentes que
aadir nuevas unidades de ejecucin.
INSTRUCCIN

subd
addd
subd
multd
subd
subd

f2, f2, f1
f4, f2, f3
f5, f2, f3
f6, f2, f3
f2, f2, f5
f7, f4, f6

1
IF
IF
IF

2
ID
ID
ID
IF
IF
IF

3
EX

ID
ID
ID

4
5
6
7
8
9
ROB WB
EX ROB WB
EX ROB WB
EX
ROB WB
EX ROB
WB
EX ROB WB

Figura 21. Traza de la ejecucin del cdigo del problema 9 usando unidades de ejecucin un ciclo ms
rpidas.

10.

Suponga un procesador superescalar en el que se pueden captar y decodificar hasta dos


instrucciones por ciclo, emitir hasta tres instrucciones por ciclo como mximo, y retirar hasta
dos instrucciones por ciclo. La emisin es desordenada y no alineada y se realiza
directamente a las unidades de ejecucin, es decir, que el procesador no dispone de

estaciones de reserva. La ejecucin tambin es desordenada, y para permitir la finalizacin


ordenada, se dispone de un bfer de reordenamiento (ROB) en el que se introducen las
instrucciones una vez decodificadas y del que se retiran en orden una vez que han finalizado.
a) Indique las dependencias entre las instrucciones, los ciclos en los que se
emiten para su ejecucin y cmo evolucionara en bfer de reordenamiento
hasta que se hayan retirado todas las instrucciones de la siguiente secuencia:
multd
addd
addd
addd
multd
subd

f1, f1, f5
f2, f2, f5
f4, f1, f2
f6, f1, f5
f5, f2, f2
f6, f2, f1

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)

b) Suponiendo una frecuencia de 2 GHz, cunto tarda en procesarse la


secuencia de instrucciones? Cul es la velocidad pico del procesador?
NOTA: La suma y la resta consumen 1 ciclo de reloj y la multiplicacin tres ciclos. Considere que no
hay limitaciones en la capacidad de los bferes ni en el nmero de unidades funcionales. Se
supone que f1, f2 y f5 tienen valores previos.

Solucin
Ya que el procesador no dispone de estaciones de reserva, la lgica de emisin tiene que esperar a que
los operandos le sean facilitados por la lgica de bypass, por tanto, los riesgos RAW entre las
instrucciones (3), (4) y (6) y la instruccin (1), a causa de f1, afectarn al orden de emisin de las
instrucciones.
INSTRUCCIN

multd
addd
addd
addd
multd
subd

f1, f1, f5
f2, f2, f5
f4, f1, f2
f6, f1, f5
f5, f2, f2
f6, f2, f1

1
IF
IF

2
ID
ID
IF
IF

3
EX
ID
ID
IF
IF

4
EX
ROB

ID
ID

6
ROB
EX
EX
EX
EX

7
WB
WB
ROB
ROB

WB
WB
ROB

ROB

WB
WB

Figura 22. Traza de la ejecucin del cdigo del problema 10.

Teniendo en cuenta estas dependencias, las instrucciones se ejecutaran como se muestra en la Figura
22. En cuanto al bfer de reordenamiento, su evolucin se detalla en la Tabla 9:

En el ciclo 2 se decodifican las instrucciones (1) y (2) y se introducen en el ROB.

En el ciclo 3 se decodifican las instrucciones (3) y (4) y se introducen en el ROB.

En el ciclo 4 se decodifican las instrucciones (5) y (6), se introducen en el ROB y se


almacena el resultado de la instruccin (2).
En el ciclo 6 se almacena el resultado de la instruccin (1) en el ROB.
En el ciclo 7 se retiran las instrucciones (1) y (2) y se almacenan en el ROB los
resultados de las instrucciones (3), (4) y (6).
En el ciclo 8 se retiran las instrucciones (3) y (4) y se almacena en el ROB el
resultado de la instruccin (5).
En el ciclo 9 se retiran las instrucciones (5) y (6).

CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

multd

f1

addd

f2

multd

f1

addd

f2

addd

f4

addd

f6

multd

f1

addd

f2

f2 + f5

addd

f4

addd

f6

multd

f5

subd

f6

multd

f1

f1 f5

addd

f2

f2 + f5

addd

f4

addd

f6

multd

f5

subd

f6

addd

f4

f1 + f2

addd

f6

f1 + f5

multd

f5

subd

f6

f2 f1

multd

f5

f2 f2

subd

f6

f2 f1

Tabla 9. Evolucin del ROB en el problema 10.

Si el procesador funciona a 2 GHz, el tiempo de procesamiento sera


T

nmero de ciclos
9

4.5 ns
F
2 109

Para la calcular la velocidad pico, como se pueden retirar hasta dos instrucciones por ciclo, y la
frecuencia del procesador es de 2 GHz, suponiendo que no hubiera atascos en el cauce se podra
alcanzar:
Vpico tasa de retirada F 2 2 109 4 109 instrucciones/s

11.

Suponga un procesador superescalar en que se captan cuatro instrucciones por ciclo, se


decodifican tres instrucciones por ciclo, se emiten tres instrucciones por ciclo como mximo,
y se retiran hasta tres instrucciones por ciclo. La emisin y la ejecucin son desordenadas, y
las instrucciones, una vez decodificadas, se introducen en un bfer de reordenamiento
(ROB) que permite la finalizacin ordenada del procesamiento de las instrucciones.

a) Indique las dependencias entre instrucciones y cmo evolucionara el bfer


de reordenamiento hasta que se hayan retirado todas las instrucciones de la
secuencia:
addd
multd
addd
subd

f1, f1 ,f4
f3, f1, f2
f6, f1, f4
f4, f1, f6

; (1)
; (2)
; (3)
; (4)

b) Suponiendo una frecuencia de 2 GHz, cunto tarda en procesarse la


secuencia de instrucciones? Cul es la velocidad pico del procesador?
NOTA: La suma y la resta consumen un ciclo de reloj y la multiplicacin cuatro ciclos. Considere que
no hay limitaciones en la capacidad de los bferes, y en el nmero de unidades funcionales.
Se supone que f1, f2, y f4 tienen valores vlidos previos.

Solucin
Analizando el cdigo del enunciado se detecta fcilmente que las instrucciones (2) y (3) dependen del
valor de f1 producido por la instruccin (1) y que la instruccin (4) depende del valor de f6 producido
por la instruccin (3). Teniendo en cuenta estas dependencias, las instrucciones se ejecutaran como se
muestra en la Figura 23.
INSTRUCCIN

addd
multd
addd
subd

f1, f1 ,f4
f3, f1, f2
f6, f1, f4
f4, f1, f6

1
IF
IF
IF
IF

2
ID
ID
ID

3
EX

4
ROB
EX

ID

5
WB

EX
ROB
EX ROB

ROB

WB
WB
WB

Figura 23. Traza de la ejecucin del cdigo del problema 11.

Teniendo en cuenta la traza de ejecucin del cdigo, la Tabla 10 muestra el estado del ROB en cada
durante la ejecucin del fragmento de cdigo, resaltando en negrita los cambios producidos en cada
ciclo de la ejecucin. A continuacin se describe la evolucin del bfer de reordenamiento a lo largo
de la ejecucin:

En el ciclo 2 se decodifican las instrucciones (1), (2) y (3) y se introducen en el


ROB.

En el ciclo 3 se decodifica la instruccin (4) y se introducen en el ROB.

En el ciclo 4 finaliza la instruccin (1) y se escribe su resultado en el ROB.

En el ciclo 5 se retira la instruccin (1) y finaliza la instruccin (3), escribiendo su


resultado en el ROB.

En el ciclo 6 finaliza la instruccin (4) y se escribe el resultado en el ROB.

En el ciclo 8 finaliza la instruccin (3) y se escribe el resultado en el ROB.

En el ciclo 9 se retiran las instrucciones (2), (3) y (4) del ROB.

CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

addd

f1

multd

f3

addd

f6

addd

f1

multd

f3

addd

f6

subd

f4

addd

f1

f1 + f4

multd

f3

addd

f6

subd

f4

multd

f3

addd

f6

f1 + f4

subd

f4

multd

f3

addd

f6

f1 + f4

subd

f4

f1 f6

multd

f3

f1 f2

addd

f6

f1 + f4

subd

f4

f1 f6

Tabla 10. Evolucin del ROB en el problema 11.

Si el procesador funciona a 2 GHz, el tiempo de procesamiento sera de:


T

nmero de ciclos
9

4.5 ns
F
2 109

Para la calcular la velocidad pico, como slo se pueden retirar tres instrucciones por ciclo, suponiendo
que no hubiera atascos en el cauce:
Vpico tasa de retirada F 3 2 10 9 6 10 9 instrucciones/s

12.

Suponga un procesador superescalar en el que se captan y decodifican hasta dos


instrucciones por ciclo, se emiten hasta tres instrucciones por ciclo como mximo, y se
retiran hasta dos instrucciones por ciclo. La emisin es desordenada y no alineada y se realiza
directamente a las unidades de ejecucin, es decir, que el procesador no dispone de
estaciones de reserva. La ejecucin tambin es desordenada, y para permitir la finalizacin
ordenada, se dispone de un bfer de reordenamiento (ROB) en el que se introducen las
instrucciones una vez decodificadas y del que se retiran en orden una vez que ha finalizado.
a) Indique las dependencias entre las instrucciones, los ciclos en los que se
emiten para su ejecucin y cmo evolucionara en bfer de reordenamiento
hasta que se hayan retirado todas las instrucciones de la siguiente secuencia
almacenada en la cola de instrucciones captadas:

multd
addd
divd
addd
multd
subd

f1, f1, f5
f2, f2, f5
f4, f1, f2
f6, f1, f5
f5, f2, f2
f6, f2, f1

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)

b) Suponiendo una frecuencia de 2 GHz, cunto tarda en procesarse la


secuencia de instrucciones? Cul es la velocidad pico del procesador?
NOTA: La suma y la resta consumen 1 ciclo de reloj, la multiplicacin tres ciclos y la divisin cuatro
ciclos. Considere que slo hay un multiplicador, un divisor, y dos unidades para
sumar/restar, y que no hay limitaciones en la capacidad de los bferes. Se supone que f1, f2 y
f5 tienen valores previos.

Solucin
La Figura 24 muestra una traza de la ejecucin del programa de la que puede obtener su tiempo de
ejecucin, los ciclos en los que se emite cada instruccin. Tambin ilustra los riesgos RAW
ocasionados entre las instrucciones (3), (4) y (6) y la instruccin (1) ocasionados por el uso del registro
f1.
INSTRUCCIN
multd f1, f1, f5
addd f2, f2, f5
divd
f4, f1, f2
addd f6, f1, f5
multd f5, f2, f2
subd
f6, f2, f1

1
IF
IF

2
ID
ID
IF
IF

3
EX
ID
ID
IF
IF

4
EX
ROB

ID
ID

6
ROB

EX
EX
EX

7
8
WB
WB
EX
ROB
ROB
ROB

10

11

ROB

WB
WB

12

WB
WB

Figura 24. Traza de la ejecucin del cdigo del problema 12.

La evolucin de bfer de reordenamiento se muestra en la Tabla 11, marcando en negrita los cambios
que se producen en cada ciclo de la ejecucin:

En el ciclo 2 se decodifican las instrucciones (1) y (2) y se introducen en el ROB.

En el ciclo 3 se decodifican las instrucciones (3) y (4) y se introducen en el ROB.

En el ciclo 4 se decodifican las instrucciones (5) y (6), se introducen en el ROB y se


escribe el resultado de la instruccin (2).
En el ciclo 6 se escribe el resultado de la instruccin (1).
En el ciclo 7 se retiran las instrucciones (1) y (2) y se escribe el resultado de las
instrucciones (4) y (6).

En el ciclo 8 se escribe el resultado de la instruccin (5).

En el ciclo 10 se escribe el resultado de la instruccin (3).

En el ciclo 11 se retiran las instrucciones (3) y (4).

En el ciclo 12 se retiran las instrucciones (5) y (6).

CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

multd

f1

addd

f2

multd

f1

addd

f2

divd

f4

addd

f6

multd

f1

addd

f2

f2 + f5

divd

f4

addd

f6

multd

f5

subd

f6

multd

f1

f1 f5

addd

f2

f2 + f5

divd

f4

addd

f6

multd

f5

subd

f6

divd

f4

addd

f6

f1 + f1

multd

f5

subd

f6

f2 f1

divd

f4

addd

f6

f1 + f1

multd

f5

f2 f2

subd

f6

f2 f1

divd

f4

f1 / f2

addd

f6

f1 + f1

multd

f5

f2 f2

subd

f6

f2 f1

multd

f5

f2 f2

subd

f6

f2 f1

10

11

Tabla 11. Evolucin del ROB en el problema 12.

En cuanto al tiempo de ejecucin de la secuencia, suponiendo una frecuencia del procesador de


2 GHz, el tiempo de ejecucin de este fragmento de cdigo sera:
T

nmero de ciclos
12

6 ns
F
2 109

Para la calcular la velocidad pico, como se pueden retirar hasta dos instrucciones por ciclo, y la
frecuencia del procesador es de 2 GHz, suponiendo que no hubiera atascos en el cauce se podra
alcanzar:

Vpico tasa de retirada F 2 2 109 4 109 instrucciones/s

13.

Suponga un procesador superescalar en que se captan y decodifican dos instrucciones por


ciclo, se emiten tres instrucciones por ciclo como mximo (con emisin desordenada y no
alineada, sin estaciones de reserva), y se retiran hasta dos instrucciones por ciclo como
mximo. La emisin y la ejecucin son desordenadas, y las instrucciones, una vez
decodificadas, se introducen en un bfer de reordenamiento (ROB) que permite la
finalizacin ordenada del procesamiento de las instrucciones.
a) Indique las dependencias entre instrucciones, los ciclos en los que se emiten
las instrucciones para su ejecucin y cmo evolucionara el bfer de
reordenamiento hasta que se hayan retirado todas las instrucciones de la
siguiente secuencia de instrucciones almacenadas en la cola de instrucciones
captadas:
multd
addd
multd
addd
addd
subd

f1, f1, f2
f3, f3, f2
f4, f1, f3
f5, f4, f2
f3, f1, f3
f5, f2, f1

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)

b) Suponiendo una frecuencia de 3.0 GHz, cunto tarda en procesarse la


secuencia de instrucciones? Cul es la velocidad pico del procesador?
NOTA: La suma y la resta consumen dos ciclos de reloj y la multiplicacin cuatro ciclos. Considere
que no hay limitaciones en la capacidad de los bferes, pero slo tiene un multiplicador y dos
sumadores/restadores. Se supone que f1, f2, y f3 tienen valores vlidos previos.

Solucin
Ya que el procesador no dispone de estaciones de reserva, la lgica de emisin tiene que esperar a que
los operandos le sean facilitados por la lgica de bypass, por tanto, las dependencias RAW afectarn al
orden de emisin de las instrucciones. Por otro lado, como se pueden decodificar hasta dos
instrucciones por ciclo y emitir hasta tres, suponemos que cada una de estas tareas se realizarn en
etapas diferentes del cauce. Es decir, que la etapas sern IF para captar instrucciones, ID para
decodificarlas, EX para ejecutarlas, ROB para escribir los resultados en el ROB y WB para retirar las
instrucciones del cauce. La Figura 25 muestra una traza de la ejecucin del fragmento de cdigo del
enunciado en la que se muestra el nmero de ciclos que tarda en ejecutarse, el momento en que se
emite cada instruccin y los siguientes riesgos RAW entre instrucciones:

Las instrucciones (3), (5) y (6) dependen de la instruccin (1) por f1.

La instruccin (4) depende de la instruccin (3) por f4.

INSTRUCCIN

multd
addd
multd
addd
addd
subd

f1, f1, f2
f3, f3, f2
f4, f1, f3
f5, f4, f2
f3, f1, f3
f5, f2, f1

1
IF
IF

2
ID
ID
IF
IF

4
EX

ID
ID
IF
IF

5
EX
ROB

7
ROB

8
WB
WB

EX
ID
ID

EX
EX

10

11

12

ROB WB
EX

ROB
ROB

Figura 25. Traza de la ejecucin del cdigo del problema 13.

13

14

ROB

WB
WB

15

WB

CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

multd

f1

addd

f3

multd

f1

addd

f3

multd

f4

addd

f5

multd

f1

addd

f3

multd

f4

addd

f5

addd

f3

subd

f5

multd

f1

addd

f3

f3 + f2

multd

f4

addd

f5

addd

f3

subd

f5

multd

f1

f1 f2

addd

f3

f3 + f2

multd

f4

addd

f5

addd

f3

subd

f5

multd

f4

addd

f5

addd

f3

subd

f5

multd

f4

addd

f5

addd

f3

f1 + f3

subd

f5

f2 f1

multd

f4

f1 f3

addd

f5

addd

f3

f1 + f3

subd

f5

f2 f1

addd

f5

addd

f3

f1 + f3

subd

f5

f2 f1

11

12

Tabla 12. Evolucin del ROB en el problema 13.

CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

13

addd

f5

f4 + f2

addd

f3

f1 + f3

subd

f5

f2 f1

subd

f5

f2 f1

14

Tabla 12. Evolucin del ROB en el problema 13.

En cuanto a la evolucin del ROB, la Tabla 12 muestra los cambios que se producen cada ciclo
resaltados en negrita:

En el ciclo 2 se decodifican las instrucciones (1) y (2) y se introducen en el ROB.

En el ciclo 3 se decodifican las instrucciones (3) y (4) y se introducen en el ROB.

En el ciclo 4 se decodifican las instrucciones (5) y (6) y se introducen en el ROB.

En el ciclo 5 se almacena el resultado de la instruccin (2) en el ROB.

En el ciclo 7 se almacena el resultado de la instruccin (1) en el ROB.

En el ciclo 8 se retiran las instrucciones (1) y (2) y se escriben sus resultados en los
registros de la arquitectura.

En el ciclo 9 se almacenan los resultados de las instrucciones (5) y (6) en el ROB.

En el ciclo 11 se almacena el resultado de la instruccin (3) en el ROB.

En el ciclo 12 se retira la instruccin (3).

En el ciclo 13 se almacena el resultado de la instruccin (4) en el ROB.

En el ciclo 14 se retiran las instrucciones (4) y (5).

En el ciclo 15 se retira la instruccin (6).

Si el procesador funciona a 3 GHz, el tiempo de procesamiento ser de:


T

nmero de ciclos
15

5 ns
F
3 109

Para la calcular la velocidad pico, como slo se pueden retirar hasta dos instrucciones por ciclo,
tenemos:
Vpico tasa de retirada F 2 3 109 6 109 instrucciones/s

14.

Considere que el fragmento de cdigo siguiente:


lf
lf
addf
sf
lf
addf
multf

f3, 0(r1)
f2, 8(r1)
f4, f2, f3
16(r1), f4
f5, 16(r2)
f6, f5, f2
f6, f6, f4

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
; (7)

sf
addi
lf
multf
sf

8(r2), f6
r3, r2, #32
f7, 0(r3)
f8, f7, f3
0(r3), f8

; (8)
; (9)
; (10)
; (11)
; (12)

se ejecuta en un procesador superescalar que es capaz de captar (IF), decodificar/emitir


(ID/ISS) y finalizar (WB) 4 instrucciones/ciclo. El procesador utiliza un ROB para realizar el
renombramiento y la finalizacin ordenada y dispone de tres estaciones de reserva de 3 lneas
cada una (una para las instrucciones de acceso a memoria, otra para las operaciones de coma
flotante, y otra para las operaciones con enteros). Las estaciones de reserva pueden enviar
una instruccin por ciclo a cada una de las unidades funcionales conectadas a ellas (la
velocidad de envo depende, por tanto, del nmero de unidades que estn conectadas a cada
estacin). El procesador slo permite que las instrucciones load no especulativas adelanten a
las instrucciones store pendientes. Es decir, que no permite accesos especulativos a memoria.
a) Indique el nmero de ciclos que tardara en ejecutarse el conjunto de
instrucciones anterior suponiendo envo desordenado desde las estaciones
de reserva a las unidades funcionales.
b) Y si el envo fuera ordenado desde las estaciones de reserva para
operaciones con enteros y operaciones con datos en coma flotante, pero
desordenado para la estacin de acceso a memoria?
NOTA: Considere que, conectadas a la estacin de reserva para el acceso a memoria, tiene una
unidad funcional de carga con un retardo de dos ciclos y una de almacenamiento con retardo
de un ciclo; conectadas a la estacin de reserva para enteros tiene dos ALU con retardo de
un ciclo; y, conectadas a la estacin de reserva para coma flotante tiene una unidad de
multiplicacin con tres ciclos de retardo y dos unidades de suma con dos ciclos de retardo.
No hay lmite en el nmero de lneas de la cola de instrucciones y del ROB.

Solucin
Suponiendo un envo desordenado para todas las estaciones de reserva, el cdigo tardara 25 ciclos en
ejecutarse, tal y como se muestra en la Figura 26. A continuacin se describen las causas de los
retrasos de las instrucciones de la figura:

En el enunciado se especifica que las cargas podrn adelantar a los


almacenamientos siempre que no sean especulativas, es decir cuando se sepa que se
va a acceder a direcciones de memoria diferentes. Las instrucciones (5) y (4),
acceden a memoria con el mismo desplazamiento y dos registros ndice diferentes
(r2 y r1), con lo que si r2 tuviera un valor diferente al de r1, la instruccin (5) podra
adelantar a la (4). Como no sabemos los valores de estos registros, se ha supuesto el
peor caso, que es la coincidencia de r1 y r2, lo que obliga a que la instruccin (5)
tenga que esperar a la (4). Por otro lado, las instrucciones (10) y (8) acceden a
posiciones de memoria diferentes, ya que la instruccin (8) almacena en la posicin
8 + r2 y la instruccin (10) lee de la posicin 0 + r3 = 32 + r2. Como suponemos
que las direcciones efectivas se calculan en el primer ciclo de la etapa de ejecucin
de las instrucciones de acceso a memoria, aunque las direcciones finales sean
diferentes, este hecho no se puede comprobar por la lgica de envo de la estacin
de reserva, lo que obliga a enviar primero el almacenamiento y luego la carga.
Como las estaciones de reserva tienen slo tres entradas cada una, cuando alguna se
llena no permite que se puedan emitir ms instrucciones hacia ella hasta que enve
alguna instruccin y deje algn hueco. Este fenmeno se puede apreciar en la

instruccin (8), que no puede entrar hasta que se enva la instruccin (2) y se
quedan en la estacin de reserva las instrucciones (4) y (5). Tambin se crea un
cuello de botella en la estacin de reserva de acceso a memoria con la instruccin
(10), que no puede emitirse hasta que se enva la instruccin (4), y que retrasa la
emisin de la instruccin (11), ya que la emisin es ordenada. Por ltimo, la
instruccin (12) se bloquear en la cola de instrucciones hasta que se enve a
ejecutar la instruccin (5).

En cuanto a las colisiones en las unidades de ejecucin, la instruccin (2) debe


esperar a que la (1) libere la unidad de carga.
Por ltimo, se producen riesgos RAW entre las instrucciones (2) - (3) por f2,
(3) - (4) por f4, (5) - (6) por f5, (6) - (7) - (8) por f6, (10) - (11) por f7, y (11) - (12)
por f8.

INSTRUCCIN

lf
lf
addf
sf
lf
addf
multf
sf
addi
lf
multf
sf

f3, 0(r1)
f2, 8(r1)
f4, f2, f3
16(r1), f4
f5, 16(r2)
f6, f5, f2
f6, f6, f4
8(r2), f6
r3, r2, #32
f7, 0(r3)
f8, f7, f3
0(r3), f8

1
IF
IF
IF
IF

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
ID
EX ROB WB
ID
EX ROB WB
ID
EX ROB WB
ID
EX ROB WB
IF ID
EX ROB WB
IF ID
EX ROB WB
IF ID
EX
ROB WB
IF
ID
EX ROB WB
IF
ID EX ROB
WB
IF
ID
EX ROB WB
IF
ID
EX
ROB WB
IF
ID
EX ROB WB

Figura 26. Traza de la ejecucin del cdigo del problema 14.

En el caso de que el envo fuese desordenado slo para la estacin de reserva de acceso a memoria, el
resultado sera exactamente el mismo, ya que debido a los riesgos del programa, todas las instrucciones
se han enviado ordenadamente.

15.

En un programa, una instruccin de salto condicional (a una direccin de salto anterior) tiene
el siguiente comportamiento en una ejecucin de dicho programa:
SSNNNSSNSNSNSSSSSN
donde S indica que se produce el salto y N que no. Indique la penalizacin efectiva que se
introduce si se utiliza:
a) Prediccin fija (siempre se considera que se no se va a producir el salto).
b) Prediccin esttica (si el desplazamiento es negativo se toma y si es positivo
no).
c) Prediccin dinmica con dos bits, inicialmente en el estado (11).
d) Prediccin dinmica con tres bits, inicialmente en el estado (111).

NOTA: La penalizacin por saltos incorrectamente predichos es de 5 ciclos y para los saltos
correctamente predichos es 0 ciclos.

Solucin
En el caso de usar prediccin fija, se producira un fallo del predictor cada vez que se tome el salto, tal
y como muestra la Tabla 13. Por tanto, la penalizacin total sera de:

Pfijo Ffijo P 11 5 55 ciclos


PREDICCIN

EJECUCIN

PENALIZACIN

Tabla 13. Comportamiento del predictor fijo en el problema 15.

Si se usa el predictor esttico, como la direccin de destino del salto es anterior, se producir un fallo
en la prediccin cuando no se produzca el salto, tal y como muestra la Tabla 14. Por tanto, la
penalizacin total sera de:
Pesttico N esttico P 7 5 35 ciclos
PREDICCIN

EJECUCIN

PENALIZACIN

Tabla 14. Comportamiento del predictor esttico en el problema 15.

En cuanto al predictor dinmico con dos bits de historia, la Tabla 15 muestra el estado del predictor
antes de ejecutar el salto, la prediccin que realiza el predictor, el comportamiento del salto y si se
produce o no penalizacin. Teniendo en cuanta los fallos que se producen, la penalizacin total sera
de:
P2 bits F2 bits P 11 5 55 ciclos
ESTADO

11

11 11 10 01 00 01

10 01 10 01 10 01 10 11 11 11 11

PREDICCIN

N N

EJECUCIN

PENALIZACIN

Tabla 15. Comportamiento del predictor dinmico con dos bits de historia en el problema 15.

Por ltimo, en la Tabla 16 se indican los bits de historia que existen antes de que se ejecute la
instruccin, la prediccin que determinan esos bits, y lo que finalmente ocurre (segn se indica en la
secuencia objeto del problema). La ltima fila indica si ha habido penalizacin (no coinciden la
prediccin y lo que ocurre al final). Teniendo en canta esta informacin, tenemos que la penalizacin
total es de:
P3 bits F3 bits P 10 5 50 ciclos
ESTADO

111 111 111 011 001 000 100 110 011 101 010 101 010 101 110 111 111 111

PREDICCIN

EJECUCIN

PENALIZACIN

N N

Tabla 16. Comportamiento del predictor dinmico con tres bits de historia en el problema 15.

Como se puede ver, en la secuencia de ejecuciones de la instruccin de salto considerada en este


problema, el mejor esquema de prediccin es la prediccin esttica que aqu se utiliza. El esquema de
prediccin de salto dinmico con dos bits es igual de bueno (o malo) que la prediccin fija.

As, se puede indicar que la eficacia de un esquema de salto depende del perfil de saltos a que de lugar
la correspondiente instruccin de salto condicional. En la prctica, los esquemas de prediccin
dinmica suelen funcionar mejor que los de prediccin esttica porque las instrucciones de salto suelen
repetir el comportamiento de su ejecucin previa. En ese sentido, la secuencia utilizada en este
problema es bastante atpica.

16.

Un procesador utiliza un esquema de prediccin dinmica de saltos de dos niveles similar al


del Pentium III: tres bits de historia se utilizan para indicar si en las tres ltimas ejecuciones
de la instruccin hubo o no hubo salto, y esos tres bits de historia sirven de puntero a 8
contadores de dos bits, cada uno de los cuales se utiliza para realizar la prediccin
correspondiente segn su estado como en un esquema de prediccin de dos bits. En la
primera ejecucin, los tres bits que apuntan a los contadores de dos bits estn a 000 y los bits
de los contadores de dos bits se inicializan a 00 (predice no saltar) si la instruccin de salto es
hacia adelante y a 11 (predice saltar) si el salto es hacia atrs. Si la prediccin es correcta no
hay penalizacin, pero si es incorrecta, la penalizacin es de cuatro ciclos.
Cul es la penalizacin para la secuencia N1 S2 N3 N1 N2 S3 N1 S2 N3 S1 S2 N3, teniendo en
cuenta que S significa que la instruccin de salto dar lugar a un salto, N que no dar lugar a
un salto, y cada subndice (1, 2, 3) hace referencia a una instruccin de salto distinta?

NOTA: La instruccin 1 salta hacia atrs y las instrucciones 2 y 3 saltan hacia adelante.

Solucin
Como para cada instruccin de salto se utiliza un contador y unos bits de estado independientes del
resto de los saltos, consideraremos cada una de las instrucciones de salto por separado. As, para la
primera instruccin tenemos el comportamiento N1 N1 N1 S1, para la segunda S2 N2 S2 S2, y para la
tercera N3 S3 N3 N3.
SALTO 1

SALTO 2

SALTO 3

000

000

000

000

ESTADO DEL CONTADOR

11

10

01

00

PREDICCIN

EJECUCIN

PENALIZACIN

000

100

010

101

ESTADO DEL CONTADOR

00

00

00

00

PREDICCIN

EJECUCIN

PENALIZACIN

LTIMAS ITERACIONES

LTIMAS ITERACIONES

000

000

100

010

ESTADO DEL CONTADOR

00

00

00

00

PREDICCIN

EJECUCIN

LTIMAS ITERACIONES

PENALIZACIN

Tabla 17. Comportamiento del predictor dinmico en el problema 16.

La Tabla 17 muestra el comportamiento del predictor, as como la evolucin de los bits de historia que
se usan para cada salto a lo largo de la ejecucin del cdigo. Con ayuda de esta tabla tenemos que en la

ejecucin del primer salto se producen tres fallos, en la del segundo otros tres, y en la del tercero una
ms, por lo que la penalizacin total obtenida es de:
Ptotal F1 F2 F3 P 3 3 1 4 28 ciclos

17.

Un procesador utiliza un esquema de prediccin dinmica de saltos de dos niveles similar al


del Pentium III: tres bits de historia se utilizan para indicar si en las tres ltimas ejecuciones
de la instruccin hubo o no hubo salto, y esos tres bits de historia sirven de puntero a 8
contadores de dos bits, cada uno de los cuales se utiliza para realizar la prediccin
correspondiente, segn su estado, como en un esquema de prediccin dinmica de dos bits.
En la primera ejecucin, los tres bits que apuntan a los contadores de dos bits estn a 000 y
los bits de los contadores de dos bits se inicializan a 00 (predice no saltar) si la instruccin de
salto es hacia adelante, y a 11 (predice saltar) si el salto es hacia atrs. Si la prediccin es
correcta no hay ciclos de penalizacin y si es incorrecta hay cuatro ciclos.
Cual es la penalizacin para el bucle que se indica a continuacin, para 1 < d < 8?
for (i = 1 ; i <= 10 ; i ++)
{
b[i] = a[i] + d;
d = d + 1;
if (d > 8) then goto etiqueta;
}
etiqueta:
Comprelo con un esquema de prediccin esttica que predice saltar si el salto es hacia atrs
y no saltar si el salto es hacia adelante.

Solucin
Una vez traducido el cdigo a ensamblador tendra un aspecto similar a este:
bucle:

saltar a etiqueta

; S1

saltar a bucle

; S2

etiqueta:
En este cdigo hay dos saltos, que a partir de ahora notaremos como S1 y S2 (si saltan) o N1 y N2 (si
no saltan). Para valores de d tales que 1 < d < 8 el patrn de saltos del cdigo es:

N 1S 2 8d S1
es decir, que el salto del bucle siempre se va a tomar y el salto hacia delante no se tomar nunca
excepto la ltima vez, en la que se saldr del bucle y continuar hacia delante. Como tenemos un
predictor dinmico de dos niveles, para cada salto habr un conjunto de 8 contadores de dos bits, que
se inicializarn a 00 para el salto hacia delante y a 11 para el salto hacia atrs, y se seleccionar uno de
estos 8 contadores para hacer la prediccin en funcin del los 3 bits de historia (segn el
comportamiento del salto en las ltimas tres iteraciones).

SALTO

ITERACIONES

SALTO 1

LTIMA

LTIMAS ITERACIONES

000

000

000

000

000

ESTADO DEL CONTADOR

00

00

00

00

00

PREDICCIN

EJECUCIN

PENALIZACIN
SALTO 2

LTIMAS ITERACIONES

000

100

110

111

111

ESTADO DEL CONTADOR

11

11

11

11

11

PREDICCIN

EJECUCIN

PENALIZACIN

Tabla 18. Comportamiento del predictor dinmico en el problema 17.

Segn la Tabla 18, en la ltima iteracin el salto S2 no se llega a ejecutar, ya que se sale del bucle por el
salto S1. Los predictores aciertan en el comportamiento del salto hacia atrs, que se toma todas las
veces, y en todas las ejecuciones del salto hacia adelante menos en la ltima, por lo que slo se
equivocan una vez. Por tanto, la penalizacin total es de:
Pdinmico F1 F2 P 1 0 4 4 ciclos

En el caso de que el mecanismo de prediccin fuera esttico, se usara el mismo predictor para todos
los saltos. Este predictor, segn el enunciado del problema, realizara la siguiente prediccin:

N 1S 2 8d N 1
Teniendo en cuenta el comportamiento del fragmento de cdigo, el predictor esttico slo se
equivocara en el ltimo salto, con lo que volvemos a obtener una penalizacin de
Pesttico F P 1 4 4 ciclos

18.

Considere el bucle:
for (i = 1; i < = 10 ; i ++)
{
b[i] = a[i] * c;
c = c + 1;
if (c > 10) then goto etiqueta;
}
etiqueta:
Indique cul es la penalizacin efectiva debida a los saltos, en funcin del valor inicial de c
(nmero entero), considerando que el procesador utiliza:
a) Prediccin fija (siempre se considera que se va a producir el salto).
b) Prediccin esttica (si el desplazamiento es negativo se toma y si es positivo
no).
c) Prediccin dinmica con un bit (1 = Saltar; 0 = No Saltar; Inicialmente est
a 1).

d) Cul de los tres esquemas anteriores es ms eficaz por trmino medio si


hay una probabilidad del 25% de que c sea menor o igual a 0, una del 30%
de que sea mayor o igual a 10; y una del 45% de que sea cualquier nmero
entre 1 y 9, siendo todos equiprobables?
NOTA: La penalizacin por saltos incorrectamente predichos es de 4 ciclos y para los saltos
correctamente predichos es 0 ciclos.

Solucin
Al igual que en el ejercicio anterior, al traducir el fragmento de cdigo a ensamblador se codificarn
dos saltos: S1, que estar dentro del bucle y saltar hacia etiqueta, y S2, que ser el salto al final del bucle
para iniciar otra iteracin. Dependiendo del valor inicial de c se pueden distinguir tres
comportamientos diferentes de los saltos:
1.

c 0: El salto S1 no salta nunca y el salto S2 salta 9 veces (el bucle realiza 10


iteraciones, el mximo de iteraciones del bucle):

N 1S 2 9 N 1 N 2
2.

1 c < 10:

Si c = 9: N 1S 2 S1

Si c = 8: N 1S 2 2 S1

Si c = 1: N 1S 2 9 S1

Es decir:

N 1S 2 10 c S1
3.

c 10:
S1

ya que no se realizara ninguna iteracin completa, al verificarse la condicin de


salto de la instruccin condicional que hay dentro del bucle.
Una vez obtenidos los comportamientos de los saltos correspondientes a los distintos valores posibles
de c, se pasa a considerar cada uno de los esquemas de prediccin indicados. Para el caso de un
predictor fijo que est diseado para predecir que siempre se va a tomar el salto tendramos las
siguientes penalizaciones en funcin del valor de c:
1.

c 0: Como el comportamiento de la secuencia de saltos es N 1S 2 9 N 1 N 2 y la


prediccin es S1S 2 10 , tendramos un fallo por cada salto que no se tome, es decir:
Pfijo1 Ffijo1 P 9 1 1 4 44 ciclos

2.

1 c < 10: En este caso, el comportamiento es N 1S 2 10 c S1 , la prediccin sigue siendo saltar siempre, por lo que tendramos una penalizacin de:

Pfijo2 Ffijo2 P 10 c 4 ciclos

3.

c 10: En este caso, como el comportamiento de la secuencia es S1 y la prediccin


ser siempre saltar, no se producir ningn fallo, por lo que:
Pfijo3 Ffijo3 P 0 4 0 ciclos

En el segundo apartado del problema se nos pide que estimemos la penalizacin en el caso de usar un
predictor esttico que suponga que los saltos hacia atrs se tomarn siempre y los saltos hacia adelante
no se tomarn nunca. Dependiendo del valor de c tendremos:
1.

c 0: El comportamiento de los saltos sigue siendo N 1S 2 9 N 1 N 2 , pero en este


caso la prediccin es N 1S 2 10 . Por tanto, tendemos un fallo en la ltima ejecucin
del segundo salto. La penalizacin ser de:
Pesttico1 Festtico1 P 1 4 4 ciclos

2.

1 c < 10: En este caso, el comportamiento es N 1S 2 10 c S1 , por lo que se


cometera un fallo cuando el salto S1 salte hacia adelante:
Pesttico2 Festtico2 P 1 4 4 ciclos

3.

c 10: En este caso, como el comportamiento de la secuencia es S1 y el predictor


asume que los saltos hacia adelante no se toman, se cometer un nico fallo, por lo
que la penalizacin ser:
Pesttico3 Festtico3 P 1 4 4 ciclos

Por consiguiente, para cualquier valor de c, este esquema de prediccin siempre da lugar a 4 ciclos de
penalizacin.
El ltimo esquema de prediccin que se propone en este ejercicio es un predictor dinmico con un bit
de historia. En este caso, al tratarse de un esquema dinmico, habr un predictor para cada salto, cuyo
bit de historia estar inicializado a 1, e ir cambiando a 1 0 en funcin de la ltima ejecucin del salto
(1 si salt y 0 si no lo hizo). En funcin del valor de c tendremos:
1.

c 0: El comportamiento N 1S 2 9 N 1 N 2 , se debe separar para cada salto, ya que


cada salto tendr un bit de historia independiente.

Para el primer salto tendremos el comportamiento N 1 10 y la prediccin


S1 N 1 9 , ya que como los bits de historia estn inicializados a 1, la primera

vez se predecir saltar y se fallar la prediccin. El resto de las


predicciones se realizarn en funcin de la ltima ejecucin del salto, y
como nunca salta, se predecirn todas correctamente.

Para el segundo salto tendremos el comportamiento

S 2 9 N 2 y la

prediccin S 2 10 , ya que el bit de historia comenzar inicializado a cero y


el salto se tomar todas las veces menos la ltima.
Por tanto, la penalizacin total ser de:
Pdinmico1 F1 F2 P 1 1 4 8 ciclos

2.

1 c < 10:

Para el primer salto tendremos el comportamiento

N 1 10 c S1 y la

prediccin S1 N 1 10 c . Por tanto, se cometern dos fallos, en el primer y


en el ltimo salto de la secuencia.

Para el segundo salto tendremos el comportamiento S 2 10 c , que coincide


con la prediccin, por lo que no se cometer ningn fallo para este salto.

Por tanto, la penalizacin total ser de:


Pdinmico2 F1 F2 P 2 0 4 8 ciclos

3.

c 10: Como el comportamiento de la secuencia es S1 , el predictor del segundo


salto no se llega a usar, y como el predictor del primero est inicizalizado a 1,
acertar la prediccin, por lo que no se producir ningn fallo. Por tanto:
Pdinmico3 0 0 P 0 ciclos

Una vez que hemos determinado la penalizacin de la secuencia para cada tipo de predictor, podemos
pasar a resolver la ltima cuestin del problema dada la distribucin de probabilidad de la variable c
que se da en el enunciado. Para el caso del predictor fijo, y teniendo en cuenta que todos los valores
de c entre 1 y 9 son equiprobables, tenemos:

Pfijo 0.25 Pfijo1 0.45 Pfijo 2 0.30 Pfijo 3

0.25 44 0.45

10 c 4

c 1
9

0.30 0 20 ciclos

Para el predictor esttico tenemos:


Pesttico 0.25 Pesttico1 0.45 Pesttico2 0.30 Pesttico3 0.25 4 0.45 4 0.30 4 4 ciclos

Y para el predictor dinmico:


Pdinmico 0.25 Pdinmico1 0.45 Pdinmico2 0.30 Pdinmico3 0.25 8 0.45 8 0.30 0 5.6 ciclos

Como se puede ver, para este bucle, y para la distribucin de probabilidad de los valores de c, el
esquema de prediccin ms eficiente corresponde a la prediccin esttica. No obstante, como se ha
visto, esta situacin depende de las probabilidades de los distintos valores de c. Si, por ejemplo, la
probabilidad de que c est entre 1 y 9 fuera de 0.15, la penalizacin para la prediccin dinmica con 1
bit de historia sera de 3.2 ciclos, mientras que la prediccin esttica seguira presentando una
penalizacin de 4 ciclos.

19.

En la secuencia de instrucciones DLX siguientes:

inicio:

addi
add
lw
add
subi
beqz
addf
beqz

r1, r0, #4
r4, r0, r1
r2, dato
r5, r2, r0
r3, r1, r2
r3, final
f3, f2, f1
r5, final

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
; (7)
; (8)

addf
addi
subi
subi
bnez

f3, f2, f1
r2, r2, #1
r5, r5, #1
r4, r4, #1
r4, inicio

; (9)
; (10)
; (11)
; (12)
; (13)

final:
a) Indique cul es la penalizacin efectiva debida a los saltos, en funcin del
valor inicial de dato (nmero entero mayor o igual que cero), considerando
que el procesador utiliza prediccin dinmica con dos bits.
b) Cul es la penalizacin media si la probabilidad de que dato sea menor que
5 es un 80%?
NOTA: La penalizacin por saltos incorrectamente predichos es de 4 ciclos y para los saltos
correctamente predichos es 0 ciclos. Para hacer la prediccin en la primera ejecucin de la
instruccin de salto se utiliza un esquema de prediccin esttica (salta si el salto es hacia atrs
y no salta si el salto es hacia adelante) y el estado inicial es 00 si se ha predicho no saltar y 11
si se ha predicho saltar.

Solucin
En la secuencia de instrucciones del problema aparecen tres saltos, que a partir de ahora notaremos
coma S1, S2 y S3 como se muestra a continuacin:

inicio:

final:

addi
add
lw
add
subi
beqz
addf
beqz
addf
addi
subi
subi
bnez

r1, r0, #4
r4, r0, r1
r2, dato
r5, r2, r0
r3, r1, r2
r3, final
f3, f2, f1
r5, final
f3, f2, f1
r2, r2, #1)
r5, r5, #1)
r4, r4, #1
r4, inicio

; (S1)
; (S2)

; (S3)

Tras analizar el cdigo podemos descubrir que:

El salto S1 controla el contador ascendente r2, que se inicializa con el valor dato y
que provoca la salida del bucle cuando r2 alcanza el valor 4 (siempre que dato haya
sido inicializado a un valor menor o igual que 4).
El salto S2 controla el contador descendente r5, que se inicializa con el valor dato y
que provoca la salida del bucle cuando r5 alcanza el valor 0.
El salto S3 controla el contador descendente r4, que se inicializa con el valor
inmediato 4 y que permite la iteracin del bucle un mximo de 4 veces, ya que deja
de saltar hacia inicio cuando r4 vale 0.

DATO

>4

SALTO 1

SALTO 2

SALTO 3

Tabla 19. Comportamiento de los saltos del problema 19.

Dependiendo del valor de dato, los saltos se comportarn segn indica la Tabla 19, lo que se puede
resumir en los siguientes tres casos:
1.

2.

3.

Si dato < 2:

S1: N dato + 1.

S2: N dato S.

S3: S dato.

Si 2 dato 4:

S1: N 4 dato S.

S2: N 4 dato.

S3: S 4 dato.

Si dato > 4:

S1: N 4.

S2: N 4.

S3:. S 3 N

Una vez obtenidos estos casos, podemos pasar a estudiar el comportamiento del predictor:
1.

Si dato < 2, el predictor esttico acertar la primera vez para cada uno de los tres
saltos, inicializando los bits de estado de S1 a 00, de S2 a 00 y de S3 a 11. Como
despus de esta inicializacin todos los saltos repiten su comportamiento hasta el
final excepto S2, que es el que provoca la salida del bucle, todos los saltos sern bien
predichos a excepcin del ltimo salto de S2, con lo que la penalizacin total de de
1 fallo, es decir, 4 ciclos.

2.

Si 2 dato 4, el predictor esttico acertar la primera vez para cada uno de los
tres saltos, como pasaba en el caso anterior. Como despus de esta inicializacin
todos los saltos repiten su comportamiento hasta el final excepto S1, que es el que
provoca la salida del bucle, todos los saltos sern bien predichos a excepcin del
ltimo salto de S1, con lo que la penalizacin total de de 1 fallo, es decir, 4 ciclos.

3.

Si dato > 4, el predictor esttico tambin acertar la primera vez para cada uno de
los tres saltos. Como despus de esta inicializacin todos los saltos repiten su
comportamiento hasta el final excepto S3, que es el que provoca la salida del bucle,
todos los saltos sern bien predichos a excepcin del ltimo salto de S3, con lo que
la penalizacin total de de 1 fallo, es decir, 4 ciclos.

Como conclusin podemos decir que independientemente del valor de la variable dato, la secuencia de
instrucciones tiene una penalizacin de 4 ciclos debida a los saltos.

20.

Disponemos del siguiente cdigo DLX:


lw
add
inicio: lw
sgt
bnez
sub
beqz
mayor: add
fin:
sw
addi
seq
bnez
trap

r9, n
r10, r0, r0
r1, a(r10)
r2, r1, r0
r2, mayor
r1, r0, r1
r2, fin
r1, r1, r1
r1, a(r10)
r10, r10, #1
r3, r9, r10
r3, inicio
#0

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
; (7)
; (8)
; (9)
; (10)
; (11)
; (12)
; (13)

a) Suponiendo que el procesador que ejecutar este cdigo tiene un predictor


esttico que predice como tomados los saltos hacia atrs y como no
tomados los saltos hacia delante, y que la penalizacin en caso de errar la
prediccin es de 5 ciclos, qu penalizacin media se obtendr si slo el
10% de los elementos del vector a son positivos?
b) Se han aadido a este procesador nuevas instrucciones de salto condicional
para invertir el comportamiento del predictor de saltos. Estas nuevas
instrucciones aaden el sufijo n a las ya existentes y predicen como tomados
los saltos hacia delante y como no tomados los saltos hacia atrs.
Conociendo que slo el 10% de los elementos del vector a son positivos,
modifique el programa con estas nuevas instrucciones para minimizar la
penalizacin media debida a los saltos mal predichos. Qu penalizacin
media debida a los saltos tiene esta nueva versin del programa?

Solucin
En la secuencia de instrucciones del problema aparecen tres saltos, que a partir de ahora notaremos
como S1, S2 y S3 como se muestra a continuacin:

inicio:

mayor:
fin:

lw
add
lw
sgt
bnez
sub
beqz
add
sw
addi
seq
bnez
trap

r9, n
r10, r0, r0
r1, a(r10)
r2, r1, r0
r2, mayor
r1, r0, r1
r2, fin
r1, r1, r1
r1, a(r10)
r10, r10, #1
r3, r9, r10
r3, inicio
#0

; (S1)
; (S2)

; (S3)

Teniendo en cuenta el comportamiento del predictor esttico descrito en el enunciado y que solo el
10% de los valores del vector a son positivos, podemos descubrir que:

El salto S1 saltar hacia adelante el 10% de las iteraciones (dependiendo de si el


elemento es positivo), y cuando salte incurrir en una penalizacin de 5 ciclos.
El salto S2 saltar hacia adelante el 90% de las iteraciones (siempre que se ejecute y
no se haya saltado en S1), y cuando salte incurrir en una penalizacin de 5 ciclos.

El salto S3 controla el bucle, con lo que saltar hacia atrs en todas las iteraciones
excepto en la ltima, provocando una penalizacin de 5 ciclos.

Por tanto, para un vector a de tamao n, la penalizacin debida a los saltos mal predichos ser:
P F1 F2 F3 P 0.1n 0.9n 1 5 5n 1 ciclos

Tras esto podemos darnos cuenta de que el salto S2 est mal predicho todas las veces que se ejecuta
(90% de las iteraciones), as que haciendo uso de las nuevas instrucciones de salto para cambiar la
prediccin, deberamos sustituirlo por la siguiente instruccin:
beqzn

r2, fin

; (S2)

Esta instruccin cambia el comportamiento del predictor esttico y hace que no se equivoque nunca,
con lo que con esta mejora la penalizacin se reduce a:
P F1 F2 F3 P 0.1n 1 5

n 10
ciclos
2

Con este resultado podemos concluir que este cambio nos reduce la penalizacin debida saltos mal
predichos en casi un 90%.

21.

Se desea ejecutar el siguiente programa en un procesador superescalar:


lw
add
bucle: lw
sgt
bnz
sub
mayor: sw
add
sub
bnz

r1, N
r2, r0, r0
r3, X(r2)
r4, r3, r0
r4, mayor
r3, r0, r3
X(r2), r3
r2, r2, #4
r1, r1, #1
r1, bucle

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
; (7)
; (8)
; (9)
; (10)

Si el procesador usa un predictor dinmico con dos bits de historia que se inicializan con un
predictor esttico que predice como tomados los saltos hacia atrs y como no tomados los
saltos hacia delante, y que la penalizacin en caso de errar la prediccin es de 5 ciclos, qu
penalizacin se obtendr si X(0) = 1 y X(i + 1) = 1 X(i)? Qu penalizacin se obtendra si
se optimizara el cdigo usando sentencias de ejecucin condicional?

Solucin
El programa del enunciado calcula el valor absoluto de los elementos del vector X. Va procesndolos
de uno en uno y les cambia el signo si no son positivos. Consta de dos saltos, el primero de ellos, al
que notaremos como S1 en el cdigo de ms abajo, sirve para detectar si los nmeros son positivos y
el segundo, notado como S2, se emplea para volver a ejecutar el cdigo mientras queden elementos
por procesar en el vector X.

bucle:

mayor:

lw
add
lw
sgt
bnz
sub
sw
add

r1, N
r2, r0, r0
r3, X(r2)
r4, r3, r0
r4, mayor
r3, r0, r3
X(r2), r3
r2, r2, #4

; (S1)

sub
bnz

r1, r1, #1
r1, bucle

; (S2)

Para cada uno de los dos saltos, sus bits de historia se inicializarn segn el predictor esttico del
computador, que predice como tomados los saltos hacia atrs. Por tanto, los bits de historia de S1 se
iniciarn al valor 00, ya que es un salto hacia delante, y los de S2 al valor 11 porque salta hacia atrs.
Una vez inicializados los bits de historia, la penalizacin que introduzca cada uno de ellos depender
del comportamiento de cada salto. En el caso de S1, su comportamiento est determinado por el valor
de cada elemento del vector X. S1 saltar siempre que X(i) sea mayor que cero, y segn el enunciado,
el vector X es de la forma X = {1, 0, 1, 0, 1, 0,}, por lo que S1 saltar una vez s y otra no hasta que
se termine de procesar el vector X. El salto S2 saltar tantas veces como elementos tenga el vector X
menos una, es decir N 1 veces, ya que el programa se dedica a procesar dicho vector. Teniendo esto
en cuenta, el comportamiento del predictor ser el que indica la Tabla 20.
ITERACIN

N1

VALOR DE X

SALTO 1

BITS DE HISTORIA

00

01

00

01

01

00

PREDICCIN

EJECUCIN

PENALIZACIN

BITS DE HISTORIA

11

11

11

11

11

11

PREDICCIN

EJECUCIN

SALTO 2

PENALIZACIN

Tabla 20. Comportamiento del predictor dinmico en el problema 21.

Por tanto, la penalizacin que introduce debida a los saltos es:


N
Poriginal F1 F2 P 1 5 ciclos
2

Est claro que el comportamiento de S1 no puede ser aprendido por el predictor dinmico, por lo que
nos va a ocasionar muchas faltas, as que sera interesante cambiarlo por una sentencia de ejecucin
condicional, tal y como muestra el siguiente cdigo:

bucle:

lw
add
lw
sub
cmov.gt
sw
add
sub
bnz

r1, N
r2, r0, r0
r3, X(r2)
r4, r0, r3
r4, r3, r3
X(r2), r4
r2, r2, #4
r1, r1, #1
r1, bucle

En esta versin mantenemos el mismo nmero de instrucciones para ejecutar el algoritmo, y adems
evitamos el salto S1, que depende del valor de cada componente de X, por lo que la penalizacin total
del programa es de:
Poptimizacin F2 P 1 5 5 ciclos

22.

Se dispone de un procesador superescalar capaz de captar, decodificar y retirar hasta dos


instrucciones por ciclo, con una nica ventana de instrucciones con emisin desordenada y

no alineada, bfer de reordenamiento para el renombrado y la finalizacin ordenada, y una


latencia de dos ciclos para las instrucciones de carga de memoria y de un ciclo para las
instrucciones aritmticas con enteros y los almacenamientos. Se desea ejecutar el siguiente
programa en el procesador:

bucle:

lw
lw
add
add
subi
bnez
sw
trap

r1, n
r2, a
r3, r0, r0
r3, r3, r2
r1, r1, #1
r1, bucle
r3, b
#0

El procesador utiliza un predictor de saltos dinmico de dos bits que se consulta en el


momento de captar las instrucciones, de forma que si la direccin de memoria de la que se
est captando una instruccin se encuentra en el BTB, y la prediccin es saltar, guarda el
contenido actual de PC y se cambia por la direccin de destino del salto para que se empiece
a captar desde ah en el siguiente ciclo. Cuando la instruccin de salto entra en el bfer de
reordenamiento tras la decodificacin, se marca con un bit pred = 1 si el predictor decidi
tomar el salto o pred = 0 en caso contrario. Posteriormente, cuando se resuelve la condicin
del salto en la etapa de ejecucin, se comprueba si la prediccin se realiz con xito, y en
caso contrario, se marcan con flush = 1 todas aquellas instrucciones que se han introducido
en el cauce de forma especulativa para que no actualicen los registros al ser retiradas, y se fija
PC al valor guardado en el momento de la prediccin para continuar con la siguiente
instruccin en el siguiente ciclo. La primera vez que se capta un salto, obviamente no se
encuentra en el BTB, por lo que no se podr predecir su comportamiento hasta la etapa de
decodificacin, en la que se emplea un predictor esttico que predice como tomados todos
los saltos hacia atrs y crea una entrada en el BTB para los saltos encontrados.
a) Realice una traza de la ejecucin del programa en el procesador suponiendo
que n = 2 y a = 3. Cuntos ciclos tarda en ejecutarse el programa?
b) Estime la penalizacin (en ciclos) que se produce en el procesamiento del
salto tanto si acierta como si falla cada uno de los predictores (esttico y
dinmico) del procesador.
c) Cuntos ciclos de penalizacin en total se sufriran si n fuera igual a 100?
NOTA: Suponga que hay tantas unidades de ejecucin y de acceso a memoria como sea necesario.

Solucin
La Figura 27 muestra una traza de ejecucin del programa. La primera vez que se capta el salto se usa
el predictor esttico, que no puede realizar la prediccin hasta que se decodifica la instruccin. Por
tanto, se introduce una penalizacin de un ciclo, ya que mientras que se decodifica el salto entran en el
cauce las instrucciones sw y trap que se deben anular en el momento en el que se predice que el salto se
va a realizar (cuando se retiren no se modificarn los registros de la arquitectura).
En la etapa de ejecucin del salto se comprueba que la prediccin ha sido correcta y se procede a la
inicializacin del predictor dinmico creando una entrada en el BTB para estas instruccin de salto
con el estado 11 (saltar). A partir de ahora, todas las veces que se capte el salto, se captar junto con la
instruccin siguiente (sw), ya que las instrucciones se captan de dos en dos. En la etapa de captacin se
consultar el BTB y se descubrir que la instruccin captada es un salto con una prediccin de saltar,

as que se anular la instruccin sw y se comenzar a captar en el ciclo siguiente a partir de la


instruccin de destino del salto.
En la mayora de los casos se acertar la prediccin del salto, ya que se supone que un bucle va a iterar
bastantes veces. Sin embargo, en este problema el bucle slo tiene que iterar n = 2 veces, as que en la
segunda iteracin el predictor dinmico fallar. El procesador no se da cuenta del fallo de la
prediccin hasta que el salto termina la etapa EX, en la que se calcula la condicin del salto. En este
momento se anulan todas las instrucciones captadas especulativamente y se fija el contenido de PC a
la instruccin del camino secuencial. En total se pierden 2 ciclos. Tras introducir las instrucciones sw y
trap en el cauce, se sigue su ejecucin hasta que se retiran en el ciclo 13, momento en el que finaliza la
ejecucin del programa.
INSTRUCCIN
lw
r1, n
lw
r2, a

1
IF
IF

2
ID
ID

IF
IF

ID
ID

EX ROB
WB
EX ROB WB

IF
IF

ID
ID
IF
IF

EX
EX

5
6
ROB WB
ROB WB

add
add

r3, r0, r0
r3, r3, r2

subi
bnez
sw
trap
add
subi

r1, r1, #1
r1, bucle
r3, b
#0
r3, r3, r2
r1, r1, #1

bnez

r1, bucle

IF

ID

sw
add
subi
bnez
sw
sw
trap

r3, b
r3, r3, r2
r1, r1, #1
r1, bucle
r3, b
r3, b
#0

IF

Flush
IF Flush
IF Flush
IF
IF

PENALIZACIN

EX ROB
EX ROB
Flush
Flush
IF
ID EX
IF
ID EX

10

11

12

13

WB
WB

ROB WB
ROB WB
EX ROB WB

Flush
Flush
IF
ID
IF
ID

EX ROB WB
EX ROB WB

Figura 27. Traza de la ejecucin del cdigo del problema 22.

Analizado la traza del programa, podemos deducir que la penalizacin introducida por el predictor
esttico es de:

Pest_acierto = 1 ciclo (la prediccin se realiza en la etapa de decodificacin).

Pest_fallo = 2 ciclos (no se corrige hasta despus de la etapa de ejecucin).

mientras que la del predictor dinmico es de:

Pdin_acierto = 0 ciclos (la se realiza prediccin anticipada en la captacin).


Pdin_fallo = 2 ciclos (al igual que el predictor esttico, no se corrige hasta despus de
la etapa de ejecucin).

Por tanto, como el bucle itera n veces, la primera iteracin se predice con el predictor esttico, y el
resto con el dinmico, la expresin general para calcular su penalizacin es:
P n Pest_acierto n 2 Pdin_acierto Pdin_fallo 1 n 2 0 2 3 ciclos

ya que se acertarn todas las predicciones excepto la de la ltima iteracin, en la que se predecir saltar
y se fallar. Esta penalizacin se producir en cualquier ejecucin del bucle, independientemente del
valor de n.

23.

Suponga un procesador superescalar en que se captan, decodifican, emiten y retiran hasta dos
instrucciones por ciclo. La etapa de decodificacin se realiza de forma ordenada, ya que es en

esta etapa donde se introducen las instrucciones en un bfer de reordenamiento (ROB) que
permite su finalizacin ordenada. Por el contrario, la emisin es desordenada y se
implementa mediante estaciones de reserva individuales para cada unidad funcional. El
procesador utiliza prediccin dinmica de saltos con dos bits de historia. Para la primera
ejecucin de una instruccin de salto dada, el procesador predice saltar si la direccin de salto
es hacia direcciones inferiores, y no saltar si la direccin es mayor. Las instrucciones de salto
se procesan en la etapa de ejecucin y consumen un ciclo en esa etapa (en el siguiente ciclo
ya se tendra la direccin de salto correcta y se podra captar la instruccin correcta si la
prediccin de salto no hubiera sido correcta).
Suponiendo una frecuencia de 2 GHz, que el cauce se encuentra inicialmente vaco, y que
inicialmente r2 = 100000, para la siguiente secuencia de instrucciones:
bucle:

addd
multd
subd
loop
addd

f1, f1, f6
f6, f2, f5
f5, f1, f3
r2, bucle
f7, f1, f5

; (1)
; (2)
; (3)
; (4)
; (5)

a) Cunto tarda en procesarse la secuencia de instrucciones?


b) Cul es la velocidad pico del procesador?
NOTA: La instruccin loop decrementa el registro y salta si el valor del registro es distinto de cero. La
suma y la resta en coma flotante consumen dos ciclos de reloj y la multiplicacin en coma
flotante cuatro ciclos. Considere que no hay limitaciones en la capacidad de los bferes y en
el nmero de unidades funcionales. Se supone que todos los registros tienen valores vlidos
previos.

Solucin
Para responder al primer apartado es necesario realizar una traza de su ejecucin. En la Figura 28 se
muestra una traza en la que se supone que r2 = 3 iteraciones. En esta traza se observan los riesgos de
control:

La primera vez que se capta el salto, no se puede usar el predictor dinmico porque
no existe ninguna entrada en el BTB del procesador para l. Por tanto, en la etapa
de decodificacin, una vez que se identifique el salto, se incluir una entrada en el
BTB para que la siguiente vez que se capte se pueda usar el predictor dinmico, se
usar un predictor esttico que predecir saltar (el salto es hacia atrs), y se anularn
las dos instrucciones que se captaron errneamente tras el salto. Teniendo en
cuenta las etapas del cauce, el predictor esttico provocar una penalizacin de 1
ciclo para los saltos acertados.
A partir de la segunda iteracin, cada vez que se capte el salto se usar el predictor
dinmico, por lo que no hay penalizacin en caso de acertar. Esto ocurrir en el
resto de iteraciones menos en la ltima, en la que el predictor fallar y obtendremos
una penalizacin de 2 ciclos hasta captar la siguiente instruccin al salto, ya que es
en la etapa de ejecucin en la que se comprueba la correccin de la prediccin. Una
vez que se comprueba que fall la prediccin, se anulan todas las instrucciones
captadas especulativamente y se comienza a captar desde la direccin correcta para
terminar la ejecucin del programa.

Estos ciclos de penalizacin se solapan con los introducidos por los riesgos RAW entre las sucesivas
iteraciones del bucle a causa de f6 y f5, por lo que al final no influyen en el tiempo de ejecucin, que
est determinado por los riesgos RAW existentes en el cdigo.
INSTRUCCIN

addd f1, f1, f6


multd f6, f2, f5
subd f5, f1, f3
loop r2, bucle
addd f7, f1, f5
Sig. instruccin
addd f1, f1, f6
multd f6, f2, f5
subd f5, f1, f3
loop r2, bucle
addd f1, f1, f6
multd f6, f2, f5
subd f5, f1, f3
loop r2, bucle
addd f1, f1, f6
multd f6, f2, f5
subd f5, f1, f3
loop r2, bucle
addd f7, f1, f5

1
IF
IF

2
ID
ID

IF
IF

ID
ID

4
EX

5
6
7
8
ROB WB
EX
ROB WB

EX
EX ROB

IF
IF

10

11

12

13

14

15

16

17

18

ROB WB
WB
Flush
Flush

IF
IF

ID
ID
IF
IF

EX
ID
ID
IF
IF

ROB WB
EX
ROB WB

EX
EX ROB

EX
ID
ID
IF
IF

ROB WB

ID
ID
IF
IF

PENALIZACIN

P
TLI

WB
ROB WB
EX
ROB WB
EX

ROB WB

EX ROB
ID
ID
IF
IF

ID
ID
IF

WB
Flush
Flush
Flush
Flush
ID

EX

ROB WB

P
MLM

MLM

FIN

Figura 28. Traza de la ejecucin del cdigo del problema 23.

Si nos fijamos en el instante de tiempo en el que se retira la ltima instruccin del bucle en cada
iteracin, podemos estimar que una vez terminada la primera iteracin tras un tiempo TLI, el resto de
iteraciones irn terminando cada MLM ciclos, y una vez terminada la ejecucin del bucle, la ltima
instruccin tardar un ciclo ms en ejecutarse. Por tanto, para un nmero de iteraciones N, y teniendo
en cuenta que la frecuencia del procesador es de 2 GHz, podemos concluir que el tiempo de ejecucin
es de:
T N

TLI N 1 MLM FIN 9 N 1 4 1

2 N 3 109
F
2 109

por lo que si r2 = 100000, el tiempo de ejecucin ser:


T 100000 2 100000 3 109 200 s

Para contestar al segundo apartado, como el procesador puede completar hasta 2 instrucciones por
ciclo, su velocidad pico es de:
Rpico

24.

F
IPC F 2 2 109 4 109 instrucciones/s
CPI

Se dispone de un procesador superescalar capaz de captar, decodificar y retirar hasta cuatro


instrucciones por ciclo, con una nica ventana de instrucciones con emisin centralizada,
desordenada y no alineada, y con un bfer de reordenamiento para el renombrado y la
finalizacin ordenada. El procesador utiliza un predictor de saltos dinmico de dos bits que
se consulta en el momento de captar las instrucciones, de forma que si la direccin de
memoria de la que se est captando una instruccin se encuentra en el BTB, y la prediccin
es saltar, guarda el contenido actual de PC y se cambia por la direccin de destino del salto
para que se empiece a captar desde ah en el siguiente ciclo. Cuando la instruccin de salto
entra en el bfer de reordenamiento tras la decodificacin, se marca con un bit pred = 1 si el

predictor decidi tomar el salto o pred = 0 en caso contrario. Posteriormente, cuando se


resuelve la condicin del salto en la etapa de ejecucin, se comprueba si la prediccin se
realiz con xito, y en caso contrario, se marcan con flush = 1 todas aquellas instrucciones
que se han introducido en el cauce de forma especulativa para que no actualicen los registros
al ser retiradas, y se fija PC al valor guardado en el momento de la prediccin para continuar
con la siguiente instruccin en el siguiente ciclo. La primera vez que se capta un salto,
obviamente no se encuentra en el BTB, por lo que no se podr predecir su comportamiento
hasta la etapa de decodificacin, en la que se emplea un predictor esttico que predice como
tomados todos los saltos hacia atrs y crea una entrada en el BTB para los saltos
encontrados. Si en el procesador descrito se ejecuta el siguiente programa:

bucle:

lw
lw
add
add
add
subi
bnez
sw
trap

r1, N
r2, X
r3, r0, r0
r3, r3, r2
r4, r3, r3
r1, r1, #1
r1, bucle
R, r4
#0

; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
; (7)
; (8)
; (9)

a) Qu valor tiene R al final del programa si inicialmente N = 3 y X = 3?


b) Cul es la penalizacin que se obtiene cuando se predice mal un salto en
este procesador?
c) Cuntos ciclos tardara en ejecutarse el programa si N tuviera el valor 500?
NOTA: Suponga un nmero de unidades de ejecucin y un tamao de bferes suficiente como para
que no se provoquen riesgos estructurales en el cauce. Las unidades funcionales de acceso a
memoria tienen una latencia de 2 ciclos y el resto de unidades funcionales utilizadas 1 ciclo
de latencia.

Solucin
Para responder a la primera pregunta es necesario entender el funcionamiento del programa, que
bsicamente consiste en lo siguiente:
r 3i r 3i 1 X
r 4i 2 r 3i

siendo i el nmero de iteraciones que se ejecutan y r3(0) = 0. Reescribiendo las expresiones anteriores
de forma que no se calculen de forma recursiva tenemos que:
r 3i i X
r 4 i 2 i X

Como el nmero de iteraciones del programa est controlado por el registro r1, que inicialmente se fija
al valor de la variable N, el valor final para R es de:
R r 4N 2 N X 2 3 3 18

Para responder a la siguiente cuestin usaremos la traza de la ejecucin del programa, mostrada en la
Figura 29. En este diagrama se puede comprobar que el predictor esttico (que se aplica en la etapa de
decodificacin la primera vez que se capta un salto) introduce un ciclo de penalizacin para los saltos

tomados. El resto de las iteraciones que se ejecute el salto se usar el predictor dinmico, que no
introduce penalizacin en caso de acertar. Sin embargo, en la ltima iteracin el predictor dinmico
falla. El fallo se detecta en la etapa de ejecucin del salto, por lo que se introduce una penalizacin de
tres ciclos.
INSTRUCCIN

lw
r1, N
lw
r2, X
add r3, r0, r0
add r3, r3, r2
add r4, r3, r3
subi r1, r1, #1
bnez r1, bucle
sw
R, r4
trap #0
Sig. instruccin
Sig. instruccin
Sig. instruccin
add r3, r3, r2
add r4, r3, r3
subi r1, r1, #1
bnez r1, bucle
add r3, r3, r2
add r4, r3, r3
subi r1, r1, #1
bnez r1, bucle
add r3, r3, r2
add r4, r3, r3
subi r1, r1, #1
bnez r1, bucle
add r3, r3, r2
add r4, r3, r3
subi r1, r1, #1
bnez r1, bucle
add r3, r3, r2
add r4, r3, r3
subi r1, r1, #1
bnez r1, bucle
sw
R, r4
trap #0
PENALIZACIN

1
IF
IF
IF
IF

2
ID
ID
ID
ID

3
EX
EX
EX

IF
IF
IF

ID
ID
ID

IF

ID
IF
IF
IF
IF

4
5
6
EX ROB WB
EX ROB WB
ROB
WB
EX ROB
EX

IF
IF
IF
IF

ID
ID
ID
ID
IF
IF
IF
IF

Flush
Flush
Flush
Flush
Flush
EX ROB
EX
EX ROB
EX
ID
EX
ID
ID
EX
ID

P
TLI

10

11

12

13

14

WB

EX ROB
ROB
EX ROB

IF
IF
IF
IF

ID
ID
ID
ID
IF
IF
IF
IF

WB
WB
WB

WB
ROB

WB
WB
ROB WB
ROB WB
EX ROB
ROB
EX ROB
EX
EX
ID
ID
ID
ID
IF
IF
IF
IF

WB
WB
WB

Flush
Flush
Flush
Flush
Flush
Flush
Flush
Flush
Flush
Flush
Flush
Flush
IF
ID
IF
ID

EX
EX

EX ROB
ROB

WB
WB

P
MLM MLM

FIN

Figura 29. Traza de la ejecucin del cdigo del problema 24.

Por ltimo, para calcular el tiempo de ejecucin para N iteraciones hay que tener en cuenta que
transcurren 8 ciclos hasta que se termina la primera iteracin, que cada iteracin termina un ciclo
despus de la anterior, y que tras la ltima iteracin hay que aadir 4 ciclos para almacenar el resultado
final, es decir, que el tiempo para ejecutar N iteraciones se puede calcular mediante las expresin:
T N TLI N 1 MLM FIN 8 N 11 4 N 11ciclos

Por tanto, para ejecutar N = 500 iteraciones seran necesarios 511 ciclos.

25.

Se dispone de un procesador superescalar en el que se pueden captar y decodificar hasta dos


instrucciones por ciclo. Este ordenador cuenta con dos sumadores de latencia 2 ciclos, un
multiplicador de latencia 4 ciclos, y una unidad de carga con una latencia de 1 ciclo si se
produce un acierto en la cache o 3 ciclos si el dato solicitado no se encuentra en la cache.
Cada unidad de ejecucin cuenta con su propia estacin de reserva de 3 entradas. Para
mantener la consistencia secuencial y garantizar un tratamiento preciso de las interrupciones,
las instrucciones se introducen en un bfer de reordenamiento en la etapa de decodificacin,
del que se retiran de dos en dos de manera ordenada una vez han terminado su ejecucin. En

dicho procesador se pretende ejecutar el siguiente fragmento de cdigo (que ya est alojado
en la cache de instrucciones):
multd
ld
addd
addd
subd

f4, f1, f2
f5, X(r3)
f2, f3, f1
f3, f4, f2
f2, f3, f5

; (1)
; (2)
; (3)
; (4)
; (5)

Al intentar cargar la variable X, se produce un fallo de pgina porque dicha variable no se


encuentra ni en la cache ni en memoria principal. Dicho fallo se detecta en el ciclo 2 de la
ejecucin de la instruccin ld, cuando se consulta la tabla de pginas de SO. En ese
momento, se genera una excepcin para indicar el problema.
a) Qu contenido tiene el bfer de reordenamiento en ese ciclo?
b) En qu ciclo se comenzar a ejecutar la rutina de servicio de la
interrupcin?
c) Si la rutina de servicio de interrupcin tarda 237 ciclos en traer la pgina a la
memoria principal y retornar el control al programa, Qu instruccin del
programa se ejecutar y en qu ciclo comenzar a ejecutarse?
d) Cuntos ciclos tardar en terminar la ejecucin completa del fragmento de
cdigo?

Solucin
La Figura 30 muestra una traza de la ejecucin del programa. Hasta el ciclo 4, la ejecucin del
programa es normal, las instrucciones se van captando, decodificando, etc., pero justo en este ciclo (el
segundo ciclo de la ejecucin de la carga) se produce una excepcin, por lo que se marca la instruccin
(2) con el campo excep = 1 y las instrucciones (2) (5) con el campo flush = 1 como muestra la Tabla
21. A partir de este momento se dejan de captar instrucciones y se contina la ejecucin de las
instrucciones que hay en el cauce hasta que la instruccin que ha provocado la excepcin alcance el
tope del bfer de reordenamiento.
En el ciclo 9, tras retirar todas las instrucciones marcadas con flush = 1, se salvar la direccin de la
instruccin load para poder reiniciar la ejecucin del programa una vez se haya trado la pgina a
memoria, y se comenzar a captar instrucciones de la Rutina de Servicio de Interrupcin (RSI),
suponiendo que no hay ningn retardo para obtener la su direccin. Como la RSI tarda 237 ciclos,
habr terminado en el ciclo 245. Su ltima instruccin ser un retorno de interrupcin, que modifica el
registro PC con la direccin previamente guardada, as que en el ciclo 246 se volver a captar a partir
de la instruccin load, que ahora no cometer la excepcin porque el dato que quiere leer ya est en
memoria. Por tanto, al final el cdigo tarda en ejecutarse 253 ciclos.
CICLO

CDIGO
OPERACIN

REGISTRO
DESTINO

VALOR

VALOR
VLIDO

EXCEP

FLUSH

mult

f4

ld

f5

add

f2

add

f3

sub

f2

Tabla 21. Estado del ROB en el momento en el que se produce la excepcin en el problema 25.

INSTRUCCIN

multd f4, f1, f2


ld
f5, X(r3)
addd f2, f3, f1
addd f3, f4, f2
subd f2, f3, f5
Sig. instruccin
1 instr. RSI
2 instr. RSI
3 instr. RSI
4 instr. RSI
...
ld
f5, X(r3)
addd f2, f3, f1
addd f3, f4, f2
subd f2, f3, f5

1
IF
IF

2
ID
ID
IF
IF

5
EX

EX
ID
ID
IF
IF

7
8
ROB WB
Excepcin
Flush
Flush
Flush
Flush

10

IF
IF

ID
ID
IF
IF

246 247 248 249 250 251 252 253

IF
IF

ID
ID
IF
IF

EX
ROB WB
EX ROB
WB
ID EX ROB
WB
ID
EX ROB WB

Figura 30. Traza de la ejecucin del cdigo del problema 25.