Agenda • Memória CACHE PUCC 1 Memória Cache • Motivo – Melhorar a relação entre o tempo de acesso a dados e instruções e a velocidade dos processadores. • Problema – Custo elevado • Utilização – Praticamente todos os computadores PUCC 2 Localidade • Constatação: programas são escritos e executados pela CPU em pequenos grupos de instruções • Então não é necessário ter uma memória rápida e cara muito grande • Podemos estabelecer um compromisso entre custo e desempenho PUCC 3 Localidade • Temporal: quando a CPU acessa uma palavra de memória existe uma boa probabilidade que em breve acesse a mesma palavra. • Espacial: quando a CPU acessa uma palavra de memória existe uma boa probabilidade que o programa acesse uma palavra subsequente. PUCC 4 Programa PARTE 1 Chamada de Função Loop 1 PARTE 2 Loop 2 PARTE 3 Função PUCC 5 Organização CPU Transferência de Palavras CACHE Memória Principal PUCC Transferência de Blocos 6 Funcionamento • A CPU sempre acessa a memória Cache (dados ou instruções) • Acerto: a CPU encontra a informação na memória Cache • Falta: a informação não está na Cache, a execução é suspensa e a informação é transferida da MP para a memória Cache. PUCC 7 Tempo de Acesso TA= p . T1 + (1-p) . (T2 +T1) T1+T2 T2 T1 0 PUCC 100 % acerto (p) 8 Memória Cache • Tamanho • Mapeamento • Substituição de dados na Cache • Política de escrita pela Cache PUCC 9 Tamanho • • • • Quanto maior melhor Problema custo elevado Relação acertos / faltas Relação Tempo Acesso Cache pelo Tempo de Acesso da MP • Natureza dos Programas PUCC 10 Mapeamento 0 1 2 3 4 5 6 7 8 9 Bloco 0 B= N / K = 2E / K Bloco 1 Q << B 0 1 2 Q-1 Bloco B-1 N-1 PUCC Tag Tamanho do Bloco (K palavras) 11 Mapeamento Direto • MP= 4G palavras • Cache= 64 KB E= 32 bits Q= 1K – 1 Quadro possui 64 Bytes ou palavras • B= 4G / 64 Bytes = 64 M Blocos • Então: – cada quadro do cache deverá acomodar 64K Blocos. PUCC 12 Exemplo TAG quadro quadro quadro quadro 1023 BLOCOS 0 63 0 1 2 1 62 2 61 16 bits 63 0 64 Bytes Endereço da MP possui 32 bits 16 bits 10 bits 6 bits Endereço da palavra Número do quadro Número do bloco no Quadro - TAG PUCC 13 Mapeamento Direto • Para definir quais blocos da MP serão alocados a um quadro específico: q= N mod Q. q= número do quadro da Cache N= endereço da MP Q= número de quadros da Cache • q= 0: blocos 0, 1024,2048,... • q=1023: blocos 1023,2047,.., 64M-1 PUCC 14 Mapeamento Associativo • Os blocos não têm um quadro associado. Se o bloco desejado não está em nenhum quadro da Cache, ele deverá ser transferido para a Cache, substituindo um bloco armazenado nela. PUCC 15 Mapeamento Associativo 26 bits Endereço do Bloco 6 bits Endereço da palavra • Cada vez que a CPU realizar um acesso, o controlador de cache deve examinar e comparar os 26 bits do endereço do bloco PUCC 16 Associativo por Conjuntos • Tenta resolver o problema do conflito de blocos em um mesmo quadro (mapeamento direto) e o problema da busca exaustiva e comparação das tags de toda a cache (mapeamento associativo) PUCC 17 Associativo por Conjuntos • Organiza os quadros da Cache em grupos conjuntos. Dentro dos conjuntos, os quadros são associativos. • A cache é dividida em C conjuntos de D quadros, assim, Q = C x D. 17 bits TAG PUCC 6 bits 9 bits Número do Conjunto Endereço da palavra 18 Substituição de dados • Mapeamento Direto: não há o que se fazer - é pré-definida. • Mapeamento Associativo ou Associativo por Conjuntos – O que não é usado há mais tempo – Fila ( first in first out) – O que tem menos referência – Escolha aleatória PUCC 19 Escrita na Cache • Em sistemas com memória Cache, toda vez que a CPU realiza uma operação de escrita, esta ocorre na cache. Portanto, é necessário que em alguns momentos, a MP seja atualizada. • Antes que um bloco seja substituído na cache, é necessário saber se ele foi alterado ou não. PUCC 20 Escrita na Cache • Este problema é complicado – a MP pode ser acessada pela cache e por dispositivos de E/S (DMA), neste caso a palavra da MP pode ter sido alterada e da cache não. – Computadores que possuam várias CPU´s cada uma com sua cache. PUCC 21 Escrita na Cache • Write Through – cada escrita na cache acarreta escrita igual na MP. – Caso existam outras CPU´s com cache o procedimento se repete • Pode causar uma grande quantidade de escritas desnecessárias na MP, reduzindo o desempenho do sistema PUCC 22 Escrita na Cache • Write Back – atualiza a MP quando o bloco foi substituído e houver ocorrido alguma alteração. Existe um bit de flag para identificar se houve alteração de conteúdo. • A MP fica potencialmente desatualizada para utilização de outros dispositivos. PUCC 23 Escrita na Cache • Write Once – apropriada para arquiteturas multi-CPUs. Por ela, o controlador da cache atualiza a MP sempre que o bloco correspondente na cache foi atualizada pela primeira vez. Essa escrita serve de alerta para os demais componentes. Esse alerta impede o uso da palavra PUCC 24