top of page

O que é memória cache?

   O cache é uma memória de alta velocidade quando falamos de hierarquia de memória. Devido ao seu alto custo de produção, a CPU conta com um número relativamente menor de cache comparando com a memória principal. Sem a memória cache, toda vez que a CPU pede por dados, seria enviado o pedido para a memória principal que então seria levado de volta pelo barramento do sistema para a CPU. Esse é um processo lento. A ideia de se ter a memória cache é de ter a possibilidade de armazenar dados que são frequentemente acessados, dando a possiblidade de um tempo de resposta mais rápido para a CPU.

michael-tieck.jpg

O processador do computador usa barramentos de cache para se comunicar com a memória cache.

Papel desempenhado

   Nos primeiros computadores, vários componentes operavam a velocidades extremamente baixas. Em algumas máquinas, a memória era até mais rápida que o próprio processador. Com o avanço da tecnologia, todos esses componentes tiveram um aumento drástico na velocidade. Agora processadores funcionam mais rapidamente que qualquer outro componente.

   Um dos objetivos no design de sistemas modernos é garantir que o processador não tenha sua velocidade reduzida pelos dispositivos de armazenamento que ele trabalha junto. Qualquer lentidão significa ciclos de processador perdidos, que a CPU não consegue fazer nada esperando pela informação que precisa. Então cache aparece como uma solução, facilitando o acesso de dados que são usados com mais frequência pelo computador.

​

Hierarquia de memória

cache.png
  • Nível 1 ou Registrador –
    É um tipo de memória que os dados são armazenados e aceitos de forma que são imediatamente colocados na CPU. Registradores mais comuns são o acumulador, endereço de registro e etc.

  • Nível 2 ou Memória Cache –
    É a memória mais rápida com o tempo de acesso mais rápido onde dados temporariamente guardados para fácil acesso.

  • Level 3 or Memória Principal –
    É a memória com o qual o computador trabalha em um momento presente. É pequena em tamanho, e quando a energia acaba, os dados não ficam mais na memória.

  • Level 4 or Memória Secundária –
    É uma memória externa que não é tão rápida como a memória principal mas as informações ficam permanentemente na memória.

1k039pty5cv31.jpg

Pelo menos em questão de velocidade...

Tipos de cache

cache_1.png
  • Cache primário (L1) - Sempre é localizado no chip do processador. Esse cache é pequeno e seu tempo de acesso é comparável ao dos registradores do processador.

  • Cache secundário (L2) - O cache secundário se coloca entre o primário e o resto da memória. É referido como cache de nível 2 (L2). Frequentemente, se encontra no chip do processador.

  • Memória principal (L3) - O cache L3 é maior em tamanho mas também mais lento em velocidade do que o L1 e L2, seu tamanho fica entre 1MB a 8MB. Em processadores multicore, cada core pode ter L1 e L2 de forma separada, mas todos os cores compartilham um mesmo L3.

Performance do cache

   Quando o processador precisa ler ou escrever algo na memória principal, primeiro se checa por uma entrada correspondente no cache.

cpuu.png

Funcionamento do cache hit e miss.

  • Se o processador descobre que o dado que quer está no cache, o cache hit ocorreu e o dado é lido do próprio cache.

  • Se o processador não encontra o que quer no cache, um cache miss ocorreu. O cache então aloca uma nova entrada e copia a informação da memória principal, então o pedido feito é atentido com o conteúdo agora dentro do cache.

   A performance da memória de cache é frequentada estimada em questão de quantidade pelo hit ratio:

Hit ratio = hit / (hit + miss) = número de hits por total de acessos

   Cache tem em média uma taxa 90% de cache hit. É possível melhorar a performance mais ainda com um maior tamanho de bloco para o cache e maior associatividade, por exemplo. Entretanto, é necessário tomar cuidado com o aumento do tamanho do bloco, podendo aumentar a penalidade dos caches miss feitos.

Associatividade

   A política de posicionamento desde onde no cache uma cópia de uma entrada em particular da memória principal irá ir. Se essa política estiver livre para escolher qualquer entrada no cache para guardar a cópia, o cache é chamado de altamente associativo. Ao outro extremo, se cada entrada na memória principal pode ir em apenas em um local no cache, o cache é mapeado de forma direta. Muitos caches implementam um critério que cada entrada da memória principal irá para N locais no cache, e é descrito por associatividade em conjunto.

Mapeamento direto

comp1.png

Como funciona:

• O endereço pedido é dividido em tag, index e offset.
• Tabela do cache com índice correspondente será examinada.
    - Se o bit válido do índice é igual a 0, se obtém o cache miss;
    - Senão, é comparado o bit da tag do endereço pedido com a tabela do cache.
        Se eles se correlacionam, ocorre o cache hit;
        Senão, ocorre o cache miss.
• Quando ocorre o cache hit, dados da tabela do cache serão retornados. Senão, os dados são retirados da memória principal.

