Ir ao conteúdo
  • Cadastre-se

Como o Cache de Memória Funciona


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

Introdução

Cache de memória é uma memória de alto desempenho localizada dentro do processador e que serve para aumentar a velocidade no acesso aos dados e instruções armazenados na memória RAM. Neste tutorial explicaremos como este circuito funciona em uma linguagem simples e objetiva.

Um computador é completamente inútil se você não diz ao processador o que ele precisa fazer. Isto é feito através de um programa, que é um conjunto de instruções que dizem ao processador o que deve ser feito.

O processador busca os programas na memória RAM. O problema é que quando a alimentação do computador é cortada, o conteúdo da memória RAM é perdido. Por isso que classificamos as memórias RAM como voláteis. Por essa razão, programas e dados devem ser armazenados em uma mídia não volátil (ou seja, onde o conteúdo não seja perdido após desligarmos o computador) caso você queira tê-los de volta após ter desligado o computador. As mídias de armazenamento não voláteis mais conhecidas são os discos rígidos e as mídias ópticas (CDs e DVDs).

Quando você clica duas vezes sobre o ícone de um programa no Windows, o programa, que está normalmente armazenado no disco rígido da máquina, é carregado para a memória RAM. Em seguida, o processador carrega o programa a partir da memória RAM através de um circuito chamado controlador de memória, que está localizado dentro do chipset (chip ponte norte), no caso dos processadores da Intel, ou dentro do próprio processador, no caso dos processadores da AMD. Na Figura 1 nós resumimos esta ideia (para os processadores da AMD ignore o desenho do chipset).


Figura 1: Como os dados armazenados são transferidos para o processador.

O processador não pode buscar dados diretamente do disco rígido porque os discos são muito lentos, mesmo se você considerar o disco rígido mais rápido disponível no mercado. Só para você ter uma ideia do que estamos falando, um disco rígido SATA-300 – o tipo mais rápido encontrado no mercado hoje para o usuário comum – tem uma taxa de transferência máxima teórica de 300 MB/s. Um processador trabalhando internamente a 2 GHz com caminhos de dados* internos de 64 bits consegue transferir dados internamente a 16 GB/s – ou seja, 50 vezes mais rápido.

* Traduzindo: são os caminhos entre os circuitos internos do processador. Esta é uma conta grosseira e serve apenas para te dar uma ideia, já que os processadores têm internamente vários caminhos de dados diferentes, cada um transferindo um número diferente de bits por vez. Por exemplo, nos processadores da AMD o caminho de dados entre o cache de memória L2 e o cache de memória L1 é de 128 bits, enquanto que nos atuais processadores da Intel este caminho de dados é de 256 bits. Se você está confuso, não se preocupe. Isto é só para explicar que o número mostrado no parágrafo acima não é fixo, mas o processador é sempre muito mais rápido do que os discos rígidos.

A diferença de desempenho vem do fato de que os discos rígidos são dispositivos mecânicos, que são muito mais lentos do que os dispositivos puramente eletrônicos, já que as partes mecânicas precisam ser movidas para buscar um dado (o que é muito mais lento do que mover elétrons). A memória RAM, por outro lado, é 100% eletrônica e por esse motivo ela é muito mais rápida do que os discos rígidos, e idealmente tão rápida quanto o processador.

E aqui está o problema. Mesmo a memória RAM mais rápida disponível não consegue acompanhar o processador. Se você tomar como exemplo as memórias DDR2-800, elas transferem dados a 6.400 MB/s – 12.800 MB/s no modo de dois canais. Apesar deste número se aproximar dos 16 GB/s do exemplo acima, como os processadores modernos são capazes de buscar dados do cache de memória L2 a uma taxa de 128 ou 256 bits, nós estamos falando de uma taxa de transferência de 32 GB/s ou 64 GB/s, isso se o processador trabalhar internamente a 2 GHz. Não se preocupe com o tal do “cache de memória L2” por enquanto, nós explicaremos sobre ele mais adiante. Tudo o que queremos agora é que você consiga visualizar que a memória RAM é mais lenta do que o processador.

A propósito, a taxa de transferência é calculada usando a seguinte fórmula (em todos os exemplos dados até o momento “dados por clock” era igual a “1”):

Taxa de transferência = largura (número de bits) x clock x dados por clock / 8

O problema não é apenas a taxa de transferência, ou seja, a velocidade da transferência, mas também a latência. A latência (também conhecida como tempo de acesso) é a quantidade de tempo que a memória demora em entregar um dado solicitado pelo o processador – esta entrega não é instantânea. Quando o processador solicita uma instrução (ou dado) que está armazenado em um determinado endereço, a memória demora um certo tempo para entregar esta instrução (ou dado) de volta ao processador. Nas memórias atuais, caso elas sejam rotuladas como CL de 5 (CL significa CAS Latency ou latência do CAS, que é a latência que estamos falando), isto significa que a memória entregará os dados solicitados apenas após cinco pulsos de clock – o que significa que o processador terá de esperar.

Esperas reduzem o desempenho do processador. Se o processador tiver de esperar cinco pulsos de clock para receber a instrução ou dado solicitado da memória, seu desempenho será de apenas 1/5 do desempenho que ele teria caso estivesse usando uma memória capaz de fornecer dados imediatamente. Em outras palavras, quando o processador acessa uma memória DDR2-800 com CL5, o seu desempenho é o mesmo que se ele estivesse acessando uma memória trabalhando a 160 MHz (800 MHz / 5). No mundo real o desempenho das memórias não é tão ruim assim pois elas trabalham em um modo chamado burst (rajada), onde a partir do segundo dado em diante as entregas passam a ser imediatas, desde que os dados estejam armazenados em endereços contíguos (normalmente as instruções de um programa são armazenadas em endereços sequenciais). Isto é expresso como “x-1-1-1” (por exemplo, “5-1-1-1” para a memória do nosso exemplo), significando que o primeiro dado é entregue após cinco pulsos de clock mas do segundo em diante os dados podem ser entregues em apenas um pulso de clock – desde que os dados estejam armazenados em endereços contíguos, como dissemos.


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