Ir ao conteúdo
Entre para seguir isso  

Como o Cache de Memória Funciona

       
 308.270 Visualizações    Tutoriais  
 8 comentários

Neste tutorial você aprenderá tudo o que precisa saber sobre o cache de memória em uma linguagem simples e objetiva.

Como o Cache de Memória Funciona
Gabriel Torres Editor executivo do Clube do Hardware

Cache Associativo por Grupos de n-vias

Nesta configuração o cache de memória é dividido em vários blocos (grupos) contendo “n” linhas cada.

Dessa forma em um cache associativo por grupos de 4 vias o cache de memória terá 2.048 blocos contendo quatro linhas cada (8.192 linhas / 4), em cache associativo por grupos de 2 vias o cache de memória terá 4.096 blocos contendo 2 linhas cada e um cache associativo por grupos de 16 vias terá 512 blocos contendo 16 linhas cada. Aqui nós estamos continuando com o nosso exemplo de um cache L2 de 512 KB dividido em 8.192 linhas de 64 bytes. Dependendo do processador o número de blocos será diferente, é claro.

Figura 7: Cache de memória L2 de 512 KB configurado como Associativo por grupos de 4 vias.

A memória RAM é dividia no mesmo número de blocos disponível no cache de memória. Continuando o exemplo do cache de 512 KB Associativo por grupos de 4 vias, a memória RAM seria dividida em 2.048 blocos, o mesmo número de blocos disponível dentro do cache de memória. Cada bloco da memória será vinculado a um conjunto de linhas dentro do cache, da mesma forma que no cache com mapeamento direto. Com 1 GB de memória RAM, a memória seria dividida em 2.048 blocos com 512 KB cada, veja na Figura 8.


Figura 8: 512 KB de cache de memória L2 configurado como Associativo por grupos de 4 vias.

Como você ver o mapeamento é similar ao que acontece com o cache com mapeamento direto, a diferença é que para cada bloco de memória existe agora mais de uma linha disponível no cache de memória. Cada linha pode armazenar o conteúdo de qualquer endereço dentro do bloco mapeado. Em um cache Associativo por grupos de 4 vias cada grupo no cache de memória pode armazenar até quatro linhas do mesmo bloco de memória.

Com esta abordagem os problemas apresentados pelo cache com mapeamento direto são resolvidos (os problemas de colisão e de loop descritos na página anterior). Ao mesmo tempo, o cache associativo por grupo é mais fácil de ser implementado do que o cache completamente associativo, já que seu circuito lógico é mais simples. Por causa disso é que esta é atualmente a configuração de cache mais comum, apesar de oferecer um desempenho menor se comparado com o cache completamente associativo.

É claro que ainda há um número limitado de linhas disponíveis em cada grupo do cache de memória para cada bloco de memória – quatro em uma configuração de 4 vias. Após essas linhas terem sido ocupadas, o controlador de cache terá que liberar uma deles para armazenar a próxima instrução carregada do mesmo bloco de memória.

Quando nós aumentamos o número de vias de um cache associativo por grupo – por exemplo, de 4 vias para uma configuração de 8 vias –, nós temos mais linhas disponíveis em cada grupo, mas se nós mantivermos a mesma quantidade de cache de memória o tamanho de cada bloco da memória também é aumentado. Continuando com nosso exemplo, trocando a configuração de 4 vias para uma de 8 vias faria nosso 1 GB de memória RAM ser dividido em 1.024 blocos de 1 MB. Portanto este aumento na configuração aumentaria o número de linhas disponíveis em cada grupo, mas agora cada grupo estaria responsável por um bloco de memória maior.

Existe muita discussão acadêmica a respeito de qual é o equilíbrio perfeito entre o número de grupos e o tamanho do bloco da memória e não há uma resposta definitiva para essa discussão – a Intel e a AMD usam configurações diferentes, como você verá na próxima página.

Portanto o que acontece se tivermos um cache de memória maior? Ainda usando o exemplo acima, se nós aumentássemos o cache de memória L2 de 512 KB para 1 MB (a única maneira de fazer isso seria substituindo o processador), o que aconteceria é que nós teríamos 16.384 linhas de 64 bytes em nosso cache de memória, o que nos daria 4.096 grupos com quatro linhas cada. Nossa memória RAM de 1 GB seria dividida em 4.096 blocos de 256 KB. Portanto, basicamente o que acontece é que o tamanho de cada bloco da memória diminui, aumentando as chances de o dado solicitado estar dentro do cache de memória – em outras palavras, aumentando o tamanho do cache diminuimos o taxa de erro do cache.

Porém, aumentar o tamanho do cache de memória não é algo que garante um aumento de desempenho. Aumentar o tamanho do cache de memória garante que mais dados estarão no cache, mas a questão toda é se o processador está usando estes dados adicionais ou não. Por exemplo, imagine um processador com um único núcleo com 4 MB de cache L2. Se o processador está usando intensamente 1 MB do cache mas não com tanta intensidade os outros 3 MB (ou seja, as instruções mais acessadas estão no 1 MB e as instruções armazenadas nos outros 3 MB não estão sendo solicitadas tanto assim), é possível que este processador tenha um desempenho similar ao de um processador idêntico com 2 MB ou até mesmo com 1 MB de cache L2.

Editado por

Compartilhar



  Denunciar Artigo
Entre para seguir isso  

Artigos similares


Comentários de usuários


Parabéns, muito completo o tutorial. Uma dúvida besta.. eu gostaria de saber a relação da Ponte Sul com Cache L1 e Ponte Norte/Cache L2.

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites

Fiquei um pouco confuso: Eu aprendi que no cache mapeado diretamente a memória principal era dividida em conjuntos de blocos sendo que cada conjunto de blocos era mapeado em um único bloco da memória cache. Se eu estiver errado me corrijam.

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites

Muito legal o artigo! Gostaria de dar uma sugestão para que ficasse ainda mais completo.

Achei que seria muito interessante acrescentar um review mostrando a diferença de desempenho de processadores similares (mesma arquitetura e mesmo clock), mas com diferentes quantidades de memória cache, em diferentes aplicativos.

Isso nos daria uma real dimensão do quanto a memória cache influencia no desempenho.

Fica a sugestão.

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites

O artigo é excelente! Mas fiquei com uma dúvida: Há alguma diferença no circuito dos flip-flops da memória cache L1 para L2 e L3 ou todos os níveis utilizam o mesmo esquema eletrico, mudando apenas a quantidade de flip-flops(quantidade de memória) e a latência?

 

Editado por Leonardo Ritter

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites

Gabriel Torres, obrigado por responder! Já que estamos falando sobre memórias cache eu tenho mais uma dúvida: uma vez estava a utilizar o CPU-Z, e no canto da tela, onde é exibido os níveis de cache e a quantidade de memória estava escrito:

Cache

L1 Data    16 KBytes      8 Way

Trace        12 Kuops       8 Way

Level 2     2048 KBytes  8 Way

  O processador era um Intel Pentium 4 630. O que seria esta linha "Trace / 12 Kuops / 8 Way? Eu não vi em nem um outro processador este negócio...

Editado por Leonardo Ritter

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites


Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×