Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Examen Sept 07
Examen Sept 07
+
= 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