Por que a memória cache da CPU é tão rápida?


58

O que torna a memória cache da CPU muito mais rápida que a memória principal? Eu posso ver alguns benefícios em um sistema de cache em camadas. Faz sentido que um cache menor seja mais rápido para pesquisar. Mas deve haver mais do que isso.


2
O que você quer dizer com memória principal ?
marcocs

11
@marcocs editados para maior clareza. Estou me referindo à memória cache da CPU e à memória principal do sistema, ou seja, aos dimers removíveis na maioria das placas-mãe.
ConditionRacer


2
@ratchetfreak Uh ... OP está claramente pedindo uma causa próxima, não uma causa final.
Kyle Strand

11
Uau, acho que nunca usaria meu diploma de engenharia da computação. A resposta aceita não é realmente uma resposta. É porque o cache da CPU opera com uma taxa de clock muito maior (a taxa de clock da CPU, em torno de 4GHz), enquanto a memória principal opera na taxa de clock do barramento (em torno de 1600MHz). Não apenas isso, mas o cache da CPU pode ler em 4 ciclos de clock, mas a RAM do sistema pode demorar 100 ciclos de clock do sistema. Além disso, a RAM do sistema tem contenção com outros periféricos, como o disco ou a rede, enquanto o cache da CPU é dedicado. Quanto mais longo o fio, mais lento o clock em que ele pode operar. tinyurl.com/zkdsstd
Chloe

Respostas:


115

No caso de um cache de CPU, é mais rápido porque está no mesmo dado que o processador. Em outras palavras, os dados solicitados não precisam ser transferidos para o processador; já está lá.

No caso do cache em um disco rígido, é mais rápido porque está na memória de estado sólido e ainda não está nos pratos rotativos.

No caso do cache em um site, é mais rápido porque os dados já foram recuperados do banco de dados (que, em alguns casos, podem estar localizados em qualquer lugar do mundo).

Então é principalmente sobre localidade . O cache elimina a etapa de transferência de dados .

A localidade é uma maneira elegante de dizer dados "próximos", no tempo ou no espaço. O armazenamento em cache com uma memória menor, mais rápida (mas geralmente mais cara) funciona, porque normalmente uma quantidade relativamente pequena dos dados gerais é aquela que está sendo acessada com mais frequência.

Cache de leitura adicional
(computação) na Wikipedia


29
Eu acho que essa é uma boa resposta. No entanto, vale a pena acrescentar que também existe uma hierarquia de custos para armazenar em cache: o armazenamento em rede é mais barato que um disco rígido local, mais barato que a RAM, muito mais barato que o cache da CPU. Se não fosse por isso, fabricaríamos CPUs com 120 GB de memória no chip e concluiríamos com isso.
Charles E. Grant

11
@ ConditionRacer: Mesmas razões. L1 é mais rápido, mas mais caro, então eles oferecem um pouco de L1 muito caro e mais do L2 menos caro, mas mais lento. Veja também stackoverflow.com/questions/3699582/…
Robert Harvey

9
"Por que L1 é mais rápido que L2" - a questão fica fora de tópico para Programmers.SE e deve ser feita no Electronics.SE
mattnz

5
@ConditionRacer IIRC, tem a ver com a tecnologia usada para implementar a memória. Eu acho que L2 é DRAM no chip, enquanto L1 é SRAM ou algo assim; muito mais caro, mas muito mais rápido. É mais de uma década desde que eu trabalhei no projeto CPU ...
Donal Fellows

4
@ CharlesE.Grant: embora a hierarquia de custos seja um bom exemplo, há outra razão pela qual não temos 120 GB de cache no chip: endereçar uma memória maior precisa de endereços maiores, portanto, instruções maiores ou mais ciclos de CPU. Portanto, para ser o mais rápido, o número de registros precisa permanecer relativamente pequeno. Obviamente, é possível ter memória no chip além dos registros, mas a camada mais rápida deve permanecer pequena, caso contrário, não seria mais tão rápida assim.
vsz 31/03

33

É mais rápido porque está mais próximo e porque é SRAM e não DRAM.

A SRAM é e pode ser consideravelmente mais rápida que a DRAM; os valores são mantidos estaticamente (o S na S RAM), para que eles não precisem ser atualizados, o que tira os ciclos. A DRAM é dinâmica, como pequenas baterias recarregáveis, você precisa recarregar regularmente as baterias para que elas não sejam drenadas e se tornem zeros. Isso rouba o tempo do ciclo, além de como você precisa acessar os bits, etc.

