Está en la página 1de 6

ARQUITECTURA DE COMPUTADORES I

Ingeniera Informtica. Septiembre de 2007



1. (2.5) 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 buffer 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 f1, f1, f6 ; f1 = f1 + f6
multd f6, f2, f5 ; f6 = f2 * f5
subd f5, f1, f3 ; f5 = f1 f3
loop r2, bucle
addd f7, f1, f5 ; f7 = f1 + f5

(a) Cunto tarda en procesarse la secuencia de instrucciones?
(b) Cul es la velocidad pico del procesador?

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

2. (1.5) Suponga un procesador en el que todas las instrucciones pueden predicarse. Para establecer los
valores de los predicados se utilizan instrucciones de comparacin con el formato

(p) p1, p2 cmp.cnd rx, ry

donde cnd es la condicin que se comprueba entre rx y ry (lt, ge, eq, ne,). Si la condicin es
verdadera, p1=1 y p2=0, y si es falsa, p1=0 y p2=1. La instruccin slo se ejecuta si el valor del
predicado p es 1 (habr sido establecido por otra instruccin de comparacin).

(a) En estas condiciones, escriba la secuencia de instrucciones mquina que implementaran el siguiente
cdigo sin utilizar ninguna instruccin de salto:

X = 0;
if ((AB) and (B0)) then X = 1;
else if ((B<0) and (A<B)) then X = 2;

(b) Optimice el cdigo anterior para un procesador VLIW con dos slots de emisin, en el que las
instrucciones de comparacin slo pueden colocarse en el primero de ellos y las latencias de las
operaciones son de 1 ciclo para las sumas, restas y comparaciones, de dos ciclos para las
multiplicaciones y de tres ciclos para las cargas de memoria.
3. (2.5) Suponga que en el siguiente programa N=10
8
, a y c son dos vectores de nmeros en coma flotante, y
b es un escalar en coma flotante.

for (i=0 ; i<N ; i++) a[i+2] = (a[i+1] + a[i]) * b;
c[0] = a[N+1];

(a) Si se han tardado 200 milisegundos en ejecutar el programa, cuntos GFLOPS se han alcanzado?
(Suponga que el producto y la suma en coma flotante tienen un coste similar).

Las instrucciones mquina que implementan este bucle en el procesador donde se ha ejecutado son:

ld f1, b ; cargar en f1 el valor de b
add r1, r0, a ; apuntar r1 donde empieza a[]
ld r2, N ; cargar en r2 el nmero de iteraciones
loop: ld f2, 0(r1) ; cargar f2 con a[i]
ld f3, 4(r1) ; cargar f3 con a[i+1]
addf f4, f3, f2 ; f4=a[i+1]+a[i]
mulf f4, f4, f1 ; f4=f4*b
sf 8(r1), f4 ; almacenar f4 en a[i+2]
add r1, r1, #4 ; apuntar a a[i+1]
sub r2, r2, #1 ; queda una iteracin menos
bnez r2, loop
add r5, r0, c ; apuntar r5 donde empieza c[]
sf 0(r5), f4 ; almacenar f4 (a[N+1]) en c[0]

(b) Si sabe que el procesador que se est utilizando es de 2 GHz, qu podra decir respecto al tipo de
procesador utilizado teniendo en cuenta el valor de CPI?

(c) Si el programa anterior se implementa en un procesador segmentado con salto retardado y un hueco
para instrucciones tras la instruccin de salto, indique si hay algn problema en la ejecucin del
cdigo anterior si el salto: (1) se anula siempre; (2) no se anula nunca; (3) se anula si se salta; (4) se
anula si no se salta.

(d) Qu cambios hara en el cdigo en el caso en que hay problemas y para que, si es posible, se
mejoren las prestaciones?


4. (1.5) En un procesador vectorial, con una frecuencia de reloj de 500 MHz y con registros vectoriales de
16 componentes, se ejecuta el siguiente bucle utilizando la tcnica de troceado del vector (strip
mining).

