20Aug
Se você está apenas começando a aprender como as CPUs multi-core, o cache, a coerência do cache e a memória funcionam, pode parecer um pouco confuso no início. Com isso em mente, a publicação do SuperUser Q & A tem respostas para a pergunta de um leitor curioso.
Today's Question &A sessão de atendimento chega a cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento comunitário de sites Q & A.
A pergunta
Leitor de superutilizador CarmeloS quer saber quando o cache de uma CPU é liberado para a memória principal:
Se eu tiver uma CPU com dois núcleos e cada núcleo tiver seu próprio cache L1, é possível que o Core1 e o Core2 esctem o mesmoparte da memória ao mesmo tempo? Se for possível, qual será o valor da memória principal se Core1 e Core2 tiverem editado seus valores no cache?
Quando o cache de uma CPU está corrompido de volta à memória principal?
A Resposta Os contribuidores
SuperUser David Schwartz, sleske e Kimberly W têm a resposta para nós. Primeiro, David Schwartz:
Se eu tiver uma CPU com dois núcleos e cada núcleo tiver seu próprio cache L1, é possível que Core1 e Core2 armazenem 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ê quer esse código em ambos os caches L1.
Se for possível, qual será o valor da memória principal se Core1 e Core2 tiverem editado seus valores no cache?
O valor antigo será na memória principal, o que não importará, uma vez que o núcleo não o lê.Antes de expulsar um valor modificado do cache, ele deve ser gravado em memória. Normalmente, é utilizada alguma variante do protocolo MESI.Na implementação tradicional do MESI, se um valor for modificado em um cache, ele não pode estar presente em nenhum outro cache nesse mesmo nível.
Seguido pela resposta do sleske:
Sim, tendo dois caches de cache, a mesma região da memória pode acontecer e é realmente um problema que ocorre muito na prática. Existem várias soluções, por exemplo:
- . Os dois caches podem se comunicar para se certificar de que não estão em desacordo
- . Você pode ter algum tipo de supervisor que monitore todos os caches e atualize-os em conformidade.
- Cada processador monitora as áreas de memória que armazenou em cache equando ele detecta uma gravação, ele joga o seu cache( agora inválido)
. O problema é chamado de coerência do cache e o artigo da Wikipédia sobre o tema apresenta uma ótima visão geral do problema e possíveis soluções.
E nossa resposta final da Kimberly W:
Para responder a pergunta no título da sua postagem, isso depende do protocolo de cache. Se for write-back, o cache só será liberado para a memória principal quando o controlador de cache não tiver mais escolha do que colocar um novo bloco de cache no espaço já ocupado. O bloco que anteriormente ocupava o espaço era removido e seu valor retornava à memória principal.
O outro protocolo é write-through. Nesse caso, sempre que o bloco de cache estiver escrito no nível n , o bloco correspondente no nível n + 1 é atualizado.É semelhante em conceito ao preenchimento de um formulário com papel carbono por baixo;Tudo o que você escreve 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 bloco de memória específico.
Tem alguma coisa a adicionar à explicação? Som desligado nos comentários. Deseja ler mais respostas de outros usuários Tech-savvy Stack Exchange? Confira o tópico de discussão completo aqui.
Crédito de Imagem: Lemsipmatt( Flickr)