Você está na página 1de 46

Memoria cach

La jerarqua de memoria

Memoria cach
El tamao del banco de memoria cache debe ser:
Suficientemente grande para que el procesador resuelva

la mayor cantidad posible de bsquedas de cdigo y


datos en esta memoria asegurando una alta
performance
Suficientemente pequea para no afectar el consumo ni
el costo del sistema.

Se dice que se logra un hit cuando se accede a

un tem (dato o cdigo) y ste se encuentra en la


memoria cache.
En caso contrario, se dice que el resultado del
acceso es un miss.
Se espera un hit rate lo mas alto posible
hit
rate

Cantidad de accesos con presencia en Memoria


= Cache
Cantidad total de accesos a memoria

Localidad
Es el principio que hace que la

jerarqua de memoria sea una buena


idea

Si un dato es referenciado:
Localidad temporal:
temporal volver a ser

referenciado pronto
Localidad espacial:
espacial datos cercanos al
actual sern inmediatamente
referenciados
Localidad secuencial: Las instrucciones
suelen accederse en secuencia

Localidad
La localidad es una caracterstica de

los programas y de sus datos


El cdigo suele tener mucha localidad

espacial y/o temporal.


Estudios sealan que un programa est
el 90% de su tiempo de ejecucin en
slo 10% del cdigo.
Los datos que referencia dicho
cdigo.....depende del programa

Cache
Es una memoria pequea y rpida ubicada

cerca de la CPU, en ella se almacena el


cdigo y los datos direccionados
frecuentemente.

Su desarrollo se basa en el principio de

referencias localizadas, es decir, se usa ms


frecuentemente slo una porcin de la
memoria.

[Cach: del francs cacher, que significa

guardar o esconder.]

Cache

1KB

256 KB

1ns

5 ns

1 GB

80 GB

100 ns

5 ms

Cache
Cach:
Mantiene las palabras (datos o
instrucciones) de memoria de mayor uso
Reduce tiempo de acceso promedio.
Controlador adivina aplicando
localidad
Caractersticas:
Alta velocidad
Capacidad pequea
Fsicamente: SRAM (varias veces ms
rpidas que DRAM)

Cache
Uso:
1. Cuando la CPU lee una posicin de memoria, primero
verifica si esta memoria se encuentra en la memoria
cach.
2. Si se encuentra en la cach (hit) la CPU la lee
directamente de ella.
3. Si no est en la memoria (miss) cach la CPU la busca en
la memoria principal, y la copia en la cach para futuras
lecturas.

Operacion de lectura de
Cache

Cache
Elementos de diseo:
Tamao
Funcin

de correspondencia
Algoritmo de sustitucin
Poltica de escritura
Tamao de lnea
Nmero de cachs

[ Memoria ]
N

Dir

Etiqueta Bloque

CK<<2n
C-1

K palabras

2n-1

Datos

Bloque:
K palabras

Memoria principal:

Cach:

[ Memoria ]
N
0
1
2
3

Dir

Etiqueta Bloque

Datos

0
Como hay menos lneas de cach que
bloques
de memoria principal, se necesita un1 algoritmo
2
que haga corresponder bloques de memoria
3
principal a lneas de cach.
:

Adems, se necesita determinar a qu bloque de


memoria principal corresponde una lnea dada
de cach.
CK<<2n
C-1

K palabras

2n-1

Bloque:
K palabras

Memoria principal:

Cach:

[ Memoria ]
2. Funcin de correspondencia:
Algoritmo que hace corresponder bloques de
memoria con lneas de cach.
Existen tres formas de establecer esta
correspondencia:
directa (mapeo directo)
asociativa y
asociativa por conjuntos.

Cach de Mapeo Directo


Donde se ubica un dato? En una

posicin nica de la cach.


Como se asigna esa posicin nica? En
relacin con la direccin del dato en
memoria.
Direccin del bloque en cach =
(direccin del bloque en memoria) mod (n de bloques de la cach)

Si el nmero de bloques en cach es una potencia


de 2, la operacin mdulo es simplemente quedarse
con los log2 bits de menor peso de la direccin.

Cach de Mapeo Directo

000
001
010
011
100
101
110
111

Cache

00001

00101

01001

01101

10001

Memory

10101

11001

11101

Cach de Mapeo Directo


Si cada bloque de la cach puede contener los

datos de unas cuantas direcciones de memoria


Como se sabe si los datos que estn en la cach
son los deseados?
Es decir, como se sabe si hay hit o miss?
Aadiendo a la cach un conjunto de etiquetas
(tags) que contienen la informacin necesaria
para identificar a un dato en la cach:
tag = (dir. del bloque en memoria) div (n de bloques de la cach)

El tag est formado por los bits altos de la direccin


del dato en memoria que NO se usan para indexar a
la memoria cach.

Cach de Mapeo Directo


Address (showing bit positions)
31 30

13 12 11

