160 likes | 418 Views
Memórias cache. 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. ULA. L1 cache. barramento de sistema. barramento de memória. barramento de cache. memória principal.
E N D
Memórias cache • 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 ULA L1 cache barramento de sistema barramento de memória barramento de cache memória principal L2 cache interface de barramento ponte E/S
Organização geral da memória cache <valid>: diz se a linha está válida <tag>: identifica a linhaB: conteúdo da palavra t bits para tag por linha 1bit válido por linha B = 2b bytes por bloco de cache E linhas por conjunto valid tag 0 1 • • • B–1 • • • conj. 0: valid tag 0 1 • • • B–1 valid tag 0 1 • • • B–1 • • • conj. 1: S = 2s sets valid tag 0 1 • • • B–1 • • • valid tag 0 1 • • • B–1 • • • conj. S-1: valid tag 0 1 • • • B–1 Tamanho da cache: C = B x E x S bytes
Endereçamento de cache <ind.conj>: identifica o conjunto <tag> identifica a linha do conjunto <offset>: guarda o início da palavra Endereço A: b bits t bits s bits m-1 0 v tag 0 1 • • • B–1 • • • conj.0: <tag> <índ. conj.> <offset> v tag 0 1 • • • B–1 v tag 0 1 • • • B–1 • • • conj 1: 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 v tag 0 1 • • • B–1 • • • v tag 0 1 • • • B–1 conj. S-1: • • • v tag 0 1 • • • B–1
Cache mapeada diretamente • Forma mais simples • Caracterizada por ter uma linha por conjunto E=1 linha por conjunto conj. 0: valid tag bloco da cache bloco da cache conj. 1: valid tag • • • bloco da cache conj. S-1: valid tag
valid tag bloco da cache bloco da cache valid tag • • • bloco da cache valid tag Acesso a caches mapeadas diretamente • Seleção do conjunto feita pelos bits de índice de conjunto conj. 0: conj. selecionado conj. 1: t bits s bits b bits conj. S-1: 0 0 0 0 1 m-1 tag ind. conj offset 0
=1? (1) O bit válido tem que ser 1 (2) Os bits de tags na linha da cache tem que casar com os bits de tag do endereço (3) Se (1) e (2), então acerto, e offset seleciona o byte inicial, que é 4 = ? Acesso a caches mapeadas diretamente • Verificar se a linha é válida no conjunto selecionado com campo tag idêntico aos bits de tag e extrai a palavra desejada 0 1 2 3 4 5 6 7 conj. (i) selecionado: 1 0110 w0 w1 w2 w3 t bits s bits b bits 0110 i 100 m-1 0 tag ind. conj. offset
S=2s s=2 B=2b b=1 t=1 x xx x 0 [00002] (miss) 13 [11012] (miss) v tag data v tag data 1 1 1 1 1 1 1 1 1 0 1 0 0 1 M[12-13] M[12-13] M[12-13] M[0-1] M[8-9] M[0-1] M[0-1] 1 0 m[1] m[0] 1 0 m[1] m[0] (1) (3) 1 1 m[13] m[12] Exemplo de cache mapeada diretamente t: bits para a tag b: bytes para o bloco s: bits para o índice do conjunto M=endereçopara 16 células, E=1 linhaporconjunto, S=4 conjuntos, B=2 bytes porbloco Acessos a endereços (leituras): 0 [00002], 1 [00012], 13 [11012], 8 [10002], 0 [00002] 0 [00002] (miss) 8 [10002] (miss) v tag data v tag data 1 0 m[1] m[0] 1 1 m[9] m[8] (5) (4) 1 1 m[13] m[12]
Caches associativas por conjunto • Caracterizadas por mais de uma linha no conjunto valid tag bloco de cache E=2 linhas por conj. conj. 0: valid tag bloco de cache valid tag bloco de cache conj. 1: valid tag bloco de cache • • • valid tag bloco de cache conj. S-1: valid tag bloco de cache
valid tag bloco de cache bloco de cache valid tag valid tag bloco de cache bloco de cache valid tag • • • bloco de cache valid tag bloco de cache valid tag Acesso a caches associativas por conjuntos • Seleção do conjunto é igual à memória mapeada diretamente conj. 0: Conj. selecionado conj. 1: conj. S-1: t bits s bits b bits 0 0 0 0 1 ìnd. conj. m-1 0 tag offset
(2) Os bits de tag em uma das linhas de cache tem que casar com bits de tag do endereço (3) Se (1) e (2), então acerto, e offset seleciona byte inicial. = ? Acesso a caches associativas por conjunto • Compara o tag de cada linha válida do conjunto selecionado (1) Bit válido deve ser 1. =1? 0 1 2 3 4 5 6 7 1 1001 conj.(i) selecionado): 1 0110 w0 w1 w2 w3 t bits s bits b bits 0110 i 100 m-1 0 tag ind. conj. offset
Caches totalmente associativas • Caracterizadas por um único conjunto que contém todas as linhas C=tamanho total da cache B=tamanho do bloco de cache valid tag bloco de cache valid tag bloco de cache valid tag bloco de cache conj. 0: E=C/B linhas em um único conjunto valid tag bloco de cache • • • valid tag bloco de cache valid tag bloco de cache
Acesso a caches totalmente associativas • Conjunto 0 é sempre selecionado valid tag bloco de cache valid tag bloco de cache valid tag bloco de cache conj. 0: valid tag bloco de cache • • • t bits b bits valid tag bloco de cache m-1 0 valid tag bloco de cache tag offset (não tem informação do conjunto)
Acesso a caches totalmente associativas • Compara tag do endereço com campo tag da cache (1) Bit válido deve ser 1. =1? 0 1 2 3 4 5 6 7 0 1001 cache inteira: 1 0110 1 1001 w0 w1 w2 w3 = ? 0 0110 (2) Os bits de tag em uma das linhas de cache tem que casar com bits de tag do endereço (3) Se (1) e (2), então acerto, e offset seleciona byte inicial. =? t bits b bits 1001 100 m-1 0 tag offset
Algoritmo de substituição de dados • 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 • 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 • 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