You are on page 1of 11

Universidad de Concepción

Facultad de Ingeniería

TAREA 3
Arquitectura de Computadores - 543426

Christopher Ruiz Gutiérrez


Mauricio Novoa Díaz
Solución:

a) El 𝐶𝑃𝐼 mínimo de este benchmark es el 𝐶𝑃𝐼 menor entre los tipos de instrucción; en este caso
será 𝐶𝑃𝐼 = 3, luego, con este 𝐶𝑃𝐼 podemos encontrar el MIPS máximo de la siguiente forma:

𝑓𝑟𝑒𝑙𝑜𝑗
𝑀𝐼𝑃𝑆 =
𝐶𝑃𝐼 ∙ 106

2.5 ⋅ 109
⟹ 𝑀𝐼𝑃𝑆𝑀𝐴𝑋 = = 833.33
3 ∙ 106
b) Para obtener el 𝐶𝑃𝐼 se utilizará la información entregada en la tabla. Entonces se tiene:

𝐶𝑃𝐼 = ∑ 𝑓𝑖 ∙ 𝐶𝑃𝐼𝑖

𝐶𝑃𝐼 = 3 ∙ 0.3 + 12 ∙ 0.26 + 30 ∙ 0.32 + 5 ∙ 0.12


⇒ 𝐶𝑃𝐼 = 14.22
Luego, el 𝑀𝐼𝑃𝑆 será:
𝑓𝑟𝑒𝑙𝑜𝑗
𝑀𝐼𝑃𝑆 = = 175.81
𝐶𝑃𝐼 ∙ 106

c) Lo que se debe calcular ahora es el 𝐶𝑃𝐼 nuevo dado por la mejora. Dada la mejora, se tiene
un nuevo número total de instrucciones (#𝑖𝑛𝑠𝑡𝐶𝑀 = 112), asumiendo número de
instrucciones igual a 100 en el programa sin mejora, ahora se tiene:

𝐶𝑃𝐼𝐴𝐿𝑈 ∙ #𝑖𝑛𝑠𝑡𝐴𝐿𝑈𝐶𝑀 + 𝐶𝑃𝐼𝐹𝐿𝑂𝐴𝑇 ∙ #𝑖𝑛𝑠𝑡𝐹𝐿𝑂𝐴𝑇 + 𝐶𝑃𝐼𝐿𝑆 ∙ #𝑖𝑛𝑠𝑡𝐿𝑆𝐶𝑀 + 𝐶𝑃𝐼𝑆𝐶 ∙ #𝑖𝑛𝑠𝑡𝑆𝐶


𝐶𝑃𝐼𝐶𝑀 =
#𝑖𝑛𝑠𝑡𝑇𝑂𝑇

3 ∙ 42 + 12 ∙ 26 + 30 ∙ 0.4 ∙ 32 + 15 ∙ 0.4 ∙ 32 + 10 ∙ 0.2 ∙ 32 + 5 ∙ 12


𝐶𝑃𝐼𝐶𝑀 =
112

𝐶𝑃𝐼𝐶𝑀 = 10.16

Luego la aceleración con respecto a b) se obtendrá a partir de:

𝐶𝑃𝐼𝑆𝑀 ∙ #𝑖𝑛𝑠𝑡𝑆𝑀
𝑆𝑀 =
𝐶𝑃𝐼𝐶𝑀 ∙ #𝑖𝑛𝑠𝑡𝐶𝑀

14.22 ∙ 100
⟹ 𝑆𝑀 = = 1.25
10.16 ∙ 112
Solución:

a) Los 𝐶𝑃𝐼𝑠 son:


𝐶𝑃𝐼𝑓𝑝1 = 2 ∙ 0.3 + 8 ∙ 0.3 + 22 ∙ 0.25 + 3 ∙ 0.15 = 8.95
𝐶𝑃𝐼𝑓𝑝2 = 2 ∙ 0.3 + 8 ∙ 0.15 + 22 ∙ 0.35 + 3 ∙ 0.20 = 10.1