comp2.png

Mostrando a comparação de tabela com a memória.

Prós e contras:

​

O mapeamento direto é simples e pouco custoso de implementar, mas se um programa acessa 2 blocos mapeados para a mesma linha repetidamente, o cache começa a recarregar linha diversas vezes levando a uma alta taxa de cache miss.

Mapeamento associativo

comp3.png

Como funciona:

• A tag pedida será procurada pelo cache com bit de validade.
    - Se há uma correlacionamento de tags com o index na tabela de cache, ocorre-se o cache hit;
    - Senão, ocorre-se o cache miss.
• Quando se ocorre o cache hit, dados da tabela de cache serão retornados. Senão, dados serão recuperados da memória principal.

comp4.png

Como é feita a comparação de tabela e endereço na memória.

Prós e contras:

​

Um mapeamento associativo é a utilização mais eficiente dos blocos de cache, ainda sim, é custoso ter que percorrer pelo cache para procurar cada tag pedido. Já que não á um campo especificado para cada instrução, um algoritmo de política de reposicionamento deve ser feito junto com a implementação de um cache altamente associativo.

Mapeamento associativo por conjunto

comp1.png

Como funciona:

• O endereço pedido é dividido em tag, index e offset;
• A tabela do cache com o index correspondente será examinada. N-caminhos de blocos de cache serão percorridos.
    - Se um dos caminhos tiver o index pedido, ocorre-se o cache hit;
    - Senão, ocorre-se o cache miss.
• Quando se ocorre o cache hit, dados da tabela do cache serão retornados. Senão, dados serão recuperados da memória principal.

comp5.png

Como é feita a comparação com as diversas tabelas.

Prós e contras:

​

​Combinar princípios de mapeamento direto e associativo é visto como o caminho mais equilibrado para se obter um grande número cache hits ao mesmo tempo que conseguir manter um custo de recursos balanceado. Porém, associação em conjunto pode ser difícil para uma implementação inicial já que vários conceitos estão envolvidos.

Localidade de referência

   O tamanho da memória cache é menor se comparado com a memória principal. Então para checar qual parte da memória principal deve ser dada prioridade e carregada no cache, é utilizado no princípio de localidade de referência.

Untitled-Diagram-14.jpg

Tipos de localidade de referência:

• Localidade de referência espacial
   - Há a chance que o elemento estará presente próximo ao ponto de referência e a próxima vez que for procurado, está mais próximo ainda do ponto de referência.

• Localidade de referência temporal
   - Nesse, o algoritmo LRU (Least Recently Used) será usado. Sempre que um page fault ocorre com uma palavra será não apenas apenas carregada a própria palavra na memória principal mas o page fault completo será carregado por conta da regra de localidade de referência especial que fala que se você está encaminhando qualquer palavra então a próxima palavra será encaminhada em seu registro, então é por isso que é carregado a tabela completa de page fault, para então o bloco inteiro ser carregado.

Simulando os mapeamentos

sim.png

   Nesse simulador feito pela Universidade Tecnológica de Nanyang, é possível simular os vários tipos de mapeamento de cache comentados, podendo manipular as instruções enviadas, valores, políticas de escritas e outros, para ver como blocos de memória e cache se comportam.

Questões de fixação

1) Assinale a alternativa correta. 1 - Quem está no topo da hierarquia de memória? 2 - Qual a memória mais rápida? 3 - Qual a função do cache?
2) Sobre os tipos de cache:
3) Descreva as etapas para escrever a palavra USP:
4) Como melhorar a performance da memória de cache, ou seja, o hit ratio? Como se calcula o hit ratio?
5) Dadas as sentenças assinale a alternativa correta. I- No mapeamento direto cada bloco na memória principal é mapeado em um único bloco da cache; II - No mapeamento direto vários blocos da memória principal podem ser mapeados no mesmo bloco da memória cache; III - No mapeamento associativo um bloco da memória principal pode ser carregado em qualquer bloco da memória cache;
6) Associe a divisão do endereço de memória para tipo de mapeamento. I - Tag, Index e Offset. II - Tag e Offset.

GABARITO: 1 - C; 2 - B; 3 - D; 4 - A; 5 - E; 6 - B.

Referências

G.R. Wilson, in Embedded Systems and Computer Architecture, 2002

​

Bertil Schmidt, ... Moritz Schlarb, in Parallel Programming, 2018

​

​Eric Conrad, ... Joshua Feldman, in Eleventh Hour CISSP® (Third Edition), 2017

 

https://www.wisegeek.com/what-is-a-cache-bus.htm

https://www.geekboots.com/story/what-is-cache-memory

https://www.sciencedirect.com/topics/computer-science/cache-memory

https://www.geeksforgeeks.org/cache-memory-in-computer-organization/

Patterson & Henessy – 5ª edição

Contact
bottom of page