for i := 1 to n do Z(i) := a*Z(i) + b*X(i) + c*Y(i)

Teniendo en cuenta que el tiempo de ejecucin es TCV=63 ciclos para la secuencia de instrucciones
vectoriales que implementan Z := a*Z + b*X + c*Y con 16 componentes, que el valor del tiempo de
latencia de inicio es TLI=15 ciclos, que el tiempo correspondiente a las operaciones escalares
necesarias para preparar el ciclo es T
BASE
=10 ciclos, y que el tiempo correspondiente al control del
bucle en el troceado del vector es T
BUCLE
=20 ciclos, calcule para el bucle:

(a) El tiempo de ejecucin para n=317 elementos, T
317
.

(b) El nmero de operaciones ejecutadas por unidad de tiempo para un vector de longitud infinita, R
inf
.
Solucin al problema 1:
Para responder al primer apartado es necesario tener en cuenta que el programa se ejecutar en un procesador superescalar en
el que se solaparn las iteraciones del bucle. Por tanto, una vez terminada la primera iteracin tras un tiempo TLI, el resto de
iteraciones irn terminando cada MLM ciclos. Para determinar estos dos parmetros es necesario desarrollar una traza de la
ejecucin del programa en la que se tengan en cuenta las caractersticas del procesador. A la hora de realizar esta traza
tenemos que tener cuidado con los riesgos que ocurrirn en la ejecucin del programa:

Riesgos RAW entre datos dentro de una iteracin y tambin entre iteraciones consecutivas (marcados con flechas
rojas),
Riesgos estructurales (marcados con flechas azules),
Riesgos de control al procesar el salto del bucle (marcados con flechas verdes).

A continuacin se simula la ejecucin del bucle haciendo tres iteraciones.

Instruccin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
addd f1, f1, f6 IF ID ISS EX EX ROB WB
multd f6, f2, f5 IF ID ISS EX EX EX EX ROB WB
subd f5, f1, f3 IF ID EX EX ROB WB
loop r2, bucle IF ID ISS EX ROB WB
addd f7, f1, f5 IF X X X X X X WB
Sig. instruccin IF X X X X X X X WB
addd f1, f1, f6 IF ID ISS EX EX ROB WB
multd f6, f2, f5 IF ID ISS EX EX EX EX ROB WB
subd f5, f1, f3 IF ID ISS EX EX ROB WB
loop r2, bucle IF ID ISS EX ROB WB
addd f1, f1, f6 IF ID ISS EX EX ROB WB
multd f6, f2, f5 IF ID ISS EX EX EX EX ROB WB
subd f5, f1, f3 IF ID ISS EX EX ROB WB
loop r2, bucle IF ID ISS EX ROB WB
addd f1, f1, f6 IF ID ISS X X X X X X X WB
multd f6, f2, f5 IF ID X X X X X X X X WB
subd f5, f1, f3 IF ID X X X X X X X X WB
loop r2, bucle IF ID X X X X X X X X X WB
addd f1, f1, f6 IF X X X X X X X X X WB
multd f6, f2, f5 IF X X X X X X X X X X WB
addd f7, f1, f5 IF ID ISS EX EX ROB WB



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 tendr una penalizacin de 1 ciclo para los saltos acertados.

A partir de la segunda iteracin, cada vez que se capta el salto se usa 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 tendremos una
penalizacin de 3 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.

Si nos fijamos en el instante de tiempo en el que se retira la ltima instruccin del bucle en cada iteracin, podemos
comprobar que la primera iteracin tarda en concluir un tiempo TLI = 10 ciclos, que el resto de iteraciones terminan cada
MLM = 4 ciclos, y que la ltima instruccin termina 3 ciclos despus de la ltima iteracin del bucle, por tanto para un bucle
de n iteraciones tenemos:

T(n) = TLI + MLM(n 1) + T
final
= 10 + 4(n 1) + 3 = 4n + 9 ciclos

