Pr´
actica 8 - Performance
Organizaci´
on del Computador I
Ver´
onica Coy
Departamento de Computaci´on - FCEyN
UBA
Hablemos sobre la memoria Cach´
e... (1)
¿Qu´
e es una memoria Cach´
e?
Es un espacio de almacenamiento intermedio entre el CPU y la memoria principal.
¿Por qu´
e la necesitamos?
Porque el crecimiento de la velocidad de los CPUs en las ´ultimas d´ecadas ha sido
exponencial respecto al de las memorias. El uso de la cach´e sirve para minimizar el
tiempo de acceso a los datos mejorando as´ı la performance del sistema.
¿Cu´
anto m´
as rapida es?
Entre 10 y 100 veces mas r´apida que la memoria principal.
¿Por qu´
e entonces no usamos s´
olo memoria cach´
e?
El problema
1.
El CPU es muuuuy r´
apido.
2.
La memoria
r´
apida
es
cara
y
consume mucha energ´ıa
.
3.
La memoria
barata
y de
bajo consumo
es
lenta
.
4.
Quiero tener
mucha memoria
,
muy r´
apida
,
barata
y que
consuma
poca energ´ıa
.
Una soluci´
on
1.
Uso mucha memoria de la barata y lenta,
2.
y un poquito de memoria de la cara y r´
apida,
Registro L1 L2 L3 RAM 0 20 40 60 80 100 120 Tiempo de Acceso (ns) Registro L1 L2 L3 RAM 0 500 1000 1500 2000 2500 Cantidad de memoria (KB)
Los pedidos a la cach´e se clasifican como:
¿C´
omo medimos la performance?
En base a estos dos eventos, miss y hit, se obtienen m´
etricas para
estimar el desempe˜
no de una cach´
e:
Hit Rate =
cantidad de pedidoscantidad de hitsMiss Rate =
cantidad de pedidoscantidad de missObservaci´
on:
Hit Rate + Miss Rate = 1
¿Qu´
e cosas deber´ıa tener en cuenta a la hora de dise˜
nar una cach´
e?
I
Tama˜
no: Deber´ıa ser lo suficientemente grande como para
maximizar los hits, pero a la vez, que sea lo suficientemente
peque˜
na como para no afectar el nivel de consumo.
I
Organizaci´
on: Establecer de qu´
e forma vinculo las direcciones
de memoria con las posiciones de mi cach´
e.
I
Pol´ıtica de desalojo: Qu´
e hacer cuando se llena la cach´
e.
I
Random
I
FIFO (First In First Out)
I
LFU (Least Frequently Used)
I
LRU (Least Recently Used)
Estructura de una Cach´
e
los niveles de caché. Como se observa en el gráfico, si el tiempo para acceder a un registro es de un ciclo de reloj, un acceso a memoria RAM tiene un costo inmenso y el tiempo de espera requerido por esta operación no puede ser utilizado para hacer cómputos: es un desperdicio importante de potencia computacional.
Las cachés funcionan por lo general bajo la hipótesis de localidad de referencia de varios tipos, en particular:
• localidad espacial: si se utiliza un dato en memoria en un instante dado, es muy
probable que en los instantes siguientes se utilice algún dato en una dirección cercana
• localidad temporal: si se utiliza un dato en memoria en un instante dado, es muy
probable que en los instantes siguientes se vuelva a utilizar
Características
La característica primordial de una memoria caché es su función de mapeo. Esta función establece una o varias posiciones de caché en las que puede almacenarse una copia de una posición de RAM dada. Dado que el tamaño de la caché es siempre muy inferior al de la RAM, dicha función nunca puede ser inyectiva: necesariamente varias posiciones de la RAM serán almacenadas en la misma posición de la caché (aunque no simultáneamente!). Por esta razón, será necesario que al almacenar un dato en caché, se etiquete la posición de la caché indicando el origen (la posición en RAM) correspondiente al dato en cuestión. Esta etiqueta se denomina tag, y permite identificar cual de las múltiples posiciones de memoria que van a parar a una línea dada de la caché se encuentra allí en un momento determinado.
Las memorias caché se organizan y operan (cargan y descargan) en líneas, a diferencia de una memoria convencional que se opera de a palabras. A su vez, dentro de cada línea, cada unidad direccionable tiene un índice dentro de la misma.
Palabras por línea Líneas Tags Índices 0 1 2 3
I L´ınea: Las memorias cach´e se componen por unidades denominadas l´ıneas cuyo
tama˜no es m´ultiplo del tama˜no de palabra que utiliza el CPU. Es la unidad que
se carga cada vez que se hace un acceso a memoria.
I ´Indice: Un ´ındice permite ubicar una palabra dentro de una l´ınea
I Tag: Es el identificador usado para mantener la correspondencia entre la l´ınea
en cach´e y la ubicaci´on de dicho contenido en memoria. El modo de trazar la
Memoria 0x0 0x1 0x2 0x3 0x0 0xA 0x0 0x0 0x4 0x5 0x6 0x7 0x0 0x0 0xF 0x0 0x8 0x9 0xA 0xB 0x0 0x0 0x5 0x0 0xC 0xD 0xE 0xF 0x0 0x0 0x0 0x0 Cache indice→ tag↓ 00 01 10 11 – — — — — – — — — —
Permite que cada l´ınea de memoria principal pueda cargarse en cual-quier l´ınea de la cache.
Cada una de estas l´ıneas identifica un´ıvocamente una l´ınea de la me-moria principal por medio del tag o etiqueta.
Para decidir si una l´ınea esta en la cache se debe examinar todas los tags almacenados en la cache.
Cach´
e Totalmente Asociativa
Memoria 0000 0001 0010 0011 B.0 0000 1010 0000 0000 0100 0101 0110 0111 B.1 0000 0000 1111 0000 1000 1001 1010 1011 B.2 0000 0000 0101 0000 1100 1101 1110 1111 B.3 0000 0000 0000 0000 Cache indice→ tag↓ 00 01 10 11 – — — — — – — — — —¿C´omo se hace la asociaci´on entre
las posiciones de memoria y la l´ınea
de cach´e?
Dividiendo la memoria en l´ıneas y
numer´andolas:
#bloquesmem=|linea|memoria|
cache| = |memoria||cache| #lineascache = 16
unidades 8 unidades/bloque2= 4 bloques → 2 bits para tags Cada bloque de memoria se va a corresponder con cualquier l´ınea de cach´e.
Memoria 0000 0001 0010 0011 B.0 0000 1010 0000 0000 0100 0101 0110 0111 B.1 0000 0000 1111 0000 1000 1001 1010 1011 B.2 0000 0000 0101 0000 1100 1101 1110 1111 B.3 0000 0000 0000 0000 Cache indice→ tag↓ 00 01 10 11 01 0000 0000 1111 0000 – — — — — Pregunta:
¿Qu´e ocurre cuando el CPU solicita
la direccion 0x6? Respuesta:
Tomo los dos primeros bits de la direcci´on para identificar el tag: 0x6 → 01 |{z} tag 10 |{z} indice
Como el tag no est´a cargado en
cach´e se produce un
miss. Voy
a la memor´ıa, busco la l´ınea y la traigo.
Cach´
e Totalmente Asociativa
Memoria 0000 0001 0010 0011 B.0 0000 1010 0000 0000 0100 0101 0110 0111 B.1 0000 0000 1111 0000 1000 1001 1010 1011 B.2 0000 0000 0101 0000 1100 1101 1110 1111 B.3 0000 0000 0000 0000 Cache indice→ tag↓ 00 01 10 11 01 0000 0000 1111 0000 00 0000 1010 0000 0000 Pregunta:¿Y si ahora quiere traer la direccion 0x1? Respuesta: Idem: 0x1 → 00 |{z} tag 01 |{z} indice
Como el tag no est´a cargado en
cach´e se produce un
miss. Voy
a la memor´ıa, busco la l´ınea y la traigo.
Memoria 0000 0001 0010 0011 B.0 0000 1010 0000 0000 0100 0101 0110 0111 B.1 0000 0000 1111 0000 1000 1001 1010 1011 B.2 0000 0000 0101 0000 1100 1101 1110 1111 B.3 0000 0000 0000 0000 Cache indice→ tag↓ 00 01 10 11 10 0000 0000 0101 0000 00 0000 1010 0000 0000 Pregunta:
Ahora, ¿qu´e ocurrir´ıa si el CPU
pi-diera la direcci´on 0xA?: Respuesta: 0xA → 10 |{z} tag 10 |{z} indice
Miss
de nuevo, pero ahoraten-go la cach´e llena. Deber´ıa desalojar alguna l´ınea, ¿pero cu´al?
I Random
I FIFO (First In First Out)
I LFU (Least Frequently
Used)
Cach´
e de Correspondencia Directa
(o Mapeo Directo)
Memoria 0x0 0x1 0x2 0x3 0x0 0xA 0x0 0x0 0x4 0x5 0x6 0x7 0x0 0x0 0xF 0x0 0x8 0x9 0xA 0xB 0x0 0x0 0x0 0x0 0xC 0xD 0xE 0xF 0x0 0x5 0x0 0x0 Cache indice→ tag↓ 00 01 10 11 – — — — — L´ınea 0 – — — — — L´ınea 1Consiste en partir la memoria
prin-cipal en bloques del tama˜no de la
cach´e. Luego, cada l´ınea del
blo-que tiene su lugar espec´ıfico en la cach´e.
Por cada l´ınea tengo que guardar a
(o Mapeo Directo)
Memoria 0000 0001 0010 0011 0000 1010 0000 0000 0100 0101 0110 0111 Blo qu e 0 0000 0000 1111 0000 1000 1001 1010 1011 0000 0000 0000 0000 1100 1101 1110 1111 Blo qu e 1 0000 0101 0000 0000 Cache indice→ tag↓ 00 01 10 11 – — — — — L´ınea 0 – — — — — L´ınea 1¿C´omo se hace la asociaci´on entre
las posiciones de memoria y la l´ınea
de cach´e?
Dividiendo la memoria en bloques
y numer´andolos:
#bloquesmem=|memoria||cache|
= 16
unidades8
unidades/bloque= 2 bloques → 1 bit para tags Cada bloque de memoria se va a corresponder l´ınea a l´ınea con el
Cach´
e de Correspondencia Directa
(o Mapeo Directo)
Memoria 0000 0001 0010 0011 0000 1010 0000 0000 0100 0101 0110 0111 Blo qu e 0 0000 0000 1111 0000 1000 1001 1010 1011 0000 0000 0000 0000 1100 1101 1110 1111 Blo qu e 1 0000 0101 0000 0000 Cache indice→ tag↓ 00 01 10 11 – — — — — L´ınea 0 0 0000 0000 1111 0000 L´ınea 1 Pregunta:¿Qu´e ocurre cuando el CPU solicita
la direcci´on 0x6? Respuesta:
Tomo el primer bit de la direcci´on
para identificar el tag y el siguiente para identificar la l´ınea:
0x6 → 0 |{z} tag 1 |{z} l´ınea 10 |{z} ´ındice
Como el tag no est´a cargado en
cach´e se produce un
miss. Pido
(o Mapeo Directo)
Memoria 0000 0001 0010 0011 0000 1010 0000 0000 0100 0101 0110 0111 Blo qu e 0 0000 0000 1111 0000 1000 1001 1010 1011 0000 0000 0000 0000 1100 1101 1110 1111 Blo qu e 1 0000 0101 0000 0000 Cache indice→ tag↓ 00 01 10 11 0 0000 1010 0000 0000 L´ınea 0 0 0000 0000 1111 0000 L´ınea 1 Pregunta:¿Y si ahora pide la direcci´on 0x1?
Respuesta: ´Idem: 0x1 → 0 |{z} tag 0 |{z} l´ınea 01 |{z} ´ındice
Como el tag ya est´a cargado en
me-moria, pero la l´ınea 0 no, se
produ-ce un
miss. Pido a memoria toda
Cach´
e de Correspondencia Directa
(o Mapeo Directo)
Memoria 0000 0001 0010 0011 0000 1010 0000 0000 0100 0101 0110 0111 Blo qu e 0 0000 0000 1111 0000 1000 1001 1010 1011 0000 0000 0000 0000 1100 1101 1110 1111 Blo qu e 1 0000 0101 0000 0000 Cache indice→ tag↓ 00 01 10 11 0 0000 1010 0000 0000 L´ınea 0 1 0000 0101 0000 0000 L´ınea 1 Pregunta:Ahora, ¿qu´e ocurrir´ıa si el CPU
pi-diera la direcci´on 0xD? Respuesta: 0xD → 1 |{z} tag 1 |{z} l´ınea 01 |{z} ´ındice
Como el tag no est´a cargado en
cach´e, se produce un
miss
por-que s´e que esa l´ınea no est´a en
cach´e.
Pero ahora, como mi cach´e est´a lle-na, voy a tener que reemplazar la
Memoria 0x0 0x1 0x0 0xD 0x2 0x3 0xA 0x0 0x4 0x5 0x0 0x0 0x6 0x7 0x0 0x8 0x8 0x9 0x0 0x0 0xA 0xB 0x0 0xE Cache tag 0 1 tag 0 1 – — — – — — Set 0 – — — – — — Set 1 | {z } via 1 | {z } via 0
Es un tipo de cach´e que combina
caracter´ısticas de los dos tipos de
cach´e que vimos previamente.
Es muy similar a la Cach´e de
Co-rrespondencia Directa, pero con el agregado de v´ıas que permiten persistir las l´ıneas de memoria en
cach´e por m´as tiempo.
Vamos a ver un ejemplo de 2 v´ıas, es extensible a N v´ıas
Cach´
e Asociativa por Conjuntos de N V´ıas
Memoria 0000 0001 0000 1101 0010 0011 Blo que 0 1010 0000 0100 0101 0000 0000 0110 0111 Blo que 1 0000 1000 1000 1001 0000 0000 1010 1011 Blo que 2 0000 1110 Cache tag 0 1 tag 0 1 – — — – — — Set 0 – — — – — — Set 1 | {z } via 1 | {z } via 0¿C´omo se hace la asociaci´on entre
las posiciones de memoria y la l´ınea
de cach´e?
Dividiendo la memoria en bloques
y numer´andolos:
#bloques =mem |memoria||via|
=|memoria||cache| #vias
= 812
unidades unidades/bloque2= 3 bloques → 2 bits para tags Cada bloque de memoria se va a corresponder l´ınea a l´ınea con las l´ıneas de cada v´ıa de la cach´e.
Memoria 0000 0001 0000 1101 0010 0011 Blo que 0 1010 0000 0100 0101 0000 0000 0110 0111 Blo que 1 0000 1000 1000 1001 0000 0000 1010 1011 Blo que 2 0000 1110 Cache tag 0 1 tag 0 1 – — — – — — Set 0 – — — 00 1010 0000 Set 1 | {z } via 1 | {z } via 0 Pregunta:
¿Qu´e ocurre cuando el CPU solicita
la direcci´on 0x2? Respuesta:
Tomo los dos primeros bits de la direcci´on para identificar el tag y el siguiente para identificar el set: 0x2 → 00 |{z} tag 1 |{z} set 0 |{z} ´ındice
Como el tag no est´a cargado en
cach´e se produce un miss. Pido a
Cach´
e Asociativa por Conjuntos de N V´ıas
Memoria 0000 0001 0000 1101 0010 0011 Blo que 0 1010 0000 0100 0101 0000 0000 0110 0111 Blo que 1 0000 1000 1000 1001 0000 0000 1010 1011 Blo que 2 0000 1110 Cache tag 0 1 tag 0 1 – — — 00 0000 1101 Set 0 – — — 00 1010 0000 Set 1 | {z } via 1 | {z } via 0 Pregunta:¿Y si ahora pide la direcci´on 0x1?
Respuesta: ´Idem: 0x1 → 00 |{z} tag 0 |{z} set 1 |{z} ´ındice
Como la l´ınea no est´a cargada en
cach´e se produce un miss. Pido a
Memoria 0000 0001 0000 1101 0010 0011 Blo que 0 1010 0000 0100 0101 0000 0000 0110 0111 Blo que 1 0000 1000 1000 1001 0000 0000 1010 1011 Blo que 2 0000 1110 Cache tag 0 1 tag 0 1 – — — 00 0000 1101 Set 0 10 0000 1110 00 1010 0000 Set 1 | {z } via 1 | {z } via 0 Pregunta:
Ahora, ¿qu´e ocurrir´ıa si el CPU
pi-diera la direcci´on 0xB? Respuesta: 0xB → 10 |{z} tag 1 |{z} set 1 |{z} ´ındice
Como el tag no est´a cargado en
cach´e, se produce un miss.
La direcci´on pedida corresponde al
set 1 y como tengo espacio puedo traerla.
Cach´
e Asociativa por Conjuntos de N V´ıas
Memoria 0000 0001 0000 1101 0010 0011 Blo que 0 1010 0000 0100 0101 0000 0000 0110 0111 Blo que 1 0000 1000 1000 1001 0000 0000 1010 1011 Blo que 2 0000 1110 Cache tag 0 1 tag 0 1 – — — 00 0000 1101 Set 0 10 0000 1110 00 1010 0000 Set 1 | {z } via 1 | {z } via 0Cuando el CPU solicita nuevamen-te la direcci´on 0x2:
Tomo los dos primeros bits de la direcci´on para identificar el tag y el siguiente para identificar el set: 0x2 → 00 |{z} tag 1 |{z} set 0 |{z} ´ındice
Como el tag est´a cargado en cach´e
Memoria 0000 0001 0000 1101 0010 0011 Blo que 0 1010 0000 0100 0101 0000 0000 0110 0111 Blo que 1 0000 1000 1000 1001 0000 0000 1010 1011 Blo que 2 0000 1110 Cache tag 0 1 tag 0 1 – — — 00 0000 1101 Set 0 01 0000 1000 00 1010 0000 Set 1 | {z } via 1 | {z } via 0 Pregunta:
¿Y si despu´es el CPU pide la
direc-ci´on 0x7? Respuesta: 0x7 → 01 |{z} tag 1 |{z} set 1 |{z} ´ındice
Como el tag no est´a cargado en
cach´e, se produce un miss.
De nuevo, la direcci´on pedida
co-rresponde al set 1. Sin embargo, ya tengo todas las v´ıas de mi set
com-pletas. ¿Qu´e hago?
Desalojo la l´ınea de alguna de las v´ıas del set 1 usando alguna de las pol´ıticas que vimos antes. Por ejemplo: LFU.
Ejercicio 1 - Correspondencia directa
Memoria Principal: 2
20bytes, direccionable a byte.
Cache: 32 l´ıneas de 16 bytes cada una.
Responder:
1.
¿Cu´
anto mide un bloque para esta configuraci´
on?
2.
¿Cu´
antos bloques entran en memoria principal?
3.
¿Cu´
antas l´ıneas entran en un bloque?
4.
¿C´
omo puedo saber si est´
a cargada la l´ınea donde se
encuentra la palabra referida por la direcci´
on C34A6?
configuraci´on, coincide con el tama˜no de la cache
# l´ıneas cache x capacidad de una l´ınea = 32l´ıneax 16 B
l´ınea= 512B = 2
9B
2.
¿Cu´
antos bloques entran en memoria principal?
capacidad memoria
tama˜no bloque =
220B
29B/bloque = 2
11bloque
3.
¿Cu´
antas l´ıneas entran en un bloque?
Para esta configuraci´on, tantascomo entren en la cache: capacidad cache
capacidad de una l´ınea=
512B
16B/l´ınea=
29B
24B/l´ınea = 2
4.
¿C´
omo puedo saber si est´
a cargada la l´ınea donde se
encuentra la palabra referida por la direcci´
on C34A6?
Primero me fijo cu´anto mide cada campo de una direcci´on de memoria para esta
configuraci´on de cache: tag 11 bits, l´ınea 5 bits, ´ındice 4 bits. Despu´es, paso la
direcci´on a binario para saber el valor de los campos correspondientes a esa
direcci´on. I La direcci´on en binario: C 1100 3 0011 4 0100 A 1010 6 0110
I Agrupada seg´un los campos tag, l´ınea e ´ındice:
61A 110 0001 1010 A 0 1010 6 0110
Finalmente, me tengo que fijar si en el lugar reservado para las l´ıneas n´umero
0xA, est´a cargada la l´ınea correspondiente al bloque n´umero 0x61A; si es as´ı, la
Memoria Principal: 1 MB, direccionable a byte.
Cache: 32 l´ıneas de 64 bytes cada una, 2 v´ıas.
Responder:
1.
¿Cu´
anto mide un bloque para esta configuraci´
on?
2.
¿Cu´
antos bloques entran en memoria principal?
3.
¿Cu´
antas l´ıneas entran en un bloque?
4.
¿C´
omo puedo saber si est´
a cargada la l´ınea donde se
encuentra la palabra referida por la direcci´
on C34A6?
1.
¿Cu´
anto mide un bloque para esta configuraci´
on?
Para estaconfiguraci´on, coincide con el tama˜no de una v´ıa
# l´ıneas por v´ıa = # l´ıneas cache
# v´ıas = 32l´ıneas cache 2cachev´ıas = 16 l´ıneas v´ıa = 2 4l´ıneas v´ıa
# l´ıneas por v´ıa x capacidad de una l´ınea = 24l´ıneas
v´ıa x 64
B
l´ınea = 2
10B
v´ıa
2.
¿Cu´
antos bloques entran en memoria principal?
capacidad memoria tama˜no bloque = 1MB 210B/bloque = 220B 210B/bloque = 2 10bloque
3.
¿Cu´
antas l´ıneas entran en un bloque?
Para esta configuraci´on, tantasencuentra la palabra referida por la direcci´
on C34A6?
Primero me fijo cu´anto mide cada campo de una direcci´on de memoria para esta
configuraci´on de cache: tag 10 bits, conjunto 4 bits, ´ındice 6 bits. Despu´es,
paso la direcci´on a binario para saber el valor de los campos correspondientes a
esa direcci´on.
I La direcci´on en binario: C 1100 3 0011 4 0100 A 1010 6 0110
I Agrupada seg´un los campos tag, conjunto e ´ındice:
30D 11 0000 1101 2 0010 26 10 0110
Finalmente, me tengo que fijar si en el lugar reservado para las l´ıneas n´umero
0x2, est´a cargada la l´ınea correspondiente al bloque n´umero 0x30D, en
cualquiera de los dos espacios del conjunto; si es as´ı, la l´ınea correspondiente a
Ejercicio 3
Se estudia agregar una memoria cache a una computadora cuyas
palabras y direcciones de memoria son de 16 bits, y que trabaja
con direccionamiento a byte.
Hasta el momento se barajan dos opciones:
I
Una cach´
e asociativa por conjuntos de 4 v´ıas
I
Una de correspondencia directa (o mapeo directo)
Cada cache puede almacenar hasta 1024 bytes de informaci´
on (sin
contar el espacio necesario para los tags) y se organiza en 64 l´ıneas
en total.
correspondientes para cada una de las caches mencionadas.
b) Se conoce que este fragmento
de c´odigo insume gran parte
del tiempo de c´omputo.
Junto a cada instrucci´on se
indica el acceso a memoria ne-cesario para el fetch de la ins-trucci´on, no as´ı los necesarios para acceder a los datos.
C´odigo Pedido a memoria
del fetch
MOV R6, 0x10 0x9C13
MOV R2, 0x801A 0x9C15, 0x9C17
mejill´on: ADD R5, [R2] 0x9C19
ADD R5, [R2 + 0x15] 0x9C1B
SUB R6, 0x01 0x9C1D
CMP R6, 0x00 0x9C1F
JNE mejill´on 0x9C21
Simule los accesos a memoria que realiza este programa hasta la comparaci´on
(inclusive) utilizando la cache de mapeo directo. Tenga en cuenta los accesos a datos, que no fueron detallados en la tabla. Indique en cada paso el contenido de la cache, y cuando corresponda detalle si se producen hits, misses, desalojos
(se˜nalando la l´ınea desalojada) y/o accesos desalineados. ¿Cu´al es el hit rate de
esta ejecuci´on parcial?
c) ¿Cu´al de las dos caches es m´as conveniente para la ejecuci´on completa del
a) Correspondencia directa
1. ¿Cu´anto mide un bloque para esta configuraci´on?Para esta configuraci´on,
coincide con el tama˜no de la cache, es decir 210B (lo dice el enunciado)
2. ¿Cu´antos bloques entran en memoria principal?
capacidad memoria
tama˜no bloque =
# direcciones x tama˜no unidad dir.
tama˜no bloque =
216x 1B
210B = 2
6
3. ¿Cu´antas l´ıneas entran en un bloque?Para esta configuraci´on, tantas como
entren en la cache:
capacidad de una l´ınea = capacidad cache
# l´ıneas en cache = 210B 64 = 210B 26 = 2 4B capacidad cache
capacidad de una l´ınea=
210B/cache
24B/linea = 2
6 linea
cache
4. ¿Cu´antas direcciones distintas refieren a una misma l´ınea?
tama˜no del tag x tama˜no de la linea = 26bits x 24bits = 210direcciones
Por lo tanto, la decodificaci´on de la direcci´on de 16 bits ser´a
1. ¿Cu´anto mide un bloque para esta configuraci´on?
Para esta configuraci´on, coincide con el tama˜no de una v´ıa.
capacidad cache
# v´ıas =
210B
4 = 2
8B
2.
¿Cu´
antos bloques entran en memoria principal?
capacidad memoria
tama˜no bloque =
# direcciones x tama˜no unidad dir.
tama˜no bloque =
216x 1B
28B = 2
8
3.
¿Cu´
antas l´ıneas entran en un bloque?
Hay 64 l´ıneas, que se dividen entre las 4 v´ıas. Por lo tanto, hay 644 = 16 = 24
conjuntos.
4. ¿Cu´antas direcciones distintas refieren a una misma l´ınea?
tama˜no del tag x tama˜no de la linea = 28bits x 24bits = 212direcciones
Por lo tanto, la codificaci´on ser´a
tag conjunto ´ındice 8 bits 4 bits 4 bits
(b) Accesos a memoria - Acceso directo
Direcci´on Tag L´ınea ´Indice Resultado Estado Cache Notas 0x9C13 27 1 3 Miss {1: 27} cargu´e 1:27 27 10 0111 00 000101 00113 0x9C15 27 1 5 Hit {1: 27} 27 10 0111 01 00 0001 5 0101 0x9C17 27 1 7 Hit {1: 27} 27 10 0111 00 000101 01117 0x9C19 27 1 9 Hit {1: 27} 27 10 0111 00 000101 10019
0x801A 20 1 A Miss {1: 20} desaloj´e 1: 27;
20 10 0000 01 00 0001 A 1010 cargu´e 1:20 0x9C1B 27 1 B Miss {1: 27} desaloj´e 1: 20; 27 10 0111 00 000101 1011B cargu´e 1:27
0x802F 20 2 F Miss {1: 27} acc. desalineado;
20 10 0000 00 001002 1111F {2: 20} cargu´e 2: 20; {3: 20} cargu´e 3: 20 0x9C1D 27 1 D Hit 27 10 0111 00 000101 1101D
0x9C1F 27 1 F Miss {1: 27} acc. desalineado;
27 10 0111 01 00 0001 F 1111 {2: 27} desaloj´e 2:20; {3: 20} cargu´e 2: 27 Hit rate =4 9≈ 0.44 %
Idea de soluci´on:
Para este bloque de c´odigo ser´ıa m´as conveniente la cach´e asociativa por conjuntos de