Memórias cache
Organização de Computadores
• CPU procura por dados em L1, depois em L2 e finalmente
na memória principal
(L1: dentro da UCP e L2: fora do processador, na placa
mãe)
UCP
registradores
barramento de
cache
L2 cache
L1
cache
interface de
barramento
ULA
barramento barramento de
de sistema
memória
ponte
E/S
memória
principal
Organização geral da memória cache
<valid>: diz se a linha está válida
<tag>: identifica a linha
Organização de Computadores
B: conteúdo da palavra
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
<ind.conj>: identifica o conjunto
<tag> identifica a linha do conjunto
<offset>: guarda o início da palavra
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
Organização de Computadores
Endereço A:
t bits
s bits
b bits
m-1
0
<tag>
<índ. conj.> <offset>
A palavra do endereço A está na cache
se: os bits de tag <tag>
em uma das linhas válidas
do conjunto <ind. conj.> são idênticos
aos bits do campo <tag> do endereço.
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
• Verificar se a linha é válida no conjunto
selecionado com campo tag idêntico aos bits de tag
e extrai a palavra desejada
=1? (1) O bit válido tem que ser 1
0
conj. (i)
selecionado:
1
1
2
0110
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
i
ind. conj.
b bits
100
offset
6
7
w3
(3) Se (1) e (2), então
acerto,
e offset
seleciona
o byte inicial, que é 4
0
Exemplo de cache mapeada
diretamente
t: bits para a tag
b: bytes para o bloco
s: bits para o índice do conjunto
t=1
x
S=2s B=2b
s=2 b=1
xx
x
v
11
M=endereço para 16 células, E=1 linha por conjunto,
S=4 conjuntos, B=2 bytes por bloco
Acessos a endereços (leituras):
0 [00002], 1 [00012], 13 [11012], 8 [10002], 0 [00002]
0 [00002] (miss)
tag
data
0
13 [11012] (miss)
v tag
data
m[1]
m[0]
M[0-1]
(1)
(3)
v
1
(4)
Organização de Computadores
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 que
contém 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
C=tamanho total
da cache
B=tamanho do
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
(não tem informação do conjunto)
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:
0
1001
1
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, pois só existe
um único lugar possível para um dado bloco
• Nos demais mapeamentos …
– LRU - Least Recently Used
– FIFO - First In First Out
– LFU - Least Frequently Used
– Escolha aleatória (muito simples e com desempenho parecido com
os demais)
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
– Se o valor real não na MP então, 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)
• Escrita uma vez (write once)
– Utilizando quando tempo múltiplas UCPs
– Escreve apenas uma vez sempre que o bloco da cache for
atualizado (parecido com write trough)
– Seve para alertar os demais componente de que o campo foi
atualizado
Download

Memória cache - Instituto de Computação