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