Questão Por que precisamos de vários níveis de memória cache?


Em geral, uma memória cache é útil porque a velocidade do processador é maior que a velocidade do aríete (ambos estão aumentando em velocidade, mas a diferença ainda permanece). Portanto, reduzir o número de acessos à memória é desejável para aumentar o desempenho.

Minha pergunta é por que precisamos de vários níveis de caches (L1, L2, L3) e não apenas um?

Eu sei que L1 é o mais rápido e o menor, o L2 é um pouco mais lento e um pouco maior e assim por diante ... mas por que eles criam o hardware dessa maneira?


4


origem


Alguma pergunta relacionada: O que é realmente cache multinível nos processadores? (As respostas não vão muito para o motivo pelo qual o maior é mais lento, então a questão nem é quase duplicada, mas as questões parecem relacionadas.) - Paul A. Clayton


Respostas:


Isso tem a ver com o tamanho físico do dado. Cada bit em um cache é mantido por um ou mais transistores, portanto, se você quiser muito cache, precisará de muitos transistores. A velocidade do cache é essencialmente inversamente proporcional à localidade da unidade que deseja acessá-lo - em dispositivos pequenos como esse, a comunicação fica mais lenta quando o caminho do sinal fica mais longo. Isso tem a ver parcialmente com a impedância do substrato, mas nesse nível há alguns fenômenos físicos mais complexos envolvidos.

Se quisermos incluir um grande cache singular, ele deve estar a uma distância muito pequena da MMU, ALU, etc. ao mesmo tempo. Isso dificulta bastante o design físico do processador, pois um grande cache ocupa muito espaço. Para tornar o cache "local" para essas subunidades, você precisa sacrificar a localidade das subunidades entre si.

Ao usar um cache local pequeno e rápido (L1), podemos maximizar a localização e a velocidade, mas perdemos o tamanho. Então, usamos um cache secundário (L2) para manter grandes quantidades de dados, com um pequeno sacrifício de localidade (e, portanto, velocidade). Isso nos dá o melhor dos dois mundos - podemos armazenar muitos dados, mas ainda temos um cache local muito rápido para as subunidades do processador usarem.

Em processadores multicore, o cache L3 é geralmente compartilhado entre os núcleos. Nesse tipo de design, os caches L1 e L2 são embutidos no dado de cada núcleo, e o cache L3 fica entre os núcleos. Isso fornece uma localização razoável para cada núcleo, mas também permite um cache muito grande.

A funcionalidade dos caches em processadores modernos é muito complicada, então eu nem vou tentar uma descrição apropriada, mas um processo muito simplista é que os endereços de destino são procurados no L1, depois no L2, depois no L3, antes de recorrer a um busca de memória do sistema. Uma vez que essa busca é feita, é puxada de volta pelos caches.


10



Agradável! Você tem alguma fonte para vincular? - Thor
Um aspecto interessante do impacto do tamanho físico para grandes memórias é que um projetista pode considerar o uso de dispositivos de armazenamento mais lentos para cada bit e ainda aumentar a velocidade de acesso se os dispositivos mais lentos forem suficientemente menores. Isso significa que a DRAM pode fazer sentido para caches muito grandes. (Há também técnicas de Arquitetura de Cache Não Uniforme, nas quais partes mais próximas de L2 têm menor latência. Com caches L3 particionados, a proximidade física [ou na rede do chip] pode ser explorada por opções de posicionamento para melhorar o desempenho.) - Paul A. Clayton
@Thor Este é um daqueles estranhos pedaços de conhecimento que eu aprendi ao longo de anos lendo aleatoriamente e brincando com microprocessadores, mas o artigo wiki é bastante abrangente, especialmente a parte sobre arquiteturas de cache de vários níveis. - Polynomial