Ir ao conteúdo
  • Cadastre-se

Como o Cache de Memória Funciona


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

Como o Cache de Memória Funciona

O cache de memória funciona da seguinte forma. A unidade de busca do processador procura pela a próxima instrução a ser executada no cache L1 de instruções. Se ela não estiver lá, o processador procurará por ela no cache L2. Por fim, se a instrução não estiver no cache L2, o processador terá que buscá-la na memória RAM.

Chamamos de “acerto” (“hit”) quando o processador carrega uma informação requisitada do cache, e de “erro” (“miss”) quando a informação requisitada pelo processador não está no cache de memória e ele precisa acessar a memória RAM do micro.

Claro que quando você liga o micro os caches estão vazios, assim o processar tem de acessar a memória RAM – este é um erro do cache inevitável. Mas após a primeira instrução ter sido carregada, o show começa.

Quando o processador carrega uma instrução de uma certa posição da memória, um circuito chamado controlador de cache carrega para o cache de memória um pequeno bloco de dados abaixo da posição atual que o processador acabou de carregar. Como os programas normalmente seguem um fluxo sequencial, a próxima posição de memória que o processador precisará provavelmente será a posição de memória imediatamente inferior a qual o processador acabou de carregar. Como o controlador de memória já carregou alguns dados abaixo da primeira posição de memória lida pelo o processador, o próximo dado provavelmente já estará dentro do cache de memória. Portanto o processador não precisará buscar o dado na memória RAM: o dado já foi carregado para o cache de memória embutido no processador e pode ser acessado com o clock interno do processador.

Esta quantidade de dados é chamada linha e é normalmente de 64 bytes (mais sobre esse assunto na próxima página).

Além de carregar esta pequena quantidade de dados, o controlador de memória está sempre tentando adivinhar qual será o próximo dado que o processador precisará. Um circuito chamado pré-busca, por exemplo, carrega mais dados localizados após esses primeiros 64 bytes da RAM dentro do cache de memória. Se o programa continuar carregar instruções e dados de posições de memória sequenciais, as instruções e dados que o processador precisará já estarão localizadas dentro do cache de memória.

Portanto nós podemos resumir como o cache de memória funciona da seguinte forma:

  1. O processador solicita a instrução/dado armazenado no endereço “a”.
  2. Como o conteúdo do endereço “a” não está no cache de memória, o processador precisa buscá-lo diretamente da memória RAM.
  3. O controlador de cache carrega uma linha (tipicamente de 64 bytes) começando do endereço “a” para dentro do cache de memória. Isto é, mais dados do que o processador solicitou, portanto se o processador continuar executado o programa sequencialmente (isto é, solicitando o endereço a+1) a próxima instrução/dado que o processador precisará já estará localizada no cache de memória.
  4. Um circuito chamado pré-busca carrega mais dados localizados após esta linha, ou seja, carrega o conteúdo do endereço a+64 para dentro do cache. Para dar a você um exemplo real, os processadores Pentium 4 têm um circuito de pré-busca de 256 bytes, o que significa que ele carrega os próximos 256 bytes após a linha recém carregada para dentro do cache.

Se os programas sempre forem executados sequencialmente o processador nunca precisará buscar dados diretamente da memória RAM – exceto para carregar a primeira instrução – já que as instruções e dados solicitados pelo o processador já estariam dentro do cache de memória antes de o processador solicitar por eles.

Porém os programas não são executados dessa forma, de tempos em tempos eles pulam para outra posição de memória. O principal desafio do controlador de cache é tentar adivinhar para quais endereços o processador pulará, carregando o conteúdo desses endereços para o cache de memória antes que o processador os solicite, de modo a evitar que o processador acesse a memória RAM, que é lenta. Esta tarefa é chamada previsão de desvio e todos os processadores modernos têm esse recurso.

Os processadores modernos têm uma taxa de acerto de pelo menos 80%, o que significa que pelo menos em 80% do tempo o processador não acessa a memória RAM diretamente, mas sim o cache de memória.


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...