Memória cache

Propaganda
Memórias cache
Organização de Computadores
• CPU procura por dados em L1, depois em L2 e finalmente
na memória principal
CPU
registradores
barramento de
cache
L2 cache
L1
cache
interface de
barramento
ALU
barramento barramento de
de sistema
memória
ponte
E/S
memória
principal
Organização geral da memória cache
Organização de Computadores
1bit válido t bits para
B = 2b bytes
por linha tag por linha por bloco de cache
valid
tag
valid
tag
valid
tag
valid
tag
conj. 0:
S = 2s sets
conj. 1:
0
•••
0
1
•••
B–1
1
•••
B–1
0
•••
0
1
•••
B–1
1
•••
B–1
1
•••
B–1
1
•••
B–1
•••
valid
tag
valid
tag
conj. S-1:
0
•••
0
Tamanho da cache: C = B x E x S bytes
E linhas
por
conjunto
Endereçamento de cache
Organização de Computadores
Endereço A:
t bits
v
tag
v
tag
v
tag
v
tag
conj.0:
conj 1:
0
•••
0
1
• • • B–1
1
• • • B–1
0
•••
0
1
• • • B–1
1
• • • B–1
1
• • • B–1
1
• • • B–1
•••
conj.
S-1:
v
tag
v
tag
0
•••
0
s bits
b bits
m-1
0
<tag>
<índ. conj.> <offset>
A palavra no endereço A está na cache
se os bits de tag em uma das linhas válidas
no conjunto <ind. conj.> são idênticos
aos bits do campo <tag>.
O conteúdo da palavra começa no
deslocamento de
<offset> bytes a partir do início do bloco
Cache mapeada diretamente
Organização de Computadores
• Forma mais simples
• Caracterizada por ter uma linha por conjunto
conj. 0:
valid
tag
bloco da cache
conj. 1:
valid
tag
bloco da cache
•••
conj. S-1:
valid
tag
bloco da cache
E=1 linha por
conjunto
Acesso a caches mapeadas diretamente
Organização de Computadores
• Seleção do conjunto feita pelos bits de índice de
conjunto
conj. selecionado
conj. 0: valid
tag
bloco da cache
conj. 1: valid
tag
bloco da cache
•••
t bits
m-1
tag
s bits
00 001
ind. conj
b bits
offset
conj. S-1: valid
0
tag
bloco da cache
Acesso a caches mapeadas diretamente
Organização de Computadores
• Encontre uma linha válida no conjunto
selecionado com campo tag idêntico a bits de tag e
extrai a palavra desejada
=1? (1) O bit válido tem que ser 1
0
conj. (i)
selecionado:
1
0110
1
2
3
4
w0
5
w1 w2
(2) Os bits de tags na linha
da cache tem que casar = ?
com os bits de tag do
endereço
m-1
t bits
0110
tag
s bits
b bits
i
100
ind. conj. offset
6
7
w3
(3) Se (1) e (2), então
acerto,
e offset
seleciona
o byte inicial.
0
Exemplo de cache mapeada
diretamente
Organização de Computadores
t=1 s=2
x
xx
b=1
x
v
11
M=endereço para 16 células, B=2 bytes/bloco,
S=4 conj., E=1 linha/conj.
Acessos a endereços (leituras):
0 [00002], 1 [00012], 13 [11012], 8 [10002], 0 [00002]
0 [00002] (miss)
tag
data
0
m[1]
m[0]
M[0-1]
(1)
(3)
v
1
(4)
13 [11012] (miss)
v tag
data
8 [10002] (miss)
tag
data
1
1
m[9] m[8]
1
1
M[12-13]
0
m[1]
m[0]
M[0-1]
1
1
1
m[13]
m[12]
M[12-13]
v
M[8-9]
1
1
1
(5)
0 [00002] (miss)
tag
data
11
0
m[1]
m[0]
M[0-1]
11
1
m[13]
m[12]
M[12-13]
Caches associativas por conjunto
Organização de Computadores
• Caracterizadas por mais de uma linha no conjunto
conj. 0:
conj. 1:
valid
tag
bloco de cache
valid
tag
bloco de cache
valid
tag
bloco de cache
valid
tag
bloco de cache
•••
conj. S-1:
valid
tag
bloco de cache
valid
tag
bloco de cache
E=2 linhas
por conj.
Acesso a caches associativas por
conjuntos
Organização de Computadores
• Seleção do conjunto é igual à memória mapeada
diretamente
conj. 0:
Conj. selecionado
conj. 1:
valid
tag
bloco de cache
valid
tag
bloco de cache
valid
tag
bloco de cache
valid
tag
bloco de cache
•••
t bits s bits
00 001
m-1
tag
b bits
ìnd. conj. offset
0
conj. S-1:
valid
tag
bloco de cache
valid
tag
bloco de cache
Acesso a caches associativas por
conjunto
Organização de Computadores
• Compara o tag de cada linha válida do conjunto
selecionado
=1? (1) Bit válido deve ser 1.
0
conj.(i)
selecionado):
1
1001
1
0110
(2) Os bits de tag em
uma das linhas de
cache tem que casar com
bits de tag do
endereço
1
2
3
4
5
w0
w1 w2
m-1
7
w3
(3) Se (1) e (2), então
acerto, e
offset seleciona
byte inicial.
=?
t bits
0110
tag
6
s bits
i
ind. conj.
b bits
100
offset
0
Caches totalmente associativas
Organização de Computadores
• Caracterizadas por um único conjunto conter
todas as linhas
conj. 0:
valid
tag
bloco de cache
valid
tag
bloco de cache
valid
tag
bloco de cache
valid
tag
bloco de cache
•••
valid
tag
bloco de cache
valid
tag
bloco de cache
E=C/B linhas
em um
único
conjunto
Acesso a caches totalmente associativas
Organização de Computadores
• Conjunto 0 é sempre selecionado
conj. 0:
valid
tag
bloco de cache
valid
tag
bloco de cache
valid
tag
bloco de cache
valid
tag
bloco de cache
•••
t bits
m-1
tag
b bits
offset
0
valid
tag
bloco de cache
valid
tag
bloco de cache
Acesso a caches totalmente associativas
Organização de Computadores
•
Compara tag do endereço com campo tag da cache
=1? (1) Bit válido deve ser 1.
0
cache
inteira:
1
1001
0
0110
1
1001
=?
0110
0
(2) Os bits de tag em
uma das linhas de
cache tem que casar
com bits de tag do
endereço
1
2
3
4
w0
=?
t bits
1001
m-1
b bits
100
tag
offset
0
5
6
w1 w2
7
w3
(3) Se (1) e (2), então
acerto, e
offset seleciona
byte inicial.
Algoritmo de substituição de dados
Organização de Computadores
• Consiste em determinar qual o bloco da memória
cache deve ser retirado para ceder lugar a outro
por ocasião de uma falta
• No mapeamento direto não há opção!
• Nos demais mapeamentos …
– LRU - Least Recently Used
– FIFO - First In First Out
– LFU - Least Frequently Used
– Escolha aleatória (*)
Política de escrita I
Organização de Computadores
• A escrita é sempre realizada na cache pela CPU.
Quando deve ser realizada na memória principal?
• Problema: vários processos em várias CPU ou
dispositivos de E/S podem acessar um mesmo
bloco na MP
– valores diferentes para um mesmo dado!
• Políticas de escrita...
– write through
– write back
– write once
Política de escrita II
Organização de Computadores
• Escrita em ambas (write through)
– Sempre que se escreve na cache, escreve-se na memória principal
– Pode haver queda no desempenho
• Escrita somente no retorno (write back)
– Escreve apenas quando o bloco é substituído: há bit de alteração
– A memória principal pode ficar desatualizada (ex: E/S via DMA)
Download