ARQUITECTURA DE COMPUTADORES I
Examen de Septiembre (4-9-2006)
1. (2 puntos) En un procesador VLIW cuyas instrucciones pueden codificar tres operaciones (tres campos o slots en cada instruccin
VLIW), todas las operaciones pueden predicarse. Para establecer los valores de los predicados se utilizan instrucciones de
comparacin (cmp) con el formato (p) p1[, p2] [Link] x,y donde cnd es la condicin que se comprueba entre x e y (lt, ge, eq,
ne,). Si la condicin es verdadera p1=1 [y p2=0], y si es falsa, p1=0 [y p2=1]. La operacin slo se ejecuta si el predicado p=1
(habr sido establecido por otra instruccin de comparacin).
Indique cmo sera el cdigo VLIW para la sentencia
i f ( X > 2) t hen {Y = X; X = X/ 4; } el se i f ( ( X > 0) and ( X < 1) ) t hen {Y = 2*X; X = 4*X; };
sin ninguna operacin de salto, teniendo en cuenta que las instrucciones de comparacin slo pueden aparecer en el primer campo o
slot de la instruccin VLIW (el resto de las instrucciones pueden aparecer en cualquier campo). Considere que dispone del nmero de
unidades funcionales necesarias en cada momento.
2. (2 puntos) 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 buffer de reordenamiento (ROB) que permite la finalizacin ordenada del procesamiento de las instrucciones.
Indique las dependencias entre instrucciones, los ciclos en los que se emiten las instrucciones para su ejecucin y cmo evolucionara
el buffer de reordenamiento hasta que se hayan retirado todas las instrucciones de la siguiente secuencia de instrucciones
almacenadas en la cola de instrucciones captadas:
mul t d f 1, f 1, f 2; f 1 = f 1 * f 2
addd f 3, f 3, f 2; f 3 = f 3 + f 2
mul t d f 4, f 1, f 3; f 4 = f 1 * f 3
addd f 5, f 4, f 2; f 5 = f 4 + f 2
addd f 3, f 1, f 3; f 3 = f 1 + f 3
subd f 5, f 2, f 1; f 5 = f 2 f 1
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 buffers, pero slo tiene un multiplicador y dos sumadores/restadores. Se supone que f1, f2, y f3 tienen valores
vlidos previos.
3. (1.5 punto) Se han encontrado dos posibles alternativas para la ejecucin de una funcin F en un cauce con 4 etapas
S1, S2, S3, S4. La alternativa 1 visita las etapas segn la secuencia: S1 S3 S2 S4 S1 S4 S4, y la alternativa 2 en el orden:
S1 S2 S3 S4 S3 S4 S2. (A) Cul de las dos alternativas permite ejecutar un nmero mayor de funciones por unidad de tiempo?
Demuestre razonadamente su respuesta. (B) Obtenga adems la ganancia en velocidad que ofrecen cada una de las alternativas con
respecto a su ejecucin sin cauce para 1000 operaciones, teniendo en cuenta que sin cauce la funcin requiere un tiempo de 15 ns;
que las etapas del cauce suponen unos tiempos de ejecucin de: 4ns para S1, 4 ns para S2, 3 ns S3 y 4 ns para S4; y que los registros
introducen retardos de 0.1 ns.
4. (1 punto) Se dispone de una memoria de 16 Mbytes con entrelazado de orden inferior y acceso de tipo S (simultneo) distribuida
en mdulos de 512 Kbytes. Se ha almacenado un vector de 113 componentes en posiciones de memoria consecutivas a partir de la
posicin 21BC5h. Cuntos accesos se necesitan para leer el vector completo? Y si el entrelazado fuera de orden superior
(manteniendo el acceso de tipo S)?
5. (1.5 puntos) Se desea ejecutar el siguiente programa en un procesador superescalar:
( 1) l w r 1, N
( 2) add r 2, r 0, r 0
( 3) bucl e: l w r 3, X( r 2)
( 4) sgt r 4, r 3, r 0
( 5) bnz r 4, mayor
( 6) sub r 3, r 0, r 3
( 7) mayor : sw X( r 2) , r 3
( 8) add r 2, r 2, #4
( 9) sub r 1, r 1, #1
( 10) bnz r 1, bucl e
Si el procesador usa predictores dinmicos de dos bits 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 al problema 1:
El realizar un organigrama que refleje el comportamiento del cdigo ayuda bastante a la resolucin de este tipo de problemas, sobre todo a la hora de
decidir qu predicados se deben utilizar y dnde hay que colocarlos. Un posible organigrama para este problema podra ser el siguiente:
Una vez diseado el organigrama, hay que colocar un predicado en cada una de las instrucciones que deban estar vigiladas, es decir que dependan de
alguna condicin, y tras esto, la traduccin a cdigo es directa:
1. addi r 1, r 0, #1 ; r 1 = 1
2. addi r 2, r 0, #2 ; r 2 = 2
3. l d r 3, X( r 0) ; r 3 = X
4. p1, p2 cmp. gt r 3, r 2 ; X > 2?
5. p3 cmp. ne r 0, r 0 ; I ni ci al i zo p3
6. p4 cmp. ne r 0, r 0 ; I ni ci al i zo p4
7. ( p1) st r 3, Y( r 0) ; Y = r 3
8. ( p1) sr ai r 3, r 3, #2 ; r 3 = r 3 / 4
9. ( p1) st r 3, X( r 0) ; X = r 3
10. ( p2) p3 cmp. gt r 3, r 0 ; X > 0?
11. ( p3) p4 cmp. l t r 3, r 1 ; X < 1?
12. ( p4) sl l i r 4, r 3, #1 ; r 4 = r 3 * 2
13. ( p4) sl l i r 3, r 3, #2 ; r 3 = r 3 * 4
14. ( p4) st r 4, Y( r 0) ; Y = r 4
15. ( p4) st r 3, X( r 0) ; X = r 3
En este cdigo hay que tener en cuenta las dependencias RAW a la hora de colocar las instrucciones en las slots de emisin. Las dependencias que
aparecen son las siguientes:
1 11 por r1
2 4 por r2
3 4, 10, 11 por r3
4 7, 8, 9 por p1
4 10 por p2
8 9 por r3
11 12, 13, 14, 15 por p4
12 14 por r4
13 15 por r3
Teniendo en cuenta las dependencias RAW anteriores y que las instrucciones de comparacin slo pueden alojarse en el primer slot de emisin, una
posible colocacin de las instrucciones en memoria podra ser la siguiente:
Slot 1 Slot 2 Slot 3
p3 cmp. ne r 0, r 0 l d r 3, X( r 0) addi r 1, r 0, #1
p1, p2 cmp. gt r 3, r 2
( p2) p3 cmp. gt r 3, r 0 ( p1) sr ai r 3, r 3, #2 addi r 2, r 0, #2
p4 cmp. ne r 0, r 0 ( p1) st r 3, X( r 0) ( p1) st r 3, Y( r 0)
( p3) p4 cmp. l t r 3, r 1
( p4) sl l i r 4, r 3, #1 ( p4) sl l i r 3, r 3, #2
( p4) st r 4, Y( r 0) ( p4) st r 3, X( r 0)
Si
No
No
No
Si
Si
(p2)
(p1) (p3)
(p4)
Inicio
X>2?
X>0?
Y = X
X = X / 4
X<1?
Y = X * 2
X = X * 4
Fin
Solucin al Problema 2:
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, ISS para
emitirlas, EX para ejecutarlas, ROB para escribir los resultados en el ROB y WB para retirar las instrucciones del cauce. Las
dependencias entre instrucciones y los momentos de emisin de las mismas se muestran en la siguiente figura:
Instruccin / Ciclo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
mul t d f 1, f 1, f 2 IF ID ISS EX EX EX EX ROB WB
addd f 3, f 3, f 2 IF ID ISS EX EX ROB WB
mul t d f 4, f 1, f 3 IF ID ISS EX EX EX EX ROB WB
addd f 5, f 4, f 2 IF ID ISS EX EX ROB WB
addd f 3, f 1, f 3 IF ID ISS EX EX ROB WB
subd f 5, f 2, f 1 IF ID ISS EX EX ROB WB
A continuacin pasamos a describir la evolucin del buffer de reorden:
Ciclo 2:
Se decodifican las instrucciones (1) y (2) y
se introducen en el ROB
# Cod. Op. Dest. Result. Ok
1 multd f1 ? 0
2 addd f3 ? 0
Ciclo 3:
Se decodifican las instrucciones (3) y (4) y
se introducen en el ROB
# Cod. Op. Dest. Result. Ok
1 multd f1 ? 0
2 addd f3 ? 0
3 multd f4 ? 0
4 addd f5 ? 0
Ciclo 4:
Se decodifican las instrucciones (5) y (6) y
se introducen en el ROB
# Cod. Op. Dest. Result. Ok
1 multd f1 ? 0
2 addd f3 ? 0
3 multd f4 ? 0
4 addd f5 ? 0
5 addd f1 ? 0
6 subd f5 ? 0
Ciclo 6:
Finaliza la instruccin (2) y se escribe el
resultado en el ROB
# Cod. Op. Dest. Result. Ok
1 multd f1 ? 0
2 addd f3 f3 + f2 1
3 multd f4 ? 0
4 addd f5 ? 0
5 addd f1 ? 0
6 subd f5 ? 0
Ciclo 8:
Finaliza la instruccin (1) y se escribe el
resultado en el ROB
# Cod. Op. Dest. Result. Ok
1 multd f1 f1 * f2 1
2 addd f3 f3 + f2 1
3 multd f4 ? 0
4 addd f5 ? 0
5 addd f1 ? 0
6 subd f5 ? 0
Ciclo 9:
Se retiran las instrucciones (1) y (2)
# Cod. Op. Dest. Result. Ok
3 multd f4 ? 0
4 addd f5 ? 0
5 addd f1 ? 0
6 subd f5 ? 0
Ciclo 10:
Finalizan las instrucciones (5) y (6) y se
escriben los resultados en el ROB
# Cod. Op. Dest. Result. Ok
3 multd f4 ? 0
4 addd f5 ? 0
5 addd f1 f1 + f3 1
6 subd f5 f2 f1 1
Ciclo 12:
Finaliza la instruccin (3) y se escribe el
resultado en el ROB
# Cod. Op. Dest. Result. Ok
3 multd f4 f1 * f3 1
4 addd f5 ? 0
5 addd f1 f1 + f3 1
6 subd f5 f2 f1 1
Ciclo 13:
Se retira la instruccin (3)
# Cod. Op. Dest. Result. Ok
4 addd f5 ? 0
5 addd f1 f1 + f3 1
6 subd f5 f2 f1 1
Ciclo 14:
Finaliza la instruccin (4) y se escribe el
resultado en el ROB
# Cod. Op. Dest. Result. Ok
4 addd f5 f4 + f2 1
5 addd f1 f1 + f3 1
6 subd f5 f2 f1 1
Ciclo 15:
Se retiran las instrucciones (4) y (5)
# Cod. Op. Dest. Result. Ok
6 subd f5 f2 f1 1
Ciclo 16:
Se retira la instruccin (6)
# Cod. Op. Dest. Result. Ok
Si el procesador funciona a 3 GHz, el tiempo de procesamiento sera
16 ciclos * 3,310
10
s/ciclo = 5,310
9
s = 5,3 ns
Para la calcular la velocidad pico, como slo se pueden retirar dos instrucciones por ciclo, suponiendo que no hubiera atascos en el
cauce se podran ejecutar 3 instrucciones por ciclo
2 instr./ciclo * 310
9
ciclos/s = 6 GIPS
Solucin al Problema 3:
El primer paso para responder al primer apartado es calcular la tabla de reservas para cada una de las dos alternativas:
Alternativa 1
1 2 3 4 5 6 7
S1 X X
S2 X
S3 X
S4 X X X
Alternativa 2
1 2 3 4 5 6 7
S1 X
S2 X X
S3 X X
S4 X X
Una vez calculadas las tablas de reservas es fcil obtener las latencias prohibidas y los vectores de colisiones de cada una de las
alternativas:
F
1
= {1,2,3,4} C
1
= (1111) F
2
= {2,5} C
2
= (10010)
Para calcular determinar qu alternativa tiene la mxima productividad, realizamos un diagrama de estados a partir de cada vector de
colisiones:
Alternativa 1 Alternativa 2
1 4
10011
10010
11011
6+
3, 6+
3, 6+
4 3
5+
3
1111
La mnima latencia mnima de cada alternativa es:
3 , 2
3
3 3 1
2
)
=
+ +
= MLM
MLM
1
= 5
Para ver qu alternativa es capaz de ejecutar ms operaciones por unidad de tiempo basta con calcular la productividad mxima de
cada una de ellas. La productividad mxima se define como:
MLM n MLM TLI
n
n T
n
n W W
n n n
1
) 1 (
lim
) (
lim ) ( lim
max
=
+
= = =
Para cada una de las alternativas tenemos que:
o instr/cicl 2 , 0
5
1 1
1
max 1
= = =
MLM
W
o instr/cicl 43 , 0
3 , 2
1 1
2
max 2
= = = )
MLM
W
con lo que podemos concluir que la segunda alternativa es mejor que la primera.
Para responder a la segunda cuestin, debemos calcular tanto el tiempo secuencial como el de cada una de las alternativas para
realizar 1000 operaciones. En el caso secuencial tenemos que:
T
Sec
(1000) = 1000
operaciones
15
ns/operacin
= 15000 ns
Y en el caso paralelo, el tiempo de ejecucin se define como:
( ) ) 1 ( ) ( + = n MLM TLI T n T
clock
El tiempo ciclo del reloj se puede obtener como:
T
clock
= mx{T
S1
, T
S2
, T
S3
, T
S4
} + T
acoplo
= mx {4, 4, 3, 4} + 0,1 = 4 + 0,1 = 4,1 ns
Por tanto, la ganancia en velocidad de cada una de las alternativas respecto al caso secuencial es de:
( ) ( )
73 , 0
1 1000 5 7 1 , 4
15000
) 1000 (
) 1000 (
) 1000 (
1
1
=
+
= =
T
T
S
Sec
( ) ( )
56 , 1
1 1000 3 , 2 7 1 , 4
15000
) 1000 (
) 1000 (
) 1000 (
2
2
=
+
= = )
T
T
S
Sec
Solucin al Problema 4:
El primer paso para resolver este problema es ver cmo se encuentran repartidos los elementos del vector entre los mdulos de
memoria. Tenemos una memoria de 16 MB = 2
24
Bytes, repartida en mdulos de 512 KB = 2
19
Bytes, lo que quiere decir que
tendremos un total de 2
5
= 32 mdulos de memoria. Si se utiliza entrelazado inferior y acceso tipo S para acceder a ellos, las
posiciones de memoria consecutivas se encontrarn en mdulos de memoria consecutivos, y como hay 32 mdulos, en el mdulo 0
estarn todas las direcciones mltiplo de 32, 0x20 en hexadecimal. Teniendo esto en cuenta, y que el mayor mltiplo de 0x20 por
debajo de 0x021BC5 es 0x034BC0 (escribimos las direcciones con 6 dgitos para hacer hincapi en que la memoria tiene 16 MB, y
que por tanto, se direcciona con direcciones de 24 bits o 6 dgitos hexadecimales), los datos estarn colocados en las posiciones de
memoria sombreadas de la siguiente figura:
Direccin 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
0x021BC0
0x021BE0
0x021C00
0x021C20
Con lo que para acceder a todos los datos del vector tendremos que generar las 4 direcciones de la primera columna de la tabla
anterior, es decir, que son necesarios 4 accesos a memoria.
En el caso de que se utilizara entrelazado superior, las posiciones de memoria consecutivas se encontraran en el mismo mdulo.
Tanto la direccin de comienzo como la de final del vector se encontraran en el mdulo de memoria 0, que contendra las posiciones
de memoria desde la direccin 0x0000000 a la 0x03FFFF (2
19
1), con lo que haran falta 113 accesos a memoria, tantos como
componentes, para leer el vector.
Solucin al Problema 5:
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, notado 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.
( 1) l w r 1, N
( 2) add r 2, r 0, r 0
( 3) bucl e: l w r 3, X( r 2)
( 4) sgt r 4, r 3, r 0
( 5) bnz r 4, mayor S1
( 6) sub r 3, r 0, r 3
( 7) mayor : sw X( r 2) , r 3
( 8) add r 2, r 2, #4
( 9) sub r 1, r 1, #1
( 10) bnz r 1, bucl e S2
Para mejorar las prestaciones en la ejecucin de los saltos, el computador que se describe en el enunciado usa un predictor dinmico
de dos bits para cada uno de los saltos que se encuentre en el programa. El esquema de este tipo de predictores es el siguiente:
Para cada salto, su predictor dinmico se inicializar segn el predictor esttico del computador, que predice como tomados los saltos
hacia atrs. Por tanto, el predictor dinmico para S1 se iniciar al valor 00 (no saltar fuerte), ya que es un salto hacia delante, y el
predictor dinmico para S2 se iniciar al valor 11 (saltar fuerte) porque salta hacia atrs.
Una vez inicializados los predoctores dinmicos, 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. Por tanto, el comportamiento del predictor dinmico para S1 viene explicado
segn la siguiente tabla:
Iteracin 1 2 3 4 6 7 8
Valor de X 1 0 1 0 1 0 1
Estado actual 00 01 00 01 00 01 00
Prediccin N N N N N N N
Ejecucin S N S N S N S
Penalizacin P P P P
Estado siguiente 01 00 01 00 01 00 01
Por lo que la penalizacin que introduce S1 es de:
ciclos
2
5
S1
=
N
P
El salto S2 saltar tantas veces como elementos tenga el vector X, es decir N veces, ya que el programa se dedica a procesar dicho
vector. Teniendo esto en cuenta, el comportamiento del predictor dinmico para S2 viene explicado segn la siguiente tabla:
Iteracin 1 2 3 4 N 2 N 1 N
Estado actual 11 11 11 11 11 11
Prediccin S S S S S S S
Ejecucin S S S S S S N
Penalizacin P
Estado siguiente 11 11 11 11 11 11 10
11 10 01 00
No saltar
dbil
No saltar
fuerte
Saltar
dbil
Saltar
fuerte
N N N
S N
S S S
El comportamiento de este salto es muy fcil de predecir, ya que salta siempre excepto en la ltima iteracin del bucle, por lo que
introduce una penalizacin de:
ciclos 5
S2
= P
Por tanto, teniendo en cuenta los dos predictores, la penalizacin total es de:
ciclos
2
1 5
total
+ =
N
P
Est claro que el comportamiento 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:
( 1) l w r 1, N
( 2) add r 2, r 0, r 0
( 3) bucl e: l w r 3, X( r 2)
( 4) sub r 4, r 0, r 3
( 5) cmov. gt r 4, r 3, r 3
( 7) sw X( r 2) , r 4
( 8) add r 2, r 2, #4
( 9) sub r 1, r 1, #1
( 10) bnz r 1, bucl e S2
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:
ciclos 5
S2 total
= = P P