Parcial 1 A Cas
Parcial 1 A Cas
Parcial 1 A Cas
1. (2,5 puntos) La máxima aceleración alcanzable en un sistema que ejecuta un programa parcialmente
paralelizable es 5. El código del programa que no puede ejecutarse en paralelo, se ejecuta de manera
secuencial.
a) ¿Cuál es la fracción del tiempo de ejecución del programa que el sistema ejecuta código paraleliza-
ble? Expresa la fracción de tiempo solicitada como un porcentaje.
b) ¿Cuál será la aceleración que el sistema alcanzará cuando disponga de 4 núcleos y la ejecución del
código paralelizable se distribuya homogéneamente entre todos los núcleos disponibles? Asume que
el sistema integraba originalmente un procesador mono-núcleo y expresa la aceleración resultante
en porcentaje.
c) Cuando el sistema dispone de 4 núcleos, el programa considerado se ejecuta en 20 minutos. ¿Cuánto
tardará en ejecutarse cuando sólo disponga de un sólo núcleo de caracterı́sticas similares?
d) ¿Cuál será la fracción del tiempo de ejecución que el sistema con 4 núcleos empleará el código
paralelizable del programa?
e) El programa dedica la mitad del tiempo de ejecución de su código secuencial a ejecutar instruc-
ciones que un compilador alternativo puede llegar a optimizar utilizando planificación estática de
instrucciones. Si el sistema con 4 núcleos incrementa su frecuencia en un 5 % y el compilador alter-
nativo logra reducir el tiempo de ejecución del código secuencial optimizable en un 20 % , ¿cuál
es el máximo incremento del precio de estas dos modificaciones (frecuencia y compilador) con
respecto al sistema con 4 núcleos, desde una perspectiva de coste-prestaciones?
Solución:
a) ¿Cuál es la fracción del tiempo de ejecución del programa que el sistema ejecuta código
paralelizable? Expresa la fracción de tiempo solicitada como un porcentaje.
1
5 = 1−F → F = 0,8 → 80 %
b) ¿Cuál será la aceleración que el sistema alcanzará cuando disponga de 4 núcleos y la
ejecución del código paralelizable se distribuya homogéneamente entre todos los núcleos
disponibles? Asume que el sistema integraba originalmente un procesador mono-núcleo
y expresa la aceleración resultante en porcentaje.
S = 0,2+1 0,8 = 2,5 → S = 150 %
4
******************************
Otra forma de resolver el ejercicio es calcular la aceleración del procesador con respecto
al original. En este caso, la aceleración local es Sf req = 1,05 que afecta a todas las
fracciones de ejecución, y Scompiler = 1,25 que afecta solamenta al 50 % del tiempo
que el procesador ejecuta código secuencial, y Scores = 4 que afecta a la fracción del
tiempo de ejecución dedicado a código paralelo. Las fracciones de tiempo en este caso
son: Fpar = 0,8 y Fseq = 0,2, donde Fseqoptimized = 0,1 y Fseqnon−optimized = 0,1. Por lo
tanto:
Smodif −wrt−1core = 0,1 + 0,11 + 0,8 = 2,7632
1,05 1,05∗1,25 1,05∗4
Teniendo en cuenta:
Smodif −wrt−1core = S4cores−wrt−1core ∗ Smodif −wrt−4cores
y teniendo en cuenta S4cores−wrt−1core = 2,5, tenemos:
Smodif −wrt−1core
Smodif −wrt−4cores = S4cores−wrt−1core = 2,7632
2,5
= 1,1052 → 10,52 %
2. (2,5 puntos) Disponemos de un sistema con un procesador MIPS que funciona a 2 GHz, segmentado
en 5 etapas (IF,ID,EX,ME,WB). Los riesgos de datos se resuelven mediante cortocircuitos, insertando
ciclos de parada en la fase ID en caso necesario, mientras que los de control se resuelven mediante
predict-not-taken, calculando la condición, la dirección y escribiendo el PC en la fase ID.
Las estadı́sticas de los tipos de instrucciones al ejecutar un programa P son las siguientes:
Operación %
ALU 50 %
Carga 20 %
Almacenamiento 10 %
Saltos 20 %
El programa P ejecuta 100 × 106 instrucciones con un CPI de 1 salvo por los ciclos de parada. Durante
su ejecución, un 20 % de las instrucciones ALU y un 30 % de las instrucciones de salto necesitan que se
inserte un ciclo de parada para resolver los riesgos de datos con una instrucción anterior. Las estadı́sticas
obtenidas también indican que el 70 % de los saltos son efectivos.
Se pretende evaluar la conveniencia de añadir una nueva instrucción de salto LOOP para el control de
bucles. Dichas instrucciones de salto permitirı́an al compilador sustituir el siguiente tipo de secuencias:
loop: loop:
... ...
a) Calcular el CPI y el tiempo de ejecución (en segundos) en el MIPS original para el programa P.
b) Calcular el nuevo número de instrucciones, con respecto a las instrucciones originales, que ejecutará
el programa P si se utilizan las nuevas instrucciones LOOP.
c) Calcular la nueva distribución de instrucciones del programa P al incorporar las instrucciones LOOP.
d) Considerando que el porcentaje de instrucciones ALU que introducen un ciclo de parada por riesgos
de datos aumenta a un 25 % de los casos, calcular el nuevo CPI del programa P.
e) Calcular el tiempo de ejecución (en segundos) del programa P al utilizar las nuevas instrucciones
de control de bucles LOOP. ¿Es interesante la modificación propuesta?
Solución:
a) Calcular el CPI y el tiempo de ejecución (en segundos) en el MIPS original para el pro-
grama P.
CP I = 1 + c.p.datos + c.p.control
3. (3 puntos) Disponemos de un procesador MIPS con los siguientes operadores multiciclo segmentados:
.data
A: .double 4.1
B: .dword 2, 4, 5, -1, -3, 0, 4, -1
R: .double 0.0
N: .word 8
.text
1) l.d $f0, A($gp)
2) dadd $t1, $gp, B
3) lw $t2, N($gp)
4) l.d $f6, R($gp)
5) loop: l.d $f2, 0($t1)
6) cvt.d.w $f2, $f2 ; $f2 = conv_word_a_double($f2)
7) mul.d $f4, $f2, $f0
8) mul.d $f4, $f4, $f4
9) add.d $f6, $f6, $f4
10) daddi $t1, $t1, 8
11) daddi $t2, $t2, -1
12) bnez $t2, loop
13) s.d $f6, R($gp)
.end
Responde a las siguientes preguntas:
a) Identifica todos los cortocircuitos que se aplican en el diagrama, indicando para cada uno de ellos
el ciclo en el que se aplica, las instrucciones implicadas, las etapas del procesador (nombre del
cortocircuito) asi como el registro involucrado.
b) Calcula el CPI de una iteración intermedia del bucle.
c) Indica la técnica de resolución de conflictos de control utilizada en el procesador y la latencia de
salto. Justifica tu respuesta.
d) Indica porqué en el ciclo 25 pueden haber dos instrucciones accediendo a la etapa WB. Justifica tu
respuesta.
e) Si utilizamos la técnica de loop unrolling, indica cuantas iteraciones mı́nimas del bucle hay que
desenrollar para eliminar todos los conflictos de datos. Justifica tu respuesta.
f) Indica en cuantos ciclos se reducirı́a la ejecución de una iteración intermedia si sustituimos el ope-
rador de multiplicación por un nuevo operador no segmentado con latencia L = 2. Justifica tu
respuesta.
Solución:
a) Identifica todos los cortocircuitos que se aplican en el diagrama, indicando para cada uno
de ellos el ciclo en el que se aplica, las instrucciones implicadas, las etapas del procesador
(nombre del cortocircuito) asi como el registro involucrado.
Ciclo 9, etapas WB y C1, entre instrucciones 5 y 6 por el registro $f2
Ciclo 12, etapas WB y M1, entre instrucciones 6 y 7 por el registro $f2
Ciclo 17, etapas WB y M1, entre instrucciones 7 y 8 por el registro $f4
Ciclo 22, etapas WB y A1, entre instrucciones 8 y 9 por el registro $f4
Ciclo 25, etapas ME e ID, entre instrucciones 11 y 12 por el registro $t2
b) Calcula el CPI de una iteración intermedia del bucle. Una iteración intermedia se inicia
en el diagrama en el ciclo 5 y termina en el ciclo 25, por tanto, tiene una duración de
21 ciclos. En dicha iteración se ejecutan 8 instrucciones. Por tanto, el CPI lo podemos
calcular como: CP I = 21 8
= 2,625
c) Indica la técnica de resolución de conflictos de control utilizada en el procesador y la
latencia de salto. Justifica tu respuesta.
Resolución de conflictos de control mediante predict-not-taken, con latencia de salto 1.
En el diagrama vemos claramente que la siguiente instrucción a la instrucción de salto
se ha leido y posteriormente se cancela. Por tanto, se ha utilizado un predictor de saltos
estático not-taken. La latencia de salto es 1 ya que solamente se cancela una instrucción.
Alternativamente podemos asumir la utilización de un predictor dinámico BPB o BTB
donde se realiza la predicción de no salto.
d) Indica porqué en el ciclo 25 pueden haber dos instrucciones accediendo a la etapa WB.
Justifica tu respuesta.
Las dos instrucciones escriben en bancos de registros distintos (la instrucción 9 en el
banco de registros de coma flotante y la instrucción 10 en el banco de registros de enteros).
Por tanto, al ser dos estructuras distintas no existe conflicto estructural.
e) Si utilizamos la técnica de loop unrolling, indica cuál es el mı́nimo número de iteraciones
del bucle a desenrollar para eliminar todos los conflictos de datos. Justifica tu respuesta.
Debemos desenrollar cinco iteraciones para poder eliminar todos los conflictos de datos,
debido a que tenemos cuatro ciclos de parada entre la instrucción 8 y 9. Debemos interca-
lar cuatro instrucciones entre ambas instrucciones y esto lo obtenemos al desenrollar en
un factor de 5.
f) Indica en cuantos ciclos se reducirı́a la ejecución de una iteración intermedia si sustitui-
mos el operador de multiplicación por un nuevo operador segmentado con latencia L = 2.
Justifica tu respuesta.
Al reducir la latencia del operador de 5 a 2 ciclos, reducimos los ciclos de parada entre
las instrucciones 7 y 8 de 4 ciclos a 1 ciclo, ası́ como reducimos ciclos de parada entre las
instrucciones 8 y 9 de 4 ciclos a 1 ciclo. Por tanto, ahorramos 6 ciclos por iteración. El
tiempo de ejecución de una iteración es ahora de 15 ciclos.
Instrucción 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1) l.d $f0, A($gp) IF ID EX ME WB
2) dadd $t1, $gp, B IF ID EX ME WB
3) lw $t2, N($gp) IF ID EX ME WB
4) l.d $f6, R($gp) IF ID EX ME WB
5)loop: l.d $f2, 0($t1) IF ID EX ME WB
6) cvt d.w $f2, $f2 IF id ID C1 C2 C3 WB
7) mul.d $f4, $f2, $f0 if IF id id ID M1 M2 WB
8) mul.d $f4, $f4, $f4 if IF id ID M1 M2 WB
9) add.d $f6, $f6, $f4 if IF id ID A1 A2 A3 WB
10) daddi $t1, $t1, 8 if IF ID EX ME WB
11) daddi $t2, $t2, -1 IF ID EX ME WB
12) bnez $t2, loop IF id ID EX ME WB
13) s.d $f6, R($gp) if IF X
6)loop: l.d $f2, 0($t1) IF ID EX ME WB
4. (2,0 puntos) Un procesador implementa un predictor BPB de 3 bits con saturación. En dicho procesador
se ejecuta un código que incluye dos bucles anidados; la instrucción de salto del bucle externo con PC=
0x0100 144C que se repite 100 veces y controlado por la variable j, y la instrucción de salto del interno
con PC 0x0100 044C que se repite 1000 veces y se encuentra controlado por la variable i. La tabla del
predictor consta de 1024 entradas de 3 bits.
Se pide:
a) Dibuja la máquina de estados del predictor. Para dibujarla SOLO puedes utilizar cı́rculos para
representar los estados y flechas para las transiciones. Dentro del cı́rculo deberá incluirse un valor
binario de tres bits para indicar el valor del estado (o contador binario). Las flechas solo pueden
etiquetarse con T (salta) o NT (no salta) según corresponda.
b) ¿Qué bits del PC (31 − 0) utilizarı́as para indexar la tabla y porqué sabiendo que las dirección de
las instrucciones en el MIPS 32 es siempre múltiplo de 4 y los bits de menor peso son cero?
c) En caso de que las dos instrucciones de salto compartan entrada (aliasing) en la tabla del predictor,
¿cuál deberı́a ser el número mı́nimo de entradas de la tabla para evitar el aliasing? ¿qué bits del PC
utilizarı́as para indexar la nueva tabla del predictor? Justifica tu respuesta.
d) Asumiendo que las dos instrucciones de salto comparten entrada en la tabla y su estado antes de
empezar el bucle es 000, cuando se ejecuta por segunda vez la instrucción de salto del bucle externo
(j=2):
1) ¿Qué valor (estado) encontrará en la tabla la instrucción de salto externo, cuál será el valor de
la predicción, y qué valor dejará?
2) Tras ello, y para j=2, ¿cuáles serán los valores encontrará la instrucción de salto interno cuando
acceda a la tabla para realizar la predicción durante todas sus iteraciones desde la i=1 hasta
i=1000?
3) Desde el punto de vista de la precisión al predecir la instrucción de salto del bucle externo,
razona si perjudica o beneficia el hecho de que los dos saltos compartan entrada.
Solución:
Instrucción 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1) l.d $f0, A($gp) IF ID EX ME WB
2) dadd $t1, $gp, B IF ID EX ME WB
3) lw $t2, N($gp) IF ID EX ME WB
4) l.d $f6, R($gp) IF ID EX ME WB
5)loop: l.d $f2, 0($t1) IF ID EX ME WB
6) cvt d.w $f2, $f2 IF id ID C1 C2 C3 WB
7) mul.d $f4, $f2, $f0 if IF id id ID M1 M2 M3 M4 M5 WB
8) mul.d $f4, $f4, $f4 if IF id id id id ID M1 M2 M3 M4 M5 WB
9) add.d $f6, $f6, $f4 if if if if IF id id id id ID A1 A2 A3 WB
10) daddi $t1, $t1, 8 if if if if IF ID EX ME WB
11) daddi $t2, $t2, -1 IF ID EX ME WB
12) bnez $t2, loop IF id ID EX ME WB
13) s.d $f6, R($gp) if IF X
6)loop: l.d $f2, 0($t1) IF ID EX ME WB