Quando olhamos as especificações de um processador, uma das coisas que se destacam é a memória cache, que é encontrada não apenas em todos os processadores, mas também em todas as GPUs. Neste artigo explicaremos o que é a memória cache em linguagem simples e acessível, para que você saiba para que serve esse tipo de memória no seu PC.
A memória cache foi implementada pela primeira vez no Intel 80486, mas suas origens remontam ao IBM S / 360, onde a ideia de memória cache foi implementada pela primeira vez. Hoje, devido à lacuna entre o CPU, GPU e outros processadores com memória, tornou-se uma parte indispensável de todo processador.
Por que o cache é necessário?
A memória cache é necessária devido ao fato de que RAM a memória é muito lenta para que uma CPU execute suas instruções com velocidade suficiente e não podemos mais acelerá-la. A solução? Adicione um compartimento de memória interna no processador que permite que você amplie os dados e instruções mais recentes.
O problema é que fazer isso é extremamente complexo, pois força os próprios programas a fazê-lo, consumindo assim os ciclos da CPU. A solução? Crie uma memória com um mecanismo que copie os dados e instruções mais próximos do que está sendo executado.
Como o cache está dentro do processador, uma vez que a CPU encontra os dados dentro dele, ela o executa muito mais rápido do que se tivesse acesso natural à RAM.
Como funciona o cache?
Em primeiro lugar temos que ter em mente que o cache não faz parte da memória RAM nem funciona como tal, além disso, não pode ser controlado como a RAM onde os programas podem ocupar e liberar memória como quiserem para quando precisarem. . A razão? O cache funciona totalmente separado da RAM.
O trabalho do cache é mover os dados da memória para o processador. O normal em um programa é que o código seja executado em sequência, ou seja, se a instrução atual estiver na linha 1000, a próxima estará na linha 1001, a menos que seja uma instrução de salto. A ideia de caches? Bem, transfira parte dos dados e instruções para uma memória interna do processador.
Quando a CPU ou GPU procura um dado ou uma instrução, a primeira coisa que fará é olhar o cache mais próximo do processador e, portanto, aquele com o nível mais baixo para aumentar até atingir os dados esperados. A ideia é que você não precise acessar a memória.
Níveis de cache na CPU e GPU
Em um sistema multicore onde temos dois ou mais núcleos, descobrimos que todos eles acessam bem a mesma memória RAM, há uma única interface para memória e vários processadores lutando pelo acesso a ela. É neste ponto que é necessário criar um nível de cache adicional, que se comunica com o controlador de memória e este com os níveis de cache superiores.
Normalmente CPUs multicore costumam ter dois níveis de cache, mas em alguns projetos o que temos são clusters, que se baseiam em grupos de várias CPUs com um cache L2 compartilhado, mas que compartilham o espaço com outros clusters, o que às vezes obriga à inclusão de um cache de terceiro nível.
Embora não sejam comuns, os caches de nível 3 aparecem assim que a interface de memória é um gargalo grande o suficiente para que a adição de um nível adicional na hierarquia ajude o desempenho.
A hierarquia da memória
As regras da hierarquia da memória são muito claras, começa nos registros do processador e termina na memória mais lenta do mesmo e sempre segue as mesmas regras:
- O nível atual da hierarquia tem mais capacidade do que o anterior, mas menos do que o seguinte.
- À medida que nos afastamos da CPU, a latência das instruções aumenta.
- À medida que nos afastamos da CPU, a largura de banda com os dados diminui.
No caso específico dos níveis de cache, eles armazenam informações cada vez menores, mas sempre contêm um fragmento do próximo nível. Portanto, o cache L1 é um subconjunto dos dados do cache L2 que, por sua vez, é um superconjunto dos dados do cache L1 e um subconjunto dos dados do cache L3, se houver.
No entanto, o cache de último nível, o mais próximo da memória, não é um subconjunto da RAM, mas apenas uma cópia da página de memória ou conjunto destas mais próximas do processador.
Falha de cache ou quando os dados não são encontrados
Um dos maiores problemas de desempenho é quando ocorre uma perda de cache, que ocorre quando os dados não são encontrados em um nível de cache. Isso é extremamente perigoso para o desempenho de uma CPU fora de ordem, pois a consequência são muitos ciclos de processador perdidos, mas não é menos perigoso para uma CPU fora de ordem.
Para o projeto de uma CPU, o fato de a soma total do tempo de busca de todos os Cache Miss combinados com o tempo de busca ser maior do que procurar os dados diretamente no cache é uma falha. Muitos designs de CPU tiveram que voltar à tabela de design devido ao fato de que o tempo de busca é mais longo do que o acesso à RAM.
É por isso que os arquitetos relutam muito em adicionar níveis adicionais em uma arquitetura porque sim, isso tem que ser justificado em face da melhoria do desempenho.
Coerência com memória
Como o cache tem cópias de dados da RAM, mas não é a própria RAM, isso causa o perigo de os dados não corresponderem, não apenas entre o cache e a RAM, mas também entre os diferentes níveis de cache onde alguns estão separados .
É por isso que são necessários mecanismos responsáveis por manter a coerência dos dados em todos os níveis entre si. Algo que supõe a implementação de um sistema extremamente complexo que aumenta com o número de núcleos de processador.