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](https://static.wixstatic.com/media/be7d01_9d7bf59ba08f49e2adb234c1d97c20bc~mv2.jpg/v1/fill/w_470,h_237,al_c,q_80,usm_0.66_1.00_0.01,enc_auto/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](https://static.wixstatic.com/media/be7d01_8e5b016e2b524a11848b29326af78562~mv2.png/v1/fill/w_488,h_136,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/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](https://static.wixstatic.com/media/be7d01_db6297c6e8a841a78a4e7bc360949482~mv2.jpg/v1/fill/w_340,h_347,al_c,q_80,usm_0.66_1.00_0.01,enc_auto/1k039pty5cv31.jpg)
Pelo menos em questão de velocidade...
Tipos de cache
![cache_1.png](https://static.wixstatic.com/media/be7d01_78bc800437494153a22e34e53bec48e7~mv2.png/v1/fill/w_599,h_151,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/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](https://static.wixstatic.com/media/be7d01_f9b8d64070034254a2769f6afa375b9e~mv2.png/v1/fill/w_646,h_352,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/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](https://static.wixstatic.com/media/be7d01_ab1380fe81ce4915a9ef06c74d073352~mv2.png/v1/fill/w_549,h_117,al_c,q_85,enc_auto/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](https://static.wixstatic.com/media/be7d01_e1e4abb0588d40dbb567f5a66f844ab5~mv2.png/v1/fill/w_360,h_345,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/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](https://static.wixstatic.com/media/be7d01_bef390f927bf414183da611eb005f132~mv2.png/v1/fill/w_557,h_106,al_c,q_85,enc_auto/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](https://static.wixstatic.com/media/be7d01_b5e2cc8b1ff94087bbe0d6ab816c4989~mv2.png/v1/fill/w_419,h_323,al_c,q_85,enc_auto/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](https://static.wixstatic.com/media/be7d01_ab1380fe81ce4915a9ef06c74d073352~mv2.png/v1/fill/w_549,h_117,al_c,q_85,enc_auto/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](https://static.wixstatic.com/media/be7d01_44f7f48326f942b7a533d7d0fcfc68eb~mv2.png/v1/fill/w_432,h_351,al_c,q_85,enc_auto/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](https://static.wixstatic.com/media/be7d01_ae070e0531644e789ac7c06092e300eb~mv2.jpg/v1/fill/w_412,h_261,al_c,q_80,usm_0.66_1.00_0.01,enc_auto/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](https://static.wixstatic.com/media/be7d01_c073356fa9fe46049ad1b44ae0768089~mv2.png/v1/fill/w_505,h_192,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/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
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