Teniendo en cuenta que el registro r2 = 100000 y que la frecuencia de reloj es de 2 GHz, el tiempo de ejecucin es de:
10 4 4 3

dos microsegun 200
10 2
ciclos 9 10 4
) 100000 (
s
ciclos
9
5

+
= T

Y como el procesador puede completar hasta 2 instrucciones por ciclo, su velocidad pico es de:

s
nes instruccio
9
s
ciclos
9
ciclo
nes instruccio
pico
10 4 10 2 2 = = R

Solucin al problema 2:
El organigrama y el cdigo secuencial que implementa la secuencia de cdigo del enunciado es el siguiente:



Una vez escrito el cdigo, slo nos queda optimizarlo para la arquitectura VLIW propuesta en el enunciado:

Slot 1 Slot 2
lw r1, A lw r2, B
add r3, r0, r0

p1, p2 cmp.ge r1, r2
(p1) p1, p2 cmp.ge r2, r0
(p2) p2 cmp.lt r2, r0 (p1) addi r3, r0, #1
(p2) p2 cmp.lt r1, r2 (p2) addi r3, r0, #2
sw r3, X

Solucin al problema 3:
Para responder al primer apartado hay que calcular el nmero de operaciones en coma flotante que se pueden realizar por
segundo. En cada iteracin del bucle se realiza una suma y una multiplicacin, y como se realizan 10
8
iteraciones, el
programa realiza un total de 210
8
operaciones en coma flotante en 20010
-3
segundos, por tanto, se alcanzan

GFLOP 1
segundos 10 200
s operacione 10 2
3
8
10
8 =

=

R


Teniendo en cuenta el cdigo ensamblador del enunciado, el programa ejecuta un nmero de instrucciones de

NI = 3 + 810
8
+ 2

Y como sabemos que el tiempo de ejecucin es T = NI CPI T
Clk
, podemos obtener el nmero medio de ciclos que tarda
Inicio
No
Fin
X 0
A B
B 0
X 1 B < 0
A < B
X 2
Si
p1
p2
p2
No Si
No Si
No Si
p1
p2
lw r1, A ; r1 = A
lw r2, B ; r2 = B
add r3, r0, r0 ; r3 = 0

p1, p2 cmp.ge r1, r2 ; A >= B?
(p1) p1, p2 cmp.ge r2, r0 ; B >= 0?
(p2) p2 cmp.lt r2, r0 ; B < 0?
(p2) p2 cmp.lt r1, r2 ; A < B?

(p1) addi r3, r0, #1 ; r3 = 1
(p2) addi r3, r0, #2 ; r3 = 2
sw r3, X ; X = r3
en ejecutarse una instruccin:

( ) ( )
( )
5 . 0
10 8 5
10 2 10 200
T NI
T
CPI
8
9 -3
Clk

+

=

=

Por tanto, el procesador puede terminar 2 instrucciones por ciclo, con lo que se puede concluir que el procesador es
superescalar o VLIW, segn explote el paralelismo dinmica o estticamente.

Dependiendo de la implementacin del salto retardado, puede que sea necesario cambiar el cdigo del programa para
asegurar su correcto funcionamiento:

(1) En el caso en el que la instruccin que entra en el cauce tras el salto se anule siempre, sera necesario insertar una
instruccin NOP entre el salto y la suma, ya que en la ltima iteracin, en la que no se debe saltar, se anulara la
siguiente instruccin al salto y la operacin de almacenamiento final no accedera a la direccin correcta.

(2) Si la instruccin siguiente al salto no se anula nunca, el programa podra fallar si dicha instruccin afecta a los
registros que se usan en el bucle. En este ejemplo concreto, como dicha instruccin afecta a r5, que no se usa en el
bucle, el programa funcionara correctamente, aunque ejecutara la instruccin siguiente al salto en todas las
iteraciones, desperdiciando un tiempo de computacin que podra usarse en algn clculo til.

(3) Si la siguiente instruccin al salto se anula slo si se toma el salto, el programa se puede dejar tal y como est, ya
que slo se ejecutar cuando se termine el bucle.

(4) Por ltimo, si la siguiente instruccin al salto se anula slo si no se salta, ocurre igual que en el caso (2), el
programa podra fallar si dicha instruccin afecta a los registros que se usan en el bucle. Pero en este ejemplo
concreto el programa funcionara correctamente si el bucle itera ms de una vez, ya que se fijara en r5 el valor del
puntero donde empieza la matriz c en todas las iteraciones menos en la ltima, por lo que en el almacenamiento se
accedera a la direccin correcta. En este caso, tambin sera conveniente modificar el programa para ejecutar la
instruccin siguiente al salta una sola vez tras la ltima iteracin y aprovechar el spot del salto para realizar algn
clculo til.

A continuacin se muestran las modificaciones que seran necesarias para optimizar el programa en cada caso:

Se anula siempre No se anula nunca Se anula si se salta Se anula si no se salta
ld f1, b
add r1, r0, a
ld r2, N
loop: ld f2, 0(r1)
ld f3, 4(r1)
addf f4, f3, f2
mulf f4, f4, f1
sf 8(r1), f4
add r1, r1, #4
sub r2, r2, #1
bnez r2, loop
nop
add r5, r0, c
sf 0(r5), f4
ld f1, b
add r1, r0, a
ld r2, N
loop: ld f2, 0(r1)
ld f3, 4(r1)
addf f4, f3, f2
mulf f4, f4, f1
sf 8(r1), f4
sub r2, r2, #1
bnez r2, loop
add r1, r1, #4
add r5, r0, c
sf 0(r5), f4
ld f1, b
add r1, r0, a
ld r2, N
loop: ld f2, 0(r1)
ld f3, 4(r1)
addf f4, f3, f2
mulf f4, f4, f1
sf 8(r1), f4
add r1, r1, #4
sub r2, r2, #1
bnez r2, loop
add r5, r0, c
sf 0(r5), f4
ld f1, b
add r1, r0, a
ld r2, N
ld f2, 0(r1)
loop: ld f3, 4(r1)
addf f4, f3, f2
mulf f4, f4, f1
sf 8(r1), f4
add r1, r1, #4
sub r2, r2, #1
bnez r2, loop
ld f2, 0(r1)
add r5, r0, c
sf 0(r5), f4

Cualquiera de las soluciones (2) y (4) son intercambiables para ambos casos.

Solucin al problema 4:
Sabemos que en un procesador vectorial, el tiempo para procesar una operacin completa vectorial (para los 16 elementos
que caben en un registro vectorial) es:

TCV = TLI + MVL TPC

Por lo tanto, podemos obtener el tiempo por componente de la secuencia de instrucciones vectoriales como:

3
16
15 63
MVL
TLI TCV
TPC =

=

Una vez obtenido el tiempo por componente, el tiempo de ejecucin del programa se obtiene mediante la siguiente
expresin:

( ) TPC TLI
MVL
BUCLE BASE
+ +

+ = k T
k
T T
k


Por tanto, el tiempo para procesar 317 elementos sera de:

( ) segundos
10 500
1661
ciclos 1661 3 317 20 5 1
16
317
10
6 317

= = + +

+ = T

El rendimiento de un cauce vectorial se obtiene mediante la siguiente expresin:

( ) k
k
k
k
k
k
T
k
R
k
k
3
16
35 10
10 25
3 20 5 1
16
10
10 500 5 es vectorial s operacione
8 6
+

+

=
+ +

+

=

=

Por tanto, el mximo rendimiento se obtendr cuando el tamao del vector tienda a infinito, es decir,

MFLOPS 93 . 481
3
16
35
10 25
lim
8
=
+

= =

k
k
R R

También podría gustarte