Estar no mesmo molde ou mais próximo do processador reduz a viagem de ida e volta, tanto L1 quanto L2 são mais rápidos que DRAM de uma perspectiva de acesso.

O acesso à SRAM é mais rápido do que o DRAM leva maçãs às maçãs, e os caches geralmente estão no chip ou mais próximos ou em barramentos mais rápidos que o DRAM, tornando o tempo de acesso mais rápido também.


11
A SRAM também consome mais energia por bit, então você teria que adicionar radiadores a ela e qualquer coisa a bateria sofreria.
9000

11
Sem mencionar o fato de que aumentar a SRAM o torna MUITO mais lento.
Darkhogg 31/03

concordou, mais poder e mais lento em relação a outro sram. Eu acho que são 4 transistores por bit para sram e 1 por bit para dram. dram depende da capacitância do feto, onde o sram depende da lógica antiquada. então você precisa alimentar todos esses transistores o tempo todo e não apenas bombear a carga periodicamente.
31814 Old_timer

4
SRAM em caches geralmente é 6T, não 4T. Além disso, a SRAM (certamente a variante 6T) é mais eficiente em termos energéticos. O verdadeiro poder da DRAM é o ciclo de atualização, e a SRAM simplesmente não precisa disso. Os transistores SRAM consomem energia ao trocar, o capacitor DRAM vaza o tempo todo. Se você substituir a tampa com vazamento da DRAM, você acaba com a EEPROM, mas isso não é rápido: se é difícil vazar a carga, também é difícil tirá-la da maneira normal.
MSalters

Os FETs do CMOS do @dwelch não drenam a energia se estiverem no estado aberto ou fechado; portanto, o argumento sobre o consumo de energia é inválido. Além disso, é a comutação lógica do CMOS, que faz com que as CPUs drenem a maior parte de sua energia - os picos atuais no estado intermediário (não-1 e não-0), para que a situação seja inversa ao que você diz :)
Ruslan

21

Uma coisa que deve ser mencionada explicitamente é o impacto da velocidade da luz. Em este vídeo Grace Hopper mostra um pedaço de arame cerca de um pé de comprimento, que é o quão longe um sinal elétrico pode viajar em um nanosegundo *. Se uma CPU estiver operando em 3GHz, isso implica uma distância de 4 "por ciclo de clock. Esse é um limite físico rígido nas velocidades de acesso à memória. Isso é uma grande parte do motivo pelo qual estar perto da CPU (como o cache L1) permite: memória para ser mais rápida.

EDIT * Na verdade, o quão longe a luz pode viajar no vácuo, a distância através do cobre / silício é menor.


2
Limite rígido para cobre. Este é um bom ponto, porém, não considerei como os processadores modernos são ridiculamente rápidos.
ConditionRacer

@ConditionRacer Acabei de adicionar uma correção: 11,8 polegadas é leve no vácuo.
Matthew Finlay

2
Você precisa reduzir pela metade esse número, pois precisa de uma viagem de ida e volta para recuperar a memória. Portanto, são apenas 5 cm e 10 cm por ciclo de latência no vácuo .
CodesInChaos 31/03

2
A velocidade da luz é o motivo pelo qual o relógio do barramento de memória principal parou de acelerar há alguns anos (2000ish?) Não é um efeito direto - tem a ver com sinais lógicos do CMOS que não são mais ondas quadradas perfeitas nas frequências de barramento - mas c mostra com destaque na matemática.
Zwol 31/03

5

Outras respostas já cobriram todos os bits relevantes: localidade (e o custo de transferência de dados associado, largura do barramento e relógio, etc.); velocidade da luz (novamente, associada a custos de transferência e largura e taxa de transferência de barramento); tecnologia de memória diferente (SRAM vs.DRAM). Tudo isso visto à luz do equilíbrio custo / desempenho .

Um pouco foi deixado de fora e é apenas mencionado no comentário de Darkhogg: caches maiores têm melhores taxas de acerto, mas latência mais longa. Vários níveis de cache foram introduzidos também para tratar dessa troca.

Há uma excelente pergunta e resposta sobre este ponto na eletrônica SE

