Índice
Índice
- Introdução
- RAM Dinâmica vs. RAM Estática
- História do Cache de Memória nos PCs
- O Cache de Memória
- Cache de Memória L2 nos Processadores Multi-Núcleos
- Como o Cache de Memória Funciona
- Organização do Cache de Memória
- Cache Associativo por Grupos de n-vias
- Configuração do Cache de Memória nos Processadores Atuais
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.
Respostas recomendadas
Crie uma conta ou entre para comentar
Você precisa ser um usuário para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar agora