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


18

Se eu tenho uma CPU com dois núcleos, cada núcleo possui seu próprio cache L1, é possível que o Core1 e o 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?

Respostas:


26

Se eu tenho uma CPU com dois núcleos, cada núcleo possui seu próprio cache L1, é possível que o Core1 e o Core2 armazenem em cache a mesma parte da memória ao mesmo tempo?

Sim. O desempenho seria terrível se não fosse esse o caso. Considere dois threads executando o mesmo código. Você deseja esse código nos dois caches L1.

Se for possível, qual será o valor da memória principal se o Core1 e o Core2 tiverem editado seu valor no cache?

O valor antigo estará na memória principal, o que não importará, pois nenhuma CPU o lerá. Antes de ejetar um valor modificado do cache, ele deve ser gravado na memória. Normalmente, alguma variante do protocolo MESI é usada. 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.


15

Sim, isso (com dois caches armazenando em cache a 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 garantir que não discordam
  • 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 em cache e, quando detecta uma gravação, lança seu cache (agora inválido)

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


2

Para responder à pergunta em seu título, depende de qual é o protocolo de armazenamento em cache. Se for um write-back, o cache só será liberado na memória principal quando o controlador de cache não tiver outra opção a não ser colocar um novo bloco de cache no espaço já ocupado. O bloco que anteriormente ocupava 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 for gravado no nível n, o bloco correspondente no nível (n + 1) é atualizado. (O conceito é semelhante ao preenchimento de um formulário com papel carbono embaixo; tudo o que você escreve por cima é copiado na folha abaixo.) Isso é mais lento porque obviamente envolve mais operações de escrita, mas os valores entre os caches são mais consistentes. No esquema de write-back, apenas o cache de nível mais alto teria o valor mais atualizado para um bloco de memória específico.


11
Gostaria de saber que porcentagem de leitores aqui já usou papel carbono. :)
Barmar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.