1 / 16

Memórias cache

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.

emi-lynn
Download Presentation

Memórias cache

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

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

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

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

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

  10. (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

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

  12. 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)

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

  14. 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)

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

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

More Related