b) De acuerdo con lo obtenido en el inciso a) el programa 𝑓𝑝1 es más rápido, puesto que tiene
un 𝐶𝑃𝐼 más pequeño, luego puede realizar más 𝑀𝐼𝑃𝑆.
Otro modo de comprobarlo es comparando la aceleración de uno respecto al otro; de eso se
tiene:
𝐶𝑃𝐼𝑓𝑝2
𝑆𝑀 = = 1.128
𝐶𝑃𝐼𝑓𝑝1
Del resultado recién obtenido, se puede decir que el programa 𝑓𝑝1 es ≈ 13% más rápido
que 𝑓𝑝2.

c) Primero se obtendrán los 𝐶𝑃𝐼𝑠 con mejoras de ambos programas:

2 ∙ 30 + 8 ∙ (30 ∙ 0.8) + 15 ∙ 25 + 3 ∙ 15 672


𝐶𝑃𝐼𝑓𝑝1𝐶𝑀 = = = 7.15
30 + 30 ∙ 0.8 + 25 + 15 94

2 ∙ 30 + 8 ∙ (15 ∙ 0.8) + 15 ∙ 35 + 3 ∙ 20 741


𝐶𝑃𝐼𝑓𝑝2𝐶𝑀 = = = 7.64
30 + 15 ∙ 0.8 + 35 + 20 97

Luego la aceleración será para cada programa:


𝐶𝑃𝐼𝑓𝑝1𝑆𝑀 ∙ #𝑖𝑛𝑠𝑡𝑓𝑝1𝑆𝑀
𝑆𝑀𝑓𝑝1 =
𝐶𝑃𝐼𝑓𝑝1𝐶𝑀 ∙ #𝑖𝑛𝑠𝑡𝑓𝑝1𝐶𝑀

8.95 ∙ 100
⟹ 𝑆𝑀𝑓𝑝1 = = 1.33
7.14 ∙ 94

Similar para 𝑓𝑝2:


10.1 ∙ 100
⟹ 𝑆𝑀𝑓𝑝2 = = 1.36
7.64 ∙ 97

El programa que se ve más afectado por la mejora es 𝑓𝑝2, puesto que logra una mayor
aceleración con respecto a su programa original que 𝑓𝑝1.

1
d) La Ley de Amdahl se define como 𝑆𝑀 = . Debido a que se analizará solo la fracción a
𝐹
1−𝐹+
𝑆

mejorar, 𝑆 → ∞. Luego se tiene:

𝐶𝑃𝐼𝐿𝑆𝑓𝑝𝑖 ∙ 𝑓𝑝𝑖 ∙ 𝑋𝑖
𝐹𝑓𝑝𝑖 =
𝐶𝑃𝐼𝑓𝑝𝑖
Siendo 𝑋 la fracción a eliminar e 𝑖 = {1, 2}.

22 ∙ 0.25 ∙ 𝑋1
𝐹𝑓𝑝1 = = 0.615 ∙ 𝑋1
8.95

22 ∙ 0.35 ∙ 𝑋2
𝐹𝑓𝑝2 = = 0.762 ∙ 𝑋2
10.1

Luego, las aceleraciones serán (Por Ley de Amdahl y utilizando las aceleraciones obtenidas
en c)):

1
𝑆𝑓𝑝1 = 1.33 =
1 − 0.615 ∙ 𝑋1

⟹ 𝑋1 = 0.4041

Entonces, en 𝑓𝑝1 el porcentaje de instrucciones load/store a mejorar es de 40.41%.


Análogamente para 𝑓𝑝2 se tiene:
1
𝑆𝑓𝑝2 = 1.36 =
1 − 0.7624 ∙ 𝑋1

⟹ 𝑋1 = 0.3472

Luego, en 𝑓𝑝2 el porcentaje de instrucciones load/store a mejorar es de 34.47%.


Solución:

a) Primero obtendremos las cantidades de 𝐶𝑃𝐼 por la frecuencia de cada tipo de instrucción:

𝐶𝑃𝐼𝐴𝐿𝑈 ∙ 𝑓𝐴𝐿𝑈 = 1(450 + 20 ∙ 50 + 70) = 1520


