Ir ao conteúdo
  • Cadastre-se

Como o Cache de Memória Funciona


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

O Cache de Memória

Na Figura 2 você pode ver um diagrama em blocos básico de um processador de núcleo único. É claro que o diagrama em blocos varia dependendo do processador e você pode ler nossos tutoriais para cada linha de processadores para dar uma olhada em seus diagramas em blocos (Por Dentro da Arquitetura do Pentium 4, Por Dentro da Microarquitetura Core e Por Dentro da Arquitetura AMD64).


Figura 2: Diagrama em bloco básico de um processador.

A linha pontilhada na Figura 2 representa o corpo do processador, já que a memória RAM está localizada fora do processador. O caminho de dados entre a memória RAM e processador tem geralmente largura de 64 bits (ou de 128 bits, quando a configuração de dois canais – “dual channel” – é usada), rodando ao clock da memória ou ao clock externo do processador (ou clock do barramento da memória, no caso dos processadores da AMD), o que for mais baixo. Nós já mostramos como calcular a taxa de transferência da memória na primeira página deste tutorial.

Todos os circuitos dentro da caixa pontilhada rodam no clock interno do processador. Dependendo do processador, algumas de suas partes internas podem até mesmo rodar a uma taxa de clock mais alta. Além disso, o caminho de dados entre as unidades do processador pode ser mais largo, isto é, transferir mais bits por pulso de clock do que 64 ou 128. Por exemplo, o caminho de dados entre a memória cache L2 e o cache L1 de instruções em processadores modernos tem normalmente largura de 256 bits. Quanto maior o número de bits transferidos por pulso de clock, mais rápida a transferência será feita (em outras palavras, a taxa de transferência será mais alta).

Em resumo, todos os processadores modernos têm três caches de memória: o L2, que é o maior e pode ser encontrado entre a memória RAM e o cache L1 de instruções, que armazena tanto dados quanto instruções; o cache L1 de instruções, que é usado para armazenar instruções que serão executadas pelo o processador; e o cache L1 de dados, que é usado para armazenar dados que serão escritos de volta na memória.

L1 e L2 significam “nível 1” (Level 1) e “nível 2” (“Level 2”), respectivamente, e referem-se à distância em que se encontram do núcleo do processador (unidade de execução). Uma dúvida comum é porque ter três memórias cache distintas (cache L1 de dados, cache L1 de instruções e L2).

Fazer com que a latência das memórias estáticas seja igual a zero é um enorme desafio, especialmente com os processadores trabalhando com clocks muito altos. Como fabricar memórias estáticas com latência igual a zero é muito difícil, o fabricante usa este tipo de memória apenas no cache de memória L1. O cache de memória L2 usa uma RAM estática que não é tão rápida quanto à usada no cache L1, já que ela tem alguma latência, o que faz com que o seu acesso seja um pouco mais lento do que o acesso ao do cache de memória L1.

Preste atenção na Figura 2 e você verá que o cache L1 de instruções funciona como um cache de entrada, enquanto que o cache L1 de dados funciona como um cache de saída. O cache L1 de instruções – que é normalmente menor do que o cache L2 – é particularmente eficiente quando o programa iniciar um laço de repetição (loop), já que as instruções necessárias já estarão próximas da unidade de busca.

Isto é raramente mencionado, mas o cache L1 de instruções é também usado para armazenar outros dados além das instruções a serem decodificadas. Dependendo do processador ele pode ser ainda usado para armazenar alguns dados de pré-decodificação e informações de desvio (em resumo, dados de controle que aumentarão a velocidade do processo de decodificação) e às vezes o cache L1 de instruções é maior do que o anunciado, pois o fabricante não adiciona o espaço extra disponível para o armazenamento dessas informações adicionais.

Na página de especificações de um processador o cache L1 pode ser encontrado com diferentes tipos de representação. Alguns fabricantes listam as memórias cache L1 separadamente (algumas vezes chamando o cache de instrução de “I” e o cache de dados de “D”), alguns acrescentam a soma dos dois e escrevem “separados” – logo “128 KB, separados” significa cache de instruções de 64 KB e cache de dados de 64 KB –, e alguns simplesmente somam os dois e você tem que adivinhar que o número é o total e que você deve dividi-lo por dois para saber a capacidade de cada cache. A exceção, entretanto, fica por conta dos processadores baseados na microarquitetura Netburst, como os processadores Pentium 4, Pentium D e o Xeon e o Celeron baseados no Pentium 4.

Os processadores baseados na microarquitetura NetBurst não possuem cache L1 de instruções. Em vez disto eles possuem um cache de rastreamento de execução, que é um cache localizado entre a unidade de decodificação e a unidade de execução. Portanto, o cache L1 de instruções está lá, mas com nome e lugar diferentes. Estamos falando isso porque esse é um erro muito comum, pensar que processadores Pentium 4 não possuem cache L1 de instruções. Quando comparam o Pentium 4 com outros processadores, algumas pessoas acham que seu cache L1 é muito menor, porque estão contando apenas o cache de dados L1 de 8 KB. O cache de rastreamento de execução dos processadores baseados na microarquitetura NeBurst é de 150 KB e deve ser levado em conta, é claro.


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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!