A partir das respostas, parece-me que um ponto a ser destacado é: a lógica que executa todas as operações necessárias para uma leitura de cache não é tão simples (especialmente se o cache for associativo a conjuntos, como a maioria dos caches atualmente). Requer portões e lógica. Portanto, mesmo se excluirmos o custo e o espaço

Se alguém tentasse implementar um cache L1 ridiculamente grande, a lógica que executa todas as operações necessárias para uma leitura de cache também se tornaria grande. Em algum momento, o atraso de propagação em toda essa lógica seria muito longo e as operações que haviam tomado apenas um único ciclo de clock teriam que ser divididas em vários ciclos de clock. Isso aumentará a latência.


5

Há muitos pontos positivos levantados nas outras respostas, mas um fator parece estar faltando: latência de decodificação de endereço.

A seguir, é apresentada uma simplificação excessiva de como funciona a decodificação de endereços de memória, mas fornece uma boa idéia do motivo pelo qual os chips DRAM grandes geralmente são muito lentos.

Quando o processador precisa acessar a memória, envia um comando ao chip de memória para selecionar a palavra específica que deseja usar. Este comando é chamado de Seleção de Endereço de Coluna (ignoraremos os endereços de linha por enquanto). O chip de memória agora precisa ativar a coluna solicitada, enviando o endereço por uma cascata de portas lógicas para criar uma única gravação que se conecte a todas as células da coluna. Dependendo de como é implementado, haverá um certo atraso para cada bit de endereço até que o resultado saia do outro lado. Isso é chamado de latência CAS da memória. Como esses bits precisam ser examinados sequencialmente, esse processo leva muito mais tempo do que um ciclo do processador (que geralmente possui apenas alguns transistores em sequência para aguardar). Também leva muito mais tempo que um ciclo de barramento (que geralmente é algumas vezes mais lento que um ciclo de processador). É provável que um comando CAS em um chip de memória típico assuma a ordem de 5ns (IIRC - já faz um tempo desde que eu analisei os tempos), que é mais do que uma ordem de magnitude mais lenta que um ciclo de processador.

Felizmente, dividimos os endereços em três partes (coluna, linha e banco), o que permite que cada parte seja menor e processe essas partes simultaneamente, caso contrário, a latência seria ainda maior.

O cache do processador, no entanto, não possui esse problema. Além de ser muito menor, a tradução de endereços é um trabalho mais fácil; na verdade, não é necessário traduzir mais do que um pequeno fragmento do endereço (em algumas variantes, nada disso), porque é associativo. Isso significa que, ao lado de cada linha de memória em cache, existem células de memória extras que armazenam parte (ou todo) do endereço. Obviamente, isso torna o cache ainda mais caro, mas significa que todas as células podem ser consultadas para ver se elas têm a linha específica de memória que queremos simultaneamente e, em seguida, a única (espero) que tenha os dados corretos fará o despejo. em um barramento que conecta toda a memória ao núcleo do processador principal. Isso acontece em menos de um ciclo, porque é muito mais simples.


-2

Uma das filosofias que estudei foi o movimento obter-máximo-throughput-no-mínimo-hardware quando falamos sobre qualquer memória baseada em cache, seja cache da CPU, cache do buffer ou cache da memória para esse fim. O motivo básico é alcançado quando há menos ou nenhum movimento de hardware para recuperar / ler / gravar dados e a operação é concluída mais rapidamente.

Os dados são transferidos do disco -> memória principal (RAM) (armazenamento temporário) -> cache da CPU (armazenamento temporário menor próximo à CPU para dados acessados ​​com freqüência) -> CPU (processamento).

O cache da CPU é um espaço de memória menor e mais rápido, que armazena cópias dos dados dos locais de memória principal usados ​​mais recentemente.

O cache do buffer é uma área de memória principal que armazena cópias dos dados dos locais de disco usados ​​mais recentemente.

O cache do navegador é um diretório ou espaço semelhante que armazena cópias dos dados dos sites visitados mais recentemente pelos usuários.

Referência: Como funciona a memória do computador


"a filosofia dos sistemas operacionais é ..." - é apenas sua opinião ou você pode fazer o backup de alguma forma?
Gnat

Foi ensinado sobre isso enquanto estudava o Unix por Maurice Bach. Infelizmente, não há documentação de suporte. Editado ..
roshan4074 31/03

5
A howstuffworks é notoriamente não confiável para obter informações técnicas confiáveis. Eles são bons para simplificações grosseiras que Joe e Jane comuns podem entender, mas é isso.
jwenting
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.