𝐶𝑃𝐼𝐹𝐿𝑂𝐴𝑇 ∙ 𝑓𝐹𝐿𝑂𝐴𝑇 = 8(50 + 30 ∙ 50 + 70) = 12960
𝐶𝑃𝐼𝐿𝑆 ∙ 𝑓𝐿𝑆 = 25(50 + 35 ∙ 50 + 40) = 46000
𝐶𝑃𝐼𝐵𝐶𝑂𝑁𝐷 ∙ 𝑓𝐵𝐶𝑂𝑁𝐷 = 2(50 + 15 ∙ 50 + 20) = 1640

Luego, el 𝐶𝑃𝐼𝑇𝑂𝑇 estará dado por la suma de estos, partido por el número total de
instrucciones del programa:
1520 + 12960 + 46000 + 1640
𝐶𝑃𝐼𝑇𝑂𝑇 = = 10.71
5800
Finalmente, el 𝑀𝐼𝑃𝑆 de este benchmark será:

2𝑥109
𝑀𝐼𝑃𝑆 = = 186.74
10.71𝑥106
b) Para a primera mejora se hará lo siguiente:

Se calcula la frecuencia dinámica de las instrucciones Punto Flotante, como se muestra a


continuación,
50 + 30 ∙ 50 + 70
𝑓𝑑𝐹𝐿𝑂𝐴𝑇 = = 0.279
5800
Luego la fracción F es:
𝑓𝑑𝐹𝐿𝑂𝐴𝑇 ∙ 𝐶𝑃𝐼𝐹𝐿𝑂𝐴𝑇 0.279 ∙ 8
𝐹= = = 0.208
𝐶𝑃𝐼𝑇𝑂𝑇 10.71

Por otro lado, la aceleración 𝑆 se calcula como:


#𝑖𝑛𝑠𝑡𝐹𝐿𝑂𝐴𝑇−𝑆𝑀 1620
𝑆= = = 3.649
#𝑖𝑛𝑠𝑡𝐹𝐿𝑂𝐴𝑇−𝐶𝑀 50 + 0.8 ∙ 30 + 0.8 ∙ 30 ∙ 50 + 70

Luego, por Ley de Amdahl se tiene:


1
𝑆𝑀 =
𝐹
1−𝐹+𝑆

1
𝑆𝑀 = = 1.178
0.208
1 − 0.208 + 3.649
Para la segunda mejora se tiene lo siguiente:

La aceleración se obtiene como sigue,


#𝑖𝑛𝑠𝑡𝐿𝑆
#𝑖𝑛𝑠𝑡𝑇𝑂𝑇 𝐶𝑃𝐼𝐿𝑆−𝑆𝑀
𝑆= = 1.04
#𝑖𝑛𝑠𝑡𝐿𝑆 #𝑖𝑛𝑠𝑡𝐿𝑆
( 𝐶𝑃𝐼𝐿𝑆−𝑆𝑀 ) 0.8 + ( 𝐶𝑃𝐼𝐿𝑆−𝐶𝑀 ) 0.2
#𝑖𝑛𝑠𝑡𝑇𝑂𝑇 #𝑖𝑛𝑠𝑡𝑇𝑂𝑇

La fracción F se obtiene a partir de la frecuencia dinámica de la siguiente manera:

50 + 35 ∙ 50 + 40
𝑓𝑑𝐿𝑆 = = 0.317
5800

𝑓𝑑𝐿𝑆 ∙ 𝐶𝑃𝐼𝐿𝑆−𝑆𝑀 0.317 ∙ 25


𝐹= = = 0.740
𝐶𝑃𝐼𝑇𝑂𝑇 10.71

Finalmente, por Ley de Amdahl:


1
𝑆𝑀 = = 1.03
0.740
1 − 0.740 + 1.04

En vista a lo anterior, la primera mejora aporta un 18% de desempeño, mientras que la


segunda solo aporta un 3%; por lo tanto, la primera aporta un mejor desempeño.