210
Byte
offset

Hit

10

20
Tag
Index
Index Valid Tag

Data

0
1
2

1021
1022
1023
20

32

Un bit de validez se
agrega para saber si la
entrada es vlida

Data

Cach de 1024 palabras


(de 32 bits)
Se direcciona con los
bits A2..A11.
El tag est compuesto
por los bits A12..A31
Los bits A0 y A1 slo
interesan para
seleccionar el byte
dentro de la palabra
(bloque).

Cach de Mapeo Directo


Aprovechar la localidad espacial:
Aumentando el tamao del bloque, en caso

de fallo se trae no slo la palabra que


produjo el fallo, sino tambin las
subsiguientes.
Address (showing bit positions)
31
16 15
4 32 1 0

Hit

16

Tag

12

2 Byte
offset

Data

Index
V

Block offset

16 bits

128 bits

Tag

Data

4K
entries

16

32

32

32

Mux
32

32

Cach de Mapeo Directo

Aprovechar la localidad espacial:


Aumentando el tamao del bloque, en caso de fallo se
trae no slo la palabra que produjo el fallo, sino
tambin las subsiguientes.
subsiguientes
Que cambia?
En el caso de write miss,
hay que leer la lnea de memoria principal: escribir
los datos y el tag
Luego, realizar la escritura del dato que provoc el
miss
Escribir tambin memoria principal (o en los buffers)

Cach de Mapeo Directo


Correspondencia directa:
Es fcil de implementar, sin embargo, hay una posicin
concreta de cach para cada bloque dado!
Si un programa hace referencias repetidas veces a palabras
de dos bloques diferentes asignados en la misma lnea se
estaran intercambiando continuamente en la cach, y la
tasa de aciertos sera baja.

Correspondencia Directa
Cache line

Main Memory blocks

held
0
1
m+1

0, m, 2m, 3m2s-m
1,m+1, 2m+12s-

m-1

m-1, 2m-1,3m-12s-

[ Memoria ]
Correspondencia asociativa:
Permite que cada bloque de memoria principal pueda
cargarse en cualquier lnea de la cach.
La etiqueta (tag) identifica unvocamente un bloque de la
memoria principal.
Para determinar si un bloque est en la cach se debe
examinar todas las etiquetas de las lneas para buscar
coincidencia.
Esta bsqueda se hace en paralelo por hardware.

[ Memoria ]
Correspondencia asociativa:
La principal desventaja es la compleja circuitera necesaria
para examinar en paralelo las etiquetas de todas las lneas
de la cach.

[ Memoria ]
Correspondencia asociativa por conjuntos:
Es una solucin que agrupa las ventajas de los mtodos
anteriores.
La cach se divide en k conjuntos de n lneas.

Asociativa por conjuntos


Dentro de cada conjunto (set), la

asignacin de entradas es
totalmente asociativa.
Los conjuntos son de n-vias: es decir,
el bloque se asigna en cualquiera de
las n vas del conjunto
La asignacin de un bloque a un
conjunto es por mapeo directo.
directo

Asociativas por conjuntos


O n e - w a y s e t a s s o c ia t iv e
(d ire c t m a p p e d )
B lo c k

T ag

D a ta

0
T w o - w a y se t a s s o c ia t iv e

Set

Tag

D a ta

Tag

D a ta

4
5

F o u r- w a y s e t a s s o c ia tiv e
S et

T ag

D a ta

T ag

D a ta

Tag

D a ta

Tag

D a ta

0
1

E ig h t - w a y s e t a s s o c ia t iv e ( fu l ly a s s o c ia tiv e )
Tag

D a ta

Tag

D a ta

Tag

D a ta

Tag

D a ta

Tag

D a ta

Tag

D a ta

Ta g

D a ta

T ag

D a ta

Implementacin
Address
31 30

12 11 10 9 8
8

22

Index
0
1
2

Tag

Data

321 0

Tag

Data

Tag

Data

Tag

Data

253
254
255
22

4-to-1 multiplexor

Hit

Data

32

[ Memoria ]
3. Algoritmos de reemplazo:

Para el esquema directo no hay eleccin ya que cada


bloque de memoria slo puede estar en un sitio.

Para los otros esquemas:

1.
2.
3.
4.

LRU (least recently used)


FIFO (first in first out)
LFU (least frequently used)
Random

[ Memoria ]
LRU (least recently used: menos recientemente usada):
Probablemente los bloques ms usados seguirn usndose
en el futuro cercano.
Probablemente los bloques no muy usados no se usarn
mucho en el futuro cercano.
Con esta poltica se desaloja de la cach el bloque que tiene
ms tiempo sin usarse.
Implementacin por hardware: cada vez que se usa un
bloque se debe almacenar alguna referencia al tiempo. Se
sustituye aquel bloque que tenga la referencia ms antigua.

