Documente Academic
Documente Profesional
Documente Cultură
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)
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
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
La operacin a realizar.
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
ENTRADA
VLIDA
REGISTRO
DE DESTINO
VALOR
VALOR
VLIDO
LTIMO
r2
50
r3
1200
r2
20
r1
ENTRADA
VLIDA
NDICE
BFER
VALOR
VLIDO
50
1200
...
20
CDIGO
OPERACIN
REGISTRO
DESTINO
VALOR
VALOR
VLIDO
mult
r1
st
add
r1
17
xor
r1
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
CDIGO
OPERACIN
REGISTRO
DESTINO
VALOR
VALOR
VLIDO
EXCEP
FLUSH
mult
r1
st
add
r1
17
xor
r1
0xa1
Problemas
1.
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:
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:
Ciclo 16:
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:
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.
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
ENTRADA
VLIDA
NDICE
BFER
VALOR
VLIDO
10
15
1
0
0
ENTRADA
VLIDA
NDICE
BFER
VALOR
VLIDO
10
15
1
0
0
0
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)
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.
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
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
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
10
11
10
11
12
13
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)
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:
CICLO
ENTRADA
VLIDA
REGISTRO
VALOR
VALOR
VLIDO
LTIMO
f3
f3
f2
f3
f3
f2
f3
f5
f3
f2
f3
f5
f6
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
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.
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)
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
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
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
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 (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
7.
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)
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.
Solucin
La Tabla 8 muestra la evolucin del bfer de reordenamiento marcando en negrita los cambios que se
producen en cada ciclo:
CDIGO
OPERACIN
REGISTRO
DESTINO
VALOR
VALOR
VLIDO
lw
r3
addi
r2
add
r1
lw
r4
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
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
9.
f2, f2, f1
f4, f2, f3
f5, f2, f3
f6, f2, f3
f2, f2, f5
f7, f4, f6
; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
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.
f1, f1, f5
f2, f2, f5
f4, f1, f2
f6, f1, f5
f5, f2, f2
f6, f2, f1
; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
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
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:
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
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.
f1, f1 ,f4
f3, f1, f2
f6, f1, f4
f4, f1, f6
; (1)
; (2)
; (3)
; (4)
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
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:
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
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.
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)
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
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:
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
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:
13.
f1, f1, f2
f3, f3, f2
f4, f1, f3
f5, f4, f2
f3, f1, f3
f5, f2, f1
; (1)
; (2)
; (3)
; (4)
; (5)
; (6)
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.
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
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
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
En cuanto a la evolucin del ROB, la Tabla 12 muestra los cambios que se producen cada ciclo
resaltados en negrita:
En el ciclo 8 se retiran las instrucciones (1) y (2) y se escriben sus resultados en los
registros de la arquitectura.
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.
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)
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:
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).
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
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:
EJECUCIN
PENALIZACIN
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
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.
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.
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
11
10
01
00
PREDICCIN
EJECUCIN
PENALIZACIN
000
100
010
101
00
00
00
00
PREDICCIN
EJECUCIN
PENALIZACIN
LTIMAS ITERACIONES
LTIMAS ITERACIONES
000
000
100
010
00
00
00
00
PREDICCIN
EJECUCIN
LTIMAS ITERACIONES
PENALIZACIN
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.
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
00
00
00
00
00
PREDICCIN
EJECUCIN
PENALIZACIN
SALTO 2
LTIMAS ITERACIONES
000
100
110
111
111
11
11
11
11
11
PREDICCIN
EJECUCIN
PENALIZACIN
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).
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.
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
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:
3.
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.
2.
3.
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.
S 2 9 N 2 y la
2.
1 c < 10:
N 1 10 c S1 y la
3.
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:
0.25 44 0.45
10 c 4
c 1
9
0.30 0 20 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.
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)
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
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.
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)
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 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.
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
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.
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
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,
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
Analizado la traza del programa, podemos deducir que la penalizacin introducida por el predictor
esttico es de:
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)
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
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
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
2 N 3 109
F
2 109
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
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)
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
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.
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)
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
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
IF
IF
ID
ID
IF
IF
EX
ROB WB
EX ROB
WB
ID EX ROB
WB
ID
EX ROB WB