Dasda Sdas Dasa
Dasda Sdas Dasa
Dasda Sdas Dasa
Finales
Punto 1 (Empezado)
i representa la fila
j la columna
Asumiendo:
● direcciones físicas de 16 bits
● Caché con mapeo directo
○ 512 bytes para datos
○ 32 bytes de datos por línea
32 bytes por línea => bits del offset = log2(32) = 5 =>offset de 5 bits
32 bytes por línea y 512 bytes en total => 512/32 = cantidad de líneas = 16 =>
bits de index =log2(16)= 4 =>index de 4 bits
c)
Punto 2 (Terminado)
Datos:
espacio virtual de 2^32 bytes
RAM de 16 MiB 2^24 bytes
a) ¿Cuántos bits tiene la dirección física ?
24 bits
b) T=tamaño
Cada página tiene qué almacenar el número de frame, el bit de valido y el bit de dirty
2^32/2^offset=cant frames
T Frame = 2^offset
c)
( log2(2^32/2^12) +2 ) *( 2^32 /2^12) < 2^12
es decir con esté tamaño de página la tabla de página no entraría en una página
para qué la tabla entre habría qué hacer las páginas más grandes
Punto 3 (Terminado)
Datos:
pipeline de 5 etapas
● 20% de predicciones de branch erróneas
● Solo forwarding para operaciones aritméticas
● branch y jump actualizan el PC en la etapa memory
● De las instrucciones el 30% son Load, 10% son branch y 2 % son jump
a) Calcule qué porcentaje debe haber de load seguidos de una instrucción qué usa el
dato para obtener un speed up de 4 en comparación con una implementación sin
pipeline
4 = 5/ (1.12 + 0.6 * X)
4*(1.12 + 0.6*X) = 5
X = 0.13/0.6
X = 0.216
Rta:para qué haya un speed up de 4 debe el 21.66% de los load deben estar
seguidos de una instrucción qué utilice el dato
b) ¿Si se le agrega forwarding a las lecturas de memoria y la resolución del jump se
realiza en el dcode y la del branch en el execute cual es el speed up comparado con
el anterior?
Speedup = 5/(1+0.1*0.2+0.02+0.3*0.216)
Speedup = 4.525
Datos:
2 arreglos (A y B), cada arreglo contiene 1024 enteros
cada entero ocupa 4 bytes
El primer elemento de A está en 0000 4000 h
El primer elemento de B está en 0001 0800 h
4 Kb de datos en total y 16 bytes de datos por línea => 4 Kb / 16 bytes = 256 líneas
b) ¿En qué campos se divide la dirección física para acceder a la caché? ¿cuantos bits
tiene cada parte?
c) ¿En cuantos bloques se dividen los arreglos? ¿ Qué set les corresponde?
Para el arreglo A
0000 4000 h -> 0000 0000 0000 0000 0100 0000 0000 0000
0000 4016 h -> 100 0000 0001 0110
tag = 0100
index= 0000
Para el arreglo B
0001 0800 h -> 0000 0000 0000 0001 0000 1000 0000 0000
index=128
Para el arreglo A :
en el ciclo 0
los 16 bytes se almacenan en el set 0 (un miss)
ciclos de 1 al 3
se accede a los datos qué se encuentran en el set 0 ( 3 hits)
en el ciclo 0
los 16 bytes se almacenan en el set 128 (un miss)
ciclos de 1 al 3
se accede a los datos qué se encuentran en el set 128 ( 3 hits)
Posibles conflictos:
la caché se llenará en el ciclo 512 ya qué los set de la caché de 0 a 127 estarán
ocupados por componentes del arreglo A y los set de la caché de 128 a 255 estarán
ocupados por componentes del arreglo B
esto no presentará ningún problema a la hora de calcular los hits ya qué los valores
reemplazados ya fueron utilizados y no se volverá intentar acceder a esta sección de la
memoria
¿Ese valor hubiera variado si la caché, manteniendo la capacidad para datos, hubiera
estado organizada con grado de asociatividad 2?
por lo tanto el arreglo B y A comenzarán a llenar la caché desde el mismo set (el set 0 ) y
esto sería un problema si la caché fuera de mapeo directo ya qué cuando se acceda a la
componente B en cada ciclo se reemplaza la línea de caché y esto provocaría qué todos los
accesos a memoria sean un miss (ya qué cada vez qué se accede a A o B reemplaza el
otro arreglo y estos se acceden de forma intercalada)
Punto 5 (Terminado)
1500 instr /1600000 intr * seg =9.37*10^-4 (esto es lo qué se tarda en controlar el
mouse una vez)
¿Es significativa?
(70275*100)/2500000 = 2.811 %
Datos:
espacio virtual de 2^32 bytes
páginas de 4 KiB
RAM de 8 MiB
para direccionar 8 MiB de memoria se necesitan direcciones de log2(8 MiB) =23 bits
d) ¿Cuántos bits tiene el número página y el número de frame?
Si una página tiene 4 KiB de datos entonces el Offset necesita log2(4 KiB) bits
espacio virtual de 2^32 bytes => direcciones virtuales de 32 bits + offset de 12 bits
=> el número de páginas tiene 32 - 12 = 20 bits
e) ¿ Por qué la propuesta de usar los últimos bits de la página para identificar el frame
es mala?
Creo qué esta idea es mala debido a qué cada página estaría limitada a mapear el
frame qué corresponda a sus últimos bits
1703936/2^12 = 416
Punto 7 (Creo qué Incompleto)
● Ventajas:
○ al no utilizar los datos luego de un load se evitan los stall qué tendría la
instrucción qué utilizará el dato del load
● Desventajas
○ al hacer qué el compilador garantice qué luego de un load no se utilice el
registro destino hace qué las instrucciones no puedan ejecutarse en el orden
en qué fueron hechas
Punto 8 (Terminado)
Punto 9 (Empezado)
Datos:
dirección virtuales de 25 bits
direcciones físicas de 22 bits
páginas de 2^16 bits
1) ¿Cuál es el tamaño total en bits de la tabla de páginas?
FIFO:
● Ventajas:
○ Es más fácil de implementar qué LRU
○ hace qué los últimos datos accedidos no se vaya de la caché
rápidamente por lo qué, lo cual es bueno ya que es probable qué los
datos recientemente accedidos sean requeridos
● Desventajas
○ Datos qué son muy frecuentemente usados pueden ser reemplazados
a pesar de ser usado recientemente ( esto no pasaría con LRU)
○ es posible qué un dato sea utilizado pocas veces y luego se sigan
utilizando otros pero con FIFO estos datos aunque no sean utilizados
no serán reemplazados si ingresaron recientemente.
○ Es más complejo de implementar qué random
● Neutros:
○ Todos datos qué sean enviados a la cache serán reemplazados luego
de la misma cantidad de datos accedidos con el mismo index
Random
● Ventajas:
○ Es fácil de implementar
○ Al ser al azar existe la posibilidad de qué reemplace siempre los datos
qué no vas a necesitar próximamente (aunque esto es un caso ideal y
poco probable)
● Desventajas
○ Al ser azar existe la posibilidad de qué reemplace siempre los datos
qué van a ser requeridos a continuación
○ Al no seguir ninguna lógica lo más probable es qué reemplace más
datos útiles qué LRU o FIFO
b) Describa una caso en el qué la política FIFO sea mejor qué la LRU
Un caso en el qué es mejor una política FIFO qué una LRU es el caso en el qué por
ejemplo cada dato se utilice solo 2 veces y entre esos 2 usos no se llene la cache
en esté caso la politica FIFO seria mejor ya qué el LRU guardaria los datos por más tiempo
al ver qué se volvieron a utilizar pero realmente nunca volveran a ser solicitados
Un bit qué apunte al elemento qué se debe reemplazar a continuación y una vez qué
se reemplazó ese elemento se prende el bit de dato siguiente
Punto 11 (Terminado con dudas (d y e))
Datos:
T Pagina: 2048 bytes = T frame
T Espacio lógico : 8192 páginas
T espacio físico : 128 frames = 128 páginas
Físicas:
Espacio físico = 128 páginas
T Pagina = 2048 bytes
Espacio físico =128* 2048 bytes =262144 bytes
T Direcciones físicas = log2 ( 262144) = 18 bits
Lógicas:
Espacio lógico = 8192 páginas
T Pagina = 2048 bytes
Espacio lógico=2048 * 2048 bytes =2^22 bytes
T Direcciones lógicas = log2(2^22) = 22 bits
quizá el inconvenientes es qué la tabla de páginas ocupa 3.5 pág es decir 4 páginas
de las cuales 1 se desperdicia la mitad
el tamaño del TLB seria (11+7+5 )*10 = 230 bits = 28.75 bytes (RARO)
Punto 12 (Terminado (Repasar parte 4))
Parte 1
es el punto 3
Parte 2
es el punto 2
Parte 3
es el punto 4
Parte 4
1. Unidad de control cableada( HUC): Las señales de salida (i.e. señales de control )
de la CU son generadas por los circuitos lógicos construidos con compuertas y
flip-flops
2. Unidad de Control Microprogramada(MCU) La secuencia de microprogramas
correspondientes a cada instrucción(o microinstrucción) del set de instrucciones
(ISA) se almacena en una memoria qué permite lecturas y escrituras denominada
memoria control (CM). La secuencia de microinstrucciones se denomina
microprograma y una microinstrucción corresponde a una o más microoperaciones
(dependiendo de la cantidad de instrucciones) qué deben ejecutarse
secuencialmente.
Todo piola
Punto 13 (Terminado sin ganas)
Una versión más avanzada del pseudo LRU es la usada por interl 80486 para su cache
no-chip. Esta versión asocia 3 bits B0, B1 y B2 a cada conjunto de una caché qué es 4-way
set associative (las líneas asociadas a cada way son L0, L2 y L3), cuando hay qué
reemplazar una línea, el agoritmo de reemplazo opera de la siguiente forma
● Primero, se determina si la línea más recientemente usada está en el par L0-L1 o en
el par L2-L3
● Luego del par qué no contiene a la línea más recientemente usada, se marca para
reemplazo la linea menos recientemente usada
1)Explicar qué indican los bits B0, B1 y B2 y como deben actualizarse acceder a una linea
2) Analizar cómo esté algoritmo es una mejor aproximacion de LRU qué el peseudo LRU
con un único bit (por ejemplo, analizar la secuencia de accesos L0,L2,L3,L1)
1) los bits B0, B1 y B2 sirven para indicar cual es siguiente elemento a reemplazar
(cual es el elemento qué se utilizo hace más tiempo)
funcionan como un árbol binario de decisión
Datos:
Pipeline de 5 etapas
Branch:
Se resuelve en execute
para reemplazar en la fórmula anterior hay qué tener en cuenta qué el CPI base
es el
CPIIdeal + los stall provocados por otras instrucciones
CPIBase=1.2
%de branch = .2
%T/PT= .65*.88
%NT/PT=.35*.12
%T/PNT=.65*.12
0.00272 - 100%
0.00227 - x = 83,45 %
Punto 1 de nuevo
a)
Dirección base A = 0A20 H
N = 16
Posición en memoria = dirección_de_base_de_A + (j* N + i) *
tamaño elemento
Datos:
Memoria física de 16 bits → Dirección = 16 bits
Cache física de 512 bytes → S = 512 bytes = 0,512 kb
Mapeo Directo → m = 1
Líneas de 32 bytes → L = 32 bytes
C = S/L = 512/32 = 16
c)
La matriz ocupa 16x 16 x 4 bytes = 1024 bytes
Sabemos que:
L = 32 bytes (tamaño de línea)
COLUMN-MAJOR
ROW-MAJOR