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

5

Em geral, uma memória cache é útil porque a velocidade do processador é maior que a da ram (eles 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 o 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?

    
por Kami 01.01.2014 / 13:02

1 resposta

11

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 cache grande e 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.

Usando 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 recorrendo a uma busca de memória do sistema. Uma vez que essa busca é feita, é puxada de volta pelos caches.

    
por 01.01.2014 / 13:32