Pagina inicial » como » Quando o cache de uma CPU é liberado de volta para a memória principal?

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

    Se você está apenas começando a aprender como CPUs multi-core, cache, coerência de cache e memória funcionam, pode parecer um pouco confuso no início. Com isso em mente, a postagem de perguntas e respostas do SuperUser de hoje tem respostas para a pergunta de um curioso leitor.

    A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..

    A questão

    Leitor SuperUser O CarmeloS quer saber quando o cache de uma CPU é liberado de volta para a memória principal:

    Se eu tiver uma CPU com dois núcleos e cada núcleo tiver seu próprio cache L1, será 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 tanto o Core1 quanto o Core2 tiverem editado seus valores no cache??

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

    A resposta

    Os colaboradores do 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 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 segmentos 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 tanto o Core1 quanto o Core2 tiverem editado seus valores no cache??

    O valor antigo estará na memória principal, o que não importará, já que nenhum núcleo 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.

    Seguido pela resposta de sleske:

    Sim, com cache de dois caches, a mesma região de 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 garantir que eles não discordem
    • Você pode ter algum tipo de supervisor que monitore todos os caches e os atualize 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 de coerência de cache e o artigo da Wikipedia sobre o tópico tem uma boa visão geral do problema e possíveis soluções.

    E nossa resposta final de Kimberly W:

    Para responder a pergunta no título do seu post, 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 é escrito em nível n, o bloco correspondente no nível n + 1 é atualizada. É 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 os 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.


    Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.

    Crédito de imagem: Lemsipmatt (Flickr)