Organización y Arquitectura de Computadores ESPOL Tercera Evaluación 2012-2
1. ORGANIZACIÓN Y ARQUITECTURA DE COMPUTADORES
TERCERA EVALUACION – SEGUNDO TÉRMINO 2012-2013
NOMBRE:_________________________________________________
INSTRUCCIONES
•
•
•
•
•
•
•
•
•
•
El examen es totalmente individual, a libro cerrado y no se podrá consultar a
ninguna otro tipo de fuente que no sea usted mismo (no libros, no apuntes, no
teléfono celular, no Internet, no archivos electrónicos).
Toda respuesta deberá colocarse en este documento y no se aceptarán ni hojas ni
otro documento aparte.
El examen puede ser resuelto en menos de dos horas aún cuando tengan que
responder en el computador.
Se le permite tener máximo tres hojas en blanco, un lápiz o pluma, un borrador y
una regla. Las hojas le permitirán realizar los cálculos que se requieran para
obtener las respuestas a ciertas preguntas del examen.
Antes de empezar el examen coloque su nombre en las hojas en blanco que va a
utilizar y muéstrelas al profesor.
Al terminar el examen deberá llamar al profesor para que le reciba el archivo del
examen. No se aceptará otro método de recepción.
Al guardar este archivo guárdelo con el nombre de su apellido y su nombre en ese
orden.
Además de entregar el archivo entregue las tres hojas que haya o no utilizado
durante el examen para hacer los cálculos.
Cualquier otra instrucción que falte en este documento se las dará en clase.
No hay consultas de ningún tipo.
2. Pregunta # 1 (7 puntos)
Asuma para que la variable a está en el registro $s0, b está en $s1 y c está en $s2.
Convierta el siguiente fragmento escrito en C directamente a lenguaje ensamblador de
MIPS. Comente correctamente su código para indicar que hace cada línea.
a=0;
for(b=10; b > 0, b = b-1){
for (c=b; c>0; c=c-1)
{
a = a + b*c;
}
}
Label
Instrucción
Comentarios
add $s0, $zero, $zero
addi $s1, $zero, 10
Inicio constante a con valor cero
Inicio contador b del lazo externo con
valor 10
Comparo b si es mayor que cero, si es
igual a cero salgo del lazo externo
Inicio contador c del lazo interno con el
valor del contador b del lazo externo
Comparo c si es mayor que cero, si es
igual a cero salgo del lazo interno
Multiplico b*c
Guardo la parte alta del resultado de la
multiplicación b*c
Guardo la parte bajo del resultado de la
multiplicación b*c
Sumo el producto b*c con el valor de a
Decremento contador c
forExt: beq $s1, $zero, Exit1
add $s2, $zero, $s1
forInt:
beq $s2, $zero, Exit2
mult $s1, $s2
mfhi $s3
mflo $s3
Exit2:
Exit1:
add $s0, $s0, $s3
addi $s2, $s2, -1
j forInt
addi $s1, $s1, -1
j forExt
Decremento contador b
3. Pregunta # 2 (6 puntos)
Suponga que tiene un computador que funciona a 2GHz. Si este computador ejecuta un
codificador de video MPEG-4 que procesa 1000 millones de instrucciones que tienen la
siguiente distribución de instrucciones:
20%
10%
30%
20%
15%
5%
Floating point
Integer
Load
Store
Branches
Other
CPI = 3
CPI = 1
CPI = 2
CPI = 1
CPI = 4
CPI = 1.5
a. ¿Cuál es el CPI promedio para este codificador de video? (1.5 puntos)
0.20x3 + 0.10x1 + 0.30x2 + 0.2x1 + 0.15x4 + 0.05x1.5 =
0.60 + 0.10 + 0.60 + 0.2 + 0.6 + 0.075 = 2.175
b. ¿Cuánto tiempo le tomará al codificador ejecutar todas las instrucciones? (1 puntos)
2.175 x 0.5x10-9 x 1x109 = 1.0875 sec.
c. Asuma que tiene un compilador inteligente que puede reducir las instrucciones de
floating-point a la mitad triplicando las instrucciones de enteros. Comparando con el CPI
original, cuál es el porcentaje de mejoramiento de CPI? (Hint, requiere calcular
nuevamente los porcentajes de las instrucciones.) (3.5 puntos)
(10 + 30 + 30 + 20 + 15 + 5) = 110
10/110%
30/110%
30/110%
20/110%
15/110%
5/110%
Floating point
Integer
Load
Store
Branches
Other
CPI = 3
CPI = 1
CPI = 2
CPI = 1
CPI = 4
CPI = 1.5
9.09%
27.27%
27.27%
18.18%
13.64%
4.55/110%
Floating point
Integer
Load
Store
Branches
Other
CPI = 3
CPI = 1
CPI = 2
CPI = 1
CPI = 4
CPI = 1.5
4. 0.0909x3 + 0.2727x1 + 0.2727x2 + 0.1818x1 + 0.1364x4 +
0.0455x1.5 =
0.2727 + 0.2727 + 0.5454 + 0.1818 + 0.5456 + 0.0683 = 1.8865
(2.175-1.8865)/2.175x100 = 13.26%
Pregunta # 3 (2 puntos)
Representación de Punto Flotante: Escriba la representación binaria siguiendo el estándar
IEEE 754 de simple precisión (32-bits) del número en decimal -13 y 5/32. Recuerde el
número mágico (127) que se añade al exponente. Muestre cada paso de la conversión.
-135/32 = -13.15625
-1101.00101 = -1.10100101 x 23+127 = -1.10100101 x 2130
128
1
64
0
32
0
16
0
8
0
4
0
2
1
1
0
1 10000010 10100101000000000000000
Pregunta # 4 (6 puntos)
Un procesador trabaja a 2 GHz y tiene un CPI de 1.2 sin incluir los ciclos de “stall”
debido a búsquedas no acertadas en cache (misses). Las instrucciones de “load” and
“store” cuentan por el 30% de todas las instrucciones.
El procesador tiene un I-cache y un D-cache. El tiempo cuando se acierta (hit time) es de
1 ciclo reloj. La I-cache tiene un 3% de “miss rate”. La D-cache tiene un 5% de “miss
rate” en las instrucciones de “load” y “store”.
La penalidad por un “miss” es de 40 ns, que es el tiempo de acceso y transferencia de un
bloque de cache entre la memoria principal y el procesador.
.
a. Cuál es el tiempo de acceso promedio para el acceso a una instrucción en ciclos de
reloj? (1 punto)
Miss penalty = 40 ns * 2 GHz = 80 clock cycles
AMAT = hit time + miss rate * miss penalty = 1 + 0.03 * 80 = 3.4 clock
cycles
5. b. Cuál es el tiempo promedio de acceso a memoria para acceso de datos en ciclo de
reloj? (1 punto)
AMAT = 1 + 0.05 * 80 = 5 clock cycles
c. Cuál es el número de ciclos de espera (stall) por instrucción y el total de CPI? (2
puntos)
Stall cycles per instruction = 1 * 0.03 * 80 + 0.3 * 0.05 * 80 = 3.6 cycles
Overall CPI = 1.2 + 3.6 = 4.8 cycles per instruction
d. Usted está considerando reemplazar el CPU de 2 GHz por uno idéntico pero que
trabaja a 3 GHz. Cuán más rápido es el nuevo procesador? Asuma que el tiempo de
acertar (hit time) en la I-cache y la D-cache es 1 ciclo de reloj en el nuevo procesador,
y que el tiempo de acceso y de transferencia de un bloque de cache entre la memoria
y el procesador es todavía de 40 ns. (2 puntos)
For the new processor running at 3 GHz:
Miss penalty = 40 ns * 3 GHz = 120 clock cycles
Stall cycles per instruction:
(1 * 0.02 + 0.3 * 0.05) * 120 = 5.4 cycles
Overall CPI = 1.2 + 5.4 = 6.6 cycles per instruction
Speedup = (CPIc / CPId) * (Clock Rated / Clock Ratec) = (4.8 / 6.6) *
(3/2) = 1.0909
Problema # 5 (17.5 puntos)
Para el datapath de MIPS mostrado a continuación, algunas líneas han sido marcadas con
“X”. A continuación se desea ejecutar el siguiente código:
Código Ejemplo
Instrucción
addi $s1, $zero, 3
addi $s2, $zero, 2
Loop: add $s3, $s2, $s3
sw $s1, 0($s2)
add $s1, $s2, $t0
add $s2, $s1, $t1
beq $s1, $s2, loop
6. Los valores iniciales de los registros y de memoria son los siguientes:
Registro
$s1
$s2
$s3
$t0
$t1
Valor
0x0003
0x0002
0x0000
0x0002
0x0000
Memoria Direccion
0x0000
0x0004
0x0008
0x000C
0x0010
Valor
0x0000
0x0001
0x0002
0x0002
0x0003
a. Si no se corta ninguna línea:¿Cuáles son los valores de los registros al realizar una
iteración del lazo? ¿El procesador queda dentro de un lazo o no? (3.5 puntos)
Instruc.
addi $s1, $zero, 3
C1
C2
C3
C4
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
addi $s2, $zero, 2
Loop:
add $s3, $s2, $s3
sw $s1, 0($s2)
add $s1, $s2, $t0
C5
IF
C6
C7
C8
C9
C10
WB
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
add $s2, $s1, $t1
C11
ID
EX
MEM
beq $s1, $s2, loop
$s1
3
3
3
3
3
3
3
3
4
4
$s2
2
2
2
2
2
2
2
2
2
4
$s3
0
0
0
0
0
0
2
2
2
2
WB
C12
C13
7. Registro
Valor
$s1
$s2
$s3
$t0
$t1
0x0004
0x0004
0x0002
0x0002
0x0000
Memoria
Direccion
0x0000
0x0004
0x0008
0x000C
0x0010
Valor
0x0000
0x0001
0x0002
0x0002
0x0003
Si se queda en el lazo porque $s1 = $s2
b. Describa en palabras la consecuencia negativa de cortar solo la línea 1. ¿Cuáles son
los valores de los registros al realizar una iteración del lazo? ¿El procesador queda
dentro de un lazo o no? (3.5 puntos)
Línea
1
Descripción
No puede escribir a un registro. Esto significa que
cualquier instrucción tipo R y cualquier otra
instrucción que guarde en registro no lo puede hacer
Ninguna instrucción podrá escribir a los registros y por lo tanto los
valores de los registros no cambiarán
Registro Valor
$s1
$s2
$s3
$t0
$t1
0x0003
0x0002
0x0000
0x0002
0x0000
Memoria
Direccion
0x0000
0x0004
0x0008
0x000C
0x0010
Valor
0x0000
0x0001
0x0002
0x0002
0x0003
No se queda en el lazo porque $s1 <> $s2
c. Describa en palabras la consecuencia negativa de cortar solo la línea 2. ¿Cuáles son
los valores de los registros al realizar una iteración del lazo? ¿El procesador queda
dentro de un lazo o no? (3.5 puntos)
Línea
2
Descripción
El Forwarding del primer operando falla.
8. Instruc.
C1
addi $s1, $zero, 3
C2
C3
C4
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
addi $s2, $zero, 2
add $s3, $s2, $s3
sw $s1, 0($s2)
add $s1, $s2, $t0
C5
IF
C6
C7
C8
C9
C10
C12
WB
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
add $s2, $s1, $t1
C11
ID
EX
MEM
beq $s1, $s2, loop
$s1
3
3
3
3
3
3
3
3
4
4
$s2
2
2
2
2
2
2
2
2
2
4
$s3
0
0
0
0
0
0
2
2
2
WB
2
Hay cinco dependencias que utilizan el forwarding (líneas azules). De
izquierda a derecha, y de arriba hacia abajo, la primera y la segunda
están relacionadas con el registro $s2 como primer operando por lo
tanto el forwarding de $s2 fallará. La tercera y cuarta dependencia
están relacionadas con el registro $s1 como primer operando por lo
tanto el forwarding de $s1 fallará también. Los valores finales de los
registros serán:
Registro
Valor
$s1
$s2
$s3
$t0
$t1
0x0003/0x0004
0x0004
0x0002
0x0002
0x0000
Memoria
Direccion
0x0000
0x0004
0x0008
0x000C
0x0010
Valor
0x0000
0x0001
0x0002
0x0002
0x0003
Si se queda en el lazo
d. Describa en palabras la consecuencia negativa de cortar solo la línea 3. ¿Cuáles son
los valores de los registros al realizar una iteración del lazo? ¿El procesador queda
dentro de un lazo o no? (3.5 puntos)
C13
9. Línea
Descripción
La dirección destino de un salto de una instrucción
branch no trabaja.
3
Registro
Valor
$s1
$s2
$s3
$t0
$t1
Memoria
Direccion
0x0000
0x0004
0x0008
0x000C
0x0010
0x0004
0x0004
0x0005
0x0002
0x0000
Valor
0x0000
0x0001
0x0002
0x0002
0x0003
No se queda en el lazo pues no se habilita el branch
e. Describa en palabras la consecuencia negativa de cortar las líneas 1, 2 y 3. ¿Cuáles
son los valores de los registros al realizar una iteración del lazo? ¿El procesador
queda dentro de un lazo o no? (3.5 puntos)
Instruc.
addi $s1, $zero, 3
C1
C2
C3
C4
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
addi $s2, $zero, 2
add $s3, $s2, $s3
sw $s1, 0($s2)
add $s1, $s2, $t0
C5
IF
C6
C7
C8
C9
C10
WB
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
add $s2, $s1, $t1
C11
ID
EX
MEM
beq $s1, $s2, loop
$s1
3
3
3
3
3
3
3
3
3
3
$s2
2
2
2
2
2
2
2
2
2
2
$s3
0
0
0
0
0
0
0
0
0
0
No se queda en el lazo pues no se habilita el branch
WB
C12
C13
10. Problema # 6 (10 puntos)
A continuación se le proporciona un segmento de código.
1 add $s4, $s1, $s0
2 sub $s9, $s3, $s4
3 add $s4, $s5, $s6
4 lw $s2, 100($s3)
5 sw $s2, 100($s4)
6 lw $s2, 0($s2)
7 and $s2, $s2, $s1
a.
Realice el diagrama de pipeline e identifique las dependencias y hazards. Para el
diagrama se le proporciona la siguiente tabla y se le da un ejemplo con la primera
instrucción: (5 puntos)
b.
Reescriba el código incluyendo instrucciones NOP (de ser necesario) para
resolver los hazards. (2 puntos)
1 add $s4, $s1, $s0
nop
nop
2 sub $s9, $s3, $s4
3 add $s4, $s5, $s6
4 lw $s2, 100($s3)
nop
nop
5 sw $s2, 100($s4)
6 lw $s2, 0($s2)
nop
11. nop
7 and $s2, $s2, $s1
17 ciclos
Instruc.
C1
add $s4, $s1, $s0
C2
C3
C4
IF
ID
EX
MEM
nop
nop
IF
C6
C7
C8
C9
C10
C12
C13
ID
EX
MEM
WB
ID
EX
MEM
nop
nop
IF
WB
ID
EX
MEM
WB
IF
ID
EX
MEM
IF
ID
EX
MEM
nop
add $s4, $s5, $s6
C11
IF
sub $s9, $s3, $s4
C5
nop
IF
lw $s2, 100($s3)
sw $s2, 100($s4)
WB
lw $s2, 0($s2)
WB
and $s2, $s2, $s1
c.
WB
ID
EX
MEM
Reordene el código de tal forma que obtenga el mejor desempeño posible. Indique
el número de ciclos reloj que toma la ejecución. (3 puntos)
1 add $s4, $s1, $s0
4 lw $s2, 100($s3)
2 sub $s9, $s3, $s4
3 add $s4, $s5, $s6
5 sw $s2, 100($s4)
6 lw $s2, 0($s2)
7 and $s2, $s2, $s1
Instruc.
add $s4, $s1, $s0
lw $s2, 100($s3)
C1
C2
C3
C4
IF
ID
EX
MEM
IF
ID
EX
MEM
WB
nop
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
nop
nop
IF
sw $s2, 100($s4)
lw $s2, 0($s2)
and $s2, $s2, $s1
16 ciclos
C7
C8
C11
ID
EX
MEM
ID
EX
MEM
nop
add $s4, $s5, $s6
C6
C10
IF
sub $s9, $s3, $s4
C5
C9
C12
nop
IF
C13
WB
WB
WB
WB
ID
EX
MEM
WB
WB
12. Problema # 7 (4.5 puntos)
a.
¿Cuáles son las dos características de accesos a memoria de programa que la
memoria cache explota? (1.5 puntos)
localidad temporal, y localidad especial
b. ¿Cuál es la longitud en bits de tag, index y offset de bloque para una cache de
datos de 128KB con mapeo directo que utiliza una dirección de 32-bits y 16 bytes
por bloque? (1.5 puntos)
128KB = 128*1024 bytes = 32*1024 words = 8*1024 blocks
Bits
8
9
10
11
12
13
Decimal
256
512
1024
2048
4096
8192
Index = 13 bits
Offset = 4 bits
Tag = 32 – 13 – 4 = 15 bits
c. ¿Cuál es la longitud en bits de tag, index y offset de bloque para una cache
asociativa de 8-vias que tiene 16 bloques y 32 bytes por bloque. Asuma una
dirección de 32 bits? (1.5 puntos)
16 blocks = 2 sets of 8-vias
Bits
8
9
10
11
12
13
Decimal
256
512
1024
2048
4096
8192
Index = 1 bit (# de sets)
Offset = 5 bits
Tag = 32 – 5 + 1 = 26 bits
Pregunta # 8 (7.5 puntos)
Considere una memoria cache con mapeo directo con 64 bloques. El tamaño de cada
bloque es de 32 bytes.
13. a. Encuentre el número de bits para tag, bits para indice, y bits de osffset en una
dirección de 32-bit. (1.5 puntos)
Offset bits = 5
Index bits = 6
Tag bits = 32 – 11 = 21 bits
b. Encuentre el número de bits requerido para almacenar todos los bits de validación y
de tags de la memoria cache. (2 puntos)
Total number of tag and valid bits = 64* (21 + 1) = 1408 bits
c. Dada la siguiente secuencia de referencia a direcciones en decimal:
20000, 20004, 20008, 20016, 24108, 24112, 24116, 24120
Iniciando con una cache vacía, muestre el indice, tag y offset para cada referencia e
indique si hubo un “hit” o un “miss”. (A continuación se proporciona una tabla para que
la vaya llenando con la información adecuada. (4 puntos)
20000 / 32 = 625 bloques
625 mod 64 = 49 (# del bloque o index)
24108 / 32 = 753.3750
753 mod 64 = 49
0.3750 * 32 = 12
Address = Hex
20000
=
0x4E20
24108
=
0x5E2C
01001-110001-00000
Tag (21 bits)
01001 =0x09= 9
Index (6) bits)
110001=0x31=49
Offset (5) bits
00000=0x00=0
01011-110001-01100
01011 =0x0B= 11
110001=0x31=49
01100=0x0C=12
Address = Hex Offset (5)
bits) 0
20000 = 0x4E20
0x00 =
Index (6)
bits) 49
0x31 =
Tag
Hit or Miss
9
Miss (initially empty)
20004 = 0x4E24
0x04 = 4
0x31 = 49
9
Hit
20008 = 0x4E28
0x08 = 8
0x31 = 49
9
Hit
20016 = 0x4E30
0x10 = 16
0x31 = 49
9
Hit
24108 = 0x5E2C
0x0C = 12
0x31 = 49
11
Miss (different tag)
24112 = 0x5E30
0x10 = 16
0x31 = 49
11
Hit
24116 = 0x5E34
0x14 = 20
0x31 = 49
11
Hit
24120 = 0x5E38
0x18 = 24
0x31 = 49
11
Hit
14. Pregunta # 9 (1 punto)
Cuàl de las siguientes proposiciones es verdadera?
a.
El examen evaluó lo que aprendimos en las clases
b.
c.
El examen evaluó material que no vimos en las clases
El examen fue tan fácil que no fue necesario estudiar el material visto en
clase.