Quando o cache da CPU é liberado de volta para a memória principal?

18

Se eu tiver uma CPU com dois núcleos, cada núcleo tem seu próprio cache L1, é possível que Core1 e Core2 armazenem em cache a mesma parte da memória ao mesmo tempo?
Se for possível, qual será o valor da memória principal se o Core1 e o Core2 tiverem editado seu valor no cache?

    
por CarmeloS 26.01.2015 / 10:30

3 respostas

26

If I have a CPU with two cores, each core has it's own L1 cache, is it possible that Core1 and Core2 caches a same part of memory at the same time?

Sim. O desempenho seria terrível se não fosse esse o caso. Considere dois segmentos executando o mesmo código. Você quer esse código em ambos os caches L1.

If it is possible, what the value of the main memory will be if both Core1 and Core2 has edited their value in cache?

O valor antigo estará na memória principal, o que não importará, já que nenhuma das CPUs o lerá. Antes de ejetar um valor modificado do cache, ele deve ser gravado na memória. Normalmente, é usada alguma variante do protocolo MESI . Na implementação tradicional do MESI, se um valor for modificado em um cache, ele não poderá estar presente em nenhum outro cache no mesmo nível.

    
por 26.01.2015 / 13:06
15

Sim, isso (com dois caches em cache na mesma região de memória) pode acontecer, na verdade, é um problema que ocorre muito na prática. Existem várias soluções, por exemplo:

  • os dois caches podem se comunicar para não discordar
  • você pode ter algum tipo de supervisor que monitora todos os caches e os atualiza de acordo
  • cada processador monitora as áreas de memória que armazenou em cache e, quando detecta uma gravação, lança seu cache (agora inválido)

O problema é chamado coerência de cache . O artigo da Wikipedia sobre o tópico tem uma boa visão geral do problema e possíveis soluções.

    
por 26.01.2015 / 10:36
2

Para responder à pergunta no seu título, isso depende do que é o protocolo de cache. Se for write-back, o cache só será liberado de volta para a memória principal quando o controlador de cache não tiver escolha a não ser colocar um novo bloco de cache no espaço já ocupado. O bloco que ocupava anteriormente o espaço é removido e seu valor é gravado de volta na memória principal.

O outro protocolo é write-through. Nesse caso, sempre que o bloco de cache é gravado no nível n, o bloco correspondente no nível (n + 1) é atualizado. (É semelhante em conceito preencher um formulário com papel carbono embaixo; o que você escrever no topo é copiado na folha abaixo.) Isso é mais lento porque obviamente envolve mais operações de escrita, mas os valores entre caches são mais consistentes. No esquema write-back, somente o cache de nível mais alto teria o valor mais atualizado para um determinado bloco de memória.

    
por 26.01.2015 / 16:05

Tags