[ Memoria ]
FIFO (first input first output):
Se hace una lista de la secuencia de la entrada de los
bloque a la memoria cach. Se desaloja la ms antigua.
Warning: no se desaloja aquella cuyo uso sea el ms
antiguo (eso es LRU), se desaloja aquella que su ingreso a
la cach es el ms antiguo. Es decir se sustituye aquel
bloque que ha estado ms tiempo en la cach.
Implementacin: se usa una lista circular con una manecilla
que indica el ms antiguo.

[ Memoria ]
LFU (least frecuently used: utilizado menos frecuentemente):
Se sustituye aquel bloque que ha experimentado menos
referencias.
Implementacin: cada bloque posee un contador, el que se
incrementa cada vez que el bloque ha sido referenciado. Se
sustituye aquel que tenga su contador ms bajo.

[ Memoria ]
Random (aleatorio):
Se sustituye un bloque cualquiera segn una funcin
aleatoria.
Estudios realizados mediante simulacin han mostrado que
la sustitucin aleatoria proporciona un desempeo
ligeramente menor a un algoritmo de reemplazo como los
anteriores basados en el grado de utilizacin.

[ Memoria ]
3. Polticas de escritura
Antes de que pueda ser reemplazado un bloque de la cach
es necesario comprobar si ha sido alterado en la cach y
no en la memoria principal. Si la memoria principal se
encuentra actualizada, el bloque puede ser sobreescrito. En caso contrario habr que actualizar la
memoria principal antes de sobre-escribir el bloque.

[ Memoria ]
Problemas de diseo:

1KB

256 KB

1ns

5 ns

1 GB

80 GB

100 ns

5 ms

Que pasa cuando se escribe en la cach y no se actualiza la


memoria? Que lee el dispositivo I/O de la memoria?

[ Memoria ]
3. Polticas de escritura
Cundo escribir (de la cach a la memoria principal):
Hay dos tcnicas principales
1.

Inmediatamente

2.

Post-escritura

[ Memoria ]
Escritura inmediata:
Todas las operaciones de escritura se hacen tanto en la
cach como en la memoria principal inmediatamente. As se
asegura que el contenido de la memoria principal sea
siempre vlido.
Desventaja: se genera un trfico de sustancial a la memoria
principal que puede disminuir el desempeo.
Estudios sealan que el porcentaje de referencias a
memoria para escritura es del orden del 15%.

[ Memoria ]
Post-escritura:
Cada bloque de la cach posee un bit de actualizacin que
se inicializa en 0 cuando se carga un bloque nuevo en la
cach.
Cada vez que se escriba en el bloque el bit de actualizacin
se pone en 1.
Cuando se desee reemplazar el bloque, el bloque se copia a
la memoria principal slo si el bit de actualizacin es 1.
Desventaja: muchas veces hay porciones de la memoria
principal que no son vlidos. Los mdulos de I/O deben
acceder a ella a travs de la cach.

Cache Multinivel
Incialmente, se usaba slo una cach externa

(off-chip) a la CPU.
Si habia un miss se acceda directo a memoria

Luego se desarrollaron caches on-chip (mas

rapidas).
Idea: Colocar una cache ms grande detrs de
la cache, antes de la memoria principal
Actualmente se tienen sistemas de con
caches on-chip y off-chip.

Cache Multinivel
Adems, existe una clasificacin de cachs unificadas y
otras partidas:

Las unificadas tienen instrucciones y datos.

Las partidas tienen una cach dedicada a


instrucciones y otra dedicada a datos.

Las cachs partidas tiene la ventaja de la


paralelizacin ya que mientras se lee una instruccin
se puede estar leyendo un dato.

Cache Multinivel

[ Memoria ]
5. Tamao del bloque

Cuando se carga una palabra en la cach, se carga


tambin palabras contiguas con la idea de que
posteriormente van a ser tambin referenciadas.

[ Memoria ]
5. Tamao del bloque
Qu tan grande debe ser el bloque? cuntas palabras
contiguas deben cargarse tambin en la cach?
Ni pocas, ni muchas!! La tasa de aciertos aumenta a
medida que aumenta el tamao del bloque, pero
empieza a disminuir si aumenta demasiado esto
porque las palabras ya dejan de estar tan contiguas y
nunca o casi nunca son referenciadas.
Estudios sealan que lo mejor est entre 4 y 8 palabras.

Pentium 4 Cache
80386 no on chip cache
80486 8k using 16 byte lines and four way

set associative organization


Pentium (all versions) two on chip L1
caches
Data & instructions

Pentium III L3 cache added off chip


Pentium 4

L1 caches
8k bytes, 64 byte lines, four way set associative
L2 cache
Feeding both L1 caches, 256k, 128 byte lines, 8 way set
associative
L3 cache on chip

Pentium 4 Block Diagram

Referencias
Captulo 4 y 5 Stallings
Captulo 6 Null
Captulo 4 - Tanenbaum

Você também pode gostar