• No se han encontrado resultados

Práctica 8 - Performance

N/A
N/A
Protected

Academic year: 2021

Share "Práctica 8 - Performance"

Copied!
42
0
0

Texto completo

(1)

Pr´

actica 8 - Performance

Organizaci´

on del Computador I

Ver´

onica Coy

Departamento de Computaci´on - FCEyN

UBA

(2)
(3)

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?

(4)

El problema

1.

El CPU es muuuuy r´

apido.

2.

La memoria

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,

(5)

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)

(6)

Los pedidos a la cach´e se clasifican como:

(7)

¿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 hits

Miss Rate =

cantidad de pedidoscantidad de miss

Observaci´

on:

Hit Rate + Miss Rate = 1

(8)

¿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)

(9)

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

(10)

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.

(11)

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/bloque



2

= 4 bloques → 2 bits para tags Cada bloque de memoria se va a corresponder con cualquier l´ınea de cach´e.

(12)

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.

(13)

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.

(14)

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 ahora

ten-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)

(15)

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 1

Consiste 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

(16)

(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



unidades



8



unidades/bloque



= 2 bloques → 1 bit para tags Cada bloque de memoria se va a corresponder l´ınea a l´ınea con el

(17)

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

(18)

(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

(19)

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

(20)

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

(21)

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/bloque



2

= 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.

(22)

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

(23)

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

(24)

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.

(25)

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 0

Cuando 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

(26)

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.

(27)

Ejercicio 1 - Correspondencia directa

Memoria Principal: 2

20

bytes, 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?

(28)

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, tantas

como entren en la cache: capacidad cache

capacidad de una l´ınea=

512B

16B/l´ınea=

29B

24B/l´ınea = 2

(29)

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

(30)

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?

(31)

1.

¿Cu´

anto mide un bloque para esta configuraci´

on?

Para esta

configuraci´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, tantas

(32)

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 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

(33)

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.

(34)

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

(35)

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

(36)

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

(37)

(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 %

(38)

Idea de soluci´on:

Para este bloque de c´odigo ser´ıa m´as conveniente la cach´e asociativa por conjuntos de

(39)

Acceso Desalineado

Un acceso desalineado es una situaci´

on especial que se da cuando

se realiza un acceso a memoria en una posici´

on cuya palabra

sobrepasa el l´ımite de la l´ınea de cach´

e. En este caso, para

satisfacer el ´

ultimo pedido de lectura desde cach´

e, ser´

a necesario

cargar dos l´ıneas de cach´

e en vez de una.

Un acceso desalineado es considerado un

Hit

sii ambas l´ıneas ya

est´

an en la cach´

e. Si falta una o las dos es considerado un ´

unico

(40)

i n t

a r r e g l o [ 1 0 0 0 0 ]

= {

/∗ . . . ∗/

} ;

i n t

c o n t a d o r = 0 ;

f o r

(

i n t

i = 0 ;

i < 1 0 0 0 0 ;

i++

)

{

i f

(

a r r e g l o [ i ]

> 4 )

c o n t a d o r ++;

}

(41)

Por qu´

e funciona la cach´

e (localidad temporal)

i n t

a r r e g l o [ 1 0 0 0 0 ] = {

/∗ . . . ∗/

} ;

i n t

c o n t a d o r = 0 ;

f o r

(

i n t

i = 0 ;

i < 1 0 0 0 0 ;

i ++)

{

i f

( a r r e g l o [ i ] > 4 )

c o n t a d o r++

;

}

(42)

Referencias

Documento similar

Amb la mateixa intensi- tat amb què la revolució de maig va emplaçar els joves a no deixar-se dir, fer o manipular per cap instància externa (ni pares, ni professors, ni governants,

Esta puerta l´ ogica NAND realiza la funci´ on booleana de negado del producto l´ ogico, es decir, aquella que proporciona un 0 l´ ogico si y solo si todas sus entradas est´ an en

Pese a ello y bajo los argumentos de Atl, la arquitectura que la revolución mexicana muestra al mundo es una obra propia y llena de la contemporaneidad buscada, una obra que

glesia, incluída la Capilla de San &#34;6.0- Los ves tidos sagrados , mante- Pas cu al, la celebración de las íestivi- l es d el altar y de la Capilla d e San d ades y la direcci ón

quiero también a Liseo porque en mi alma hay lugar para amar a cuantos veo... tiene mi gusto sujeto, 320 sin que pueda la razón,.. ni mande

Para ello, trabajaremos con una colección de cartas redactadas desde allí, impresa en Évora en 1598 y otros documentos jesuitas: el Sumario de las cosas de Japón (1583),

Pero la realidad se impone por encima de todo; la misma Isidora es consciente del cambio: «Yo misma conozco que soy otra, porque cuando perdí la idea que me hacía ser señora, me

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun