Ir ao conteúdo
  • Cadastre-se

Como o Cache de Memória Funciona


     392.259 visualizações    Processadores    10 comentários
Como o Cache de Memória Funciona

Organização do Cache de Memória

O cache de memória é divido internamente em linhas, cada uma podendo guardar de 16 a 128 bytes, dependendo do processador. Na maioria dos processadores atuais o cache de memória está organizado em linhas de 64 bytes (512 bits), portanto consideraremos um cache de memória usando linhas de 64 bytes em nossos exemplos dados neste tutorial. Na última página apresentaremos as especificações dos caches de memória dos principais processadores encontrados no mercado atualmente.

Portanto, um cache de memória L2 de 512 KB é dividido em 8.192 linhas. Lembre-se que 1 KB é igual a 2^10 ou 1.024 bytes e não 1.000 bytes. A conta é a seguinte: 524.288 / 64 = 8.192. Nós consideraremos um processador de um único núcleo com 512 KB de memória cache L2 em nossos exemplos. Na Figura 5 ilustramos esta organização interna deste cache de memória.

Figura 5: Como um cache de memória L2 de 512 KB é organizado.

O cache de memória pode funcionar em três diferentes organizações: cache com mapeamento direto, cache completamente associativo e cache associativo por grupos (também conhecido como cache associativo por grupos de n-vias). O cache associativo por grupos é a configuração mais usada atualmente, mas vamos dar uma olhada em como essas três configurações funcionam.

Cache com Mapeamento Direto

O cache com mapeamento direto é a maneira mais simples de se criar um cache de memória. Nesta configuração a memória RAM é dividida no mesmo número de linhas que existem dentro do cache de memória. Se tivermos um micro com 1 GB de memória RAM, esse 1 GB será dividido em 8.192 blocos (assumindo que o cache de memória use a configuração que descrevemos acima), cada um com 128 KB (1.073.741.824 / 8.192 = 131.072 – lembre-se que 1 GB é igual a 2^30 bytes, 1 MB é igual a 2^20 bytes e 1 KB é igual a 2^10 bytes). Se o micro tivesse 512 MB a memória também seria dividida em 8.192 blocos, mas desta vez cada bloco teria 64 KB. E assim por diante. Nós ilustramos essa organização na Figura 6.


Figura 6: Como o cache com mapeamento direto funciona.

A principal vantagem do mapeamento direto é que essa é a configuração mais fácil de ser implementada.

Quando o processador solicita por um dado endereço da memória RAM (por exemplo, o endereço 1.000), o controlador de cache carregará uma linha (64 bytes) da memória RAM e armazenará esta linha no cache de memória (isto é, endereço 1.000 até 1.063, assumindo que estamos usando um esquema de endereçamento de 8 bits só para ajudar em nossos exemplos). Portanto se o processador solicitar novamente o conteúdo deste endereço ou de alguns endereços próximos desse (ou seja, qualquer endereço na faixa de 1.000 a 1.063) eles já estarão dentro do cache.

O problema é que se o processador precisar de dois endereços que estão mapeados na mesma linha do cache, um erro do cache acontecerá (este problema é chamado colisão ou conflito). Continuando nosso exemplo, se o processador solicitar o endereço 1.000 e então solicitar o endereço 2.000, um erro do cache acontecerá porque esses dois endereços estão dentro do mesmo bloco (os primeiros 128 KB da memória RAM), e o que estava dentro do cache era uma linha começando com o endereço 1.000. Portanto o controlador de cache carregará a linha do endereço 2.000 e armazenará ela na primeira linha do cache de memória, limpando o conteúdo antigo, em nosso caso a linha de endereço 1.000.

O problema continua. Se o processador tem de executar um laço de repetição (loop) maior do que 64 bytes, haverá um erro do cache durante o tempo de duração do loop.

Por exemplo, se o loop for do endereço 1.000 até o endereço 1.100, o processador terá de carregar todas as instruções diretamente da memória RAM enquanto o loop durar. Isto acontecerá porque o cache terá o conteúdo do endereço 1.000 até 1.063 e quando o processador solicitar o conteúdo do endereço 1.100 ele terá buscá-lo na memória RAM, e o controlador de cache carregará os endereços 1.100 até 1.163. Quando o processador solicitar o endereço 1.000 novamente ele terá que voltar na memória RAM, já que o cache não tem mais o conteúdo do endereço 1.000. Se este loop for executado 1.000 vezes, o processador terá que ir à memória RAM 1.000 vezes.

É por isso que o cache com mapeamento direto é a configuração de cache menos eficiente e não é mais usada – pelo menos nos PCs.

Cache Completamente Associativo

Na configuração completamente associativa, por outro lado, não existe uma ligação fixa entre as linhas do cache de memória e as localizações da memória RAM. O controlador de cache pode armazenar qualquer endereço. Portanto o problema descrito acima não acontece. Esta configuração é a mais eficiente (ou seja, apresenta uma maior taxa de acertos).

Por outro lado, o circuito de controle é muito mais complicado, já que precisa monitorar quais localizações estão carregadas dentro do cache de memória. É por isso que uma solução hibrida – chamada cache associativo por grupos – é mais usada atualmente.


Artigos similares


Comentários de usuários

Respostas recomendadas

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.

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.

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?

 

  • Curtir 1
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...

Link para o comentário
Compartilhar em outros sites

Uau. Completíssimo, muito obrigado! Vim procurar uma informação básica, e acabei por receber uma aula completa. Tenho uma pergunta, mas, talvez, ela não faça sentido, porque comecei a pouco no universo da tecnologia. Aqui vai:
Sempre percebo que, quando o jogo exige muito da memória RAM, de início, o jogo trava um pouco (no quesito fluidez, não no quesito de qualidade gráfica), então, pensei: "será que tem a ver com a questão do burst da memória? Ao iniciar, a memória sofre aquela queda na taxa de transferência (de, por exemplo, 5 clocks para passar o dado, 5-1-1-1), então, trava, porém, na sequência de 1-1-1, o jogo normaliza devido à frequência de 1 dado por clock. Faz sentido?

Link para o comentário
Compartilhar em outros sites

  • Administrador

@João Beneditti Não tem nada a ver, por que na maior parte das vezes os dados estão vindo do cache de memória e não diretamente da RAM. Além disso, cada pulso de clock em uma memória de, digamos, 3.200 MHz, é de 1/3.200.000.000 ou seja 0,3125 ns. Cinco pulsos seriam 1,5625 ns. A diferença de tempo entre um e outro é imperceptível para um ser humano.

 

Abraços.

Link para o comentário
Compartilhar em outros sites



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 conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...