c) Para el caso de la Ley de Amdahl con multinúcleos, se utiliza 𝑆 = 𝑁 = 4.


Para obtener la fracción F se requiere lo siguiente:

𝑓𝑑𝐴𝐿𝑈 = 0.17
𝑓𝑑𝐹𝐿𝑂𝐴𝑇 = 0.26
𝑓𝑑𝐿𝑆 = 0.30
𝑓𝑑𝐵 = 0.13

𝐶𝑃𝐼𝐴𝐿𝑈 ∙ 𝑓𝐴𝐿𝑈 = 0.17 ∙ 1 = 0.17


𝐶𝑃𝐼𝐹𝐿𝑂𝐴𝑇 ∙ 𝑓𝐹𝐿𝑂𝐴𝑇 = 8 ∙ 0.26 = 2.08
𝐶𝑃𝐼𝐿𝑆 ∙ 𝑓𝐿𝑆 = 0.30 ∙ 25 = 7.5
𝐶𝑃𝐼𝐵𝐶𝑂𝑁𝐷 ∙ 𝑓𝐵𝐶𝑂𝑁𝐷 = 0.13 ∙ 2 = 0.26

Luego
∑ 𝐶𝑃𝐼𝑖 𝑓𝑑𝑖 0.17 + 2.08 + 7.5 + 0.26
𝐹= = = 0.935
𝐶𝑃𝐼𝑇𝑂𝑇 10.71
Luego la Ley de Amdahl nos entregará la aceleración con los cuatro núcleos:
1
𝑆𝑀 = = 3.34
0.935
1 − 0.935 + 4
d)
Solución:

a) El código es el siguiente:

INVERSE: MOV R2, #0; i=0


FOR: CMP R2, R1
BGT FIN_FOR
SUB R3, R1, #1 ; R3=n-1
LDR R3, [R0, R3, LSL #2]; R3=vector[n-1]
STR R3, [R0, R2, LSL #2]; R3=vector[i]
ADD R2, R2, #1; i++
B FOR
FIN_FOR: MOV PC, LR

b) Para obtener el CPI se tiene:

#𝑖𝑛𝑠𝑡𝐴𝐿𝑈 = 2 + 3 ∙ 100 = 302


#𝑖𝑛𝑠𝑡𝐿𝑆 = 2 ∙ 100 = 200
#𝑖𝑛𝑠𝑡𝐵 = 2 ∙ 100 = 200
#𝑖𝑛𝑠𝑡𝑇𝑂𝑇 = 702

302
𝑓𝐴𝐿𝑈 = = 0.43
702

200
𝑓𝐿𝑆 = = 0.285
702

200
𝑓𝐵 = = 0.285
702

𝐶𝑃𝐼 = 1 ∙ 0.43 + 24 ∙ 0.285 + 3 ∙ 0.285 = 8.12

c) Con la mejora el nuevo 𝐶𝑃𝐼𝐿𝑆−𝑝𝑟𝑜𝑚 se calcula como:

200 ∙ 0.8 ∙ 6 + 200 ∙ 0.15 ∙ 12 + 200 ∙ 0.05 ∙ 24


𝐶𝑃𝐼𝐿𝑆−𝑝𝑟𝑜𝑚 = = 7.8
200

Dado que se tienen dos mejoras paralelas en el programa, la Ley de Amdahl se define como:

1
𝑆𝑀 =
𝐹 𝐹
1 − 𝐹1 − 𝐹2 + 𝑆1 + 𝑆2
1 2
Así, las fracciones serán:

200
0.8 ∙ 702 ∙ 24
𝐹1 = = 0.67
8.12

200
0.15 ∙ ∙ 24
𝐹1 = 702 = 0.13
8.12

Las aceleraciones 𝑆1,2:

24
𝑆1 = =4
6

24
𝑆2 =
=2
12
Así, por Ley de Amdahl la aceleración en el programa debido a las mejoras será:

1
𝑆𝑀 = = 2.31
0.67 0.13
1 − 0.67 − 0.13 + 4 + 2

d)

You might also like