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

54

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

    
por ConditionRacer 31.03.2014 / 02:00
fonte

6 respostas

108

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 não está nos discos giratórios.

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

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

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

Leitura adicional em Cache (computação) na Wikipedia

    
por 31.03.2014 / 02:11
fonte
32

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

SRAM é e pode ser consideravelmente mais rápido que DRAM os valores são mantidos estaticamente (o S em S RAM) para que eles não precisem ser atualizados, o que reduz os ciclos. DRAM é dinâmico, como minúsculas baterias recarregáveis, você tem que regularmente recarregar as que não drenam e se tornam zeros. Isso rouba tempo de ciclo, além de como você tem que acessar os bits, etc.

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

A SRAM é mais rápida de acessar do que a DRAM levando maçãs para maçãs, e as caches geralmente estão no chip ou mais próximas ou em busses mais rápidos do que a DRAM, tornando o tempo de acesso mais rápido também.

    
por 31.03.2014 / 03:27
fonte
20

Uma coisa que deve ser mencionada explicitamente é o impacto da velocidade da luz. Em este vídeo Grace Hopper mostra um pedaço de fio com cerca de trinta centímetros de comprimento, que é o quanto um sinal elétrico pode percorrer em um nanossegundo *. Se uma CPU está 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. Essa é uma grande parte do motivo de estar perto da CPU (como o cache L1). memória para ser mais rápido.

EDIT * até que ponto a luz pode viajar no vácuo, a distância através do cobre / silício é menor.

    
por 31.03.2014 / 06:54
fonte
4

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

O seguinte é uma grande simplificação de como funciona a decodificação de endereços de memória, mas dá uma boa idéia do motivo pelo qual os grandes chips DRAM são geralmente muito lentos.

Quando o processador precisa acessar a memória, ele 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 da coluna (por enquanto, ignoraremos endereços de linha). O chip de memória agora tem que ativar a coluna solicitada, o que faz enviando o endereço por uma cascata de portas lógicas para fazer uma única gravação que se conecta a todas as células na coluna. Dependendo de como ele é implementado, haverá uma certa quantidade de 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 devem ser examinados sequencialmente, esse processo demora muito mais do que um ciclo de processador (que geralmente tem apenas alguns transistores em seqüência para aguardar). Ele também demora muito mais do que um ciclo de barramento (que geralmente é algumas vezes mais lento que um ciclo de processador). Um comando CAS em um chip de memória típico provavelmente ocupa a ordem de 5 ns (IIRC - já faz um tempo desde que eu observei as temporizações), que é mais do que uma ordem de grandeza 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. Não só é muito menor, então a tradução de endereços é um trabalho mais fácil, ele realmente não precisa 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 todas) do endereço. Obviamente, isso torna o cache ainda mais caro, mas significa que todas as células podem ser consultadas para ver se possuem a linha de memória específica desejada simultaneamente e, em seguida, a única (esperançosamente) que possui os dados corretos será despejada. em um barramento que conecta toda a memória ao núcleo principal do processador. Isso acontece em menos de um ciclo, porque é muito mais simples.

    
por 11.02.2016 / 00:01
fonte
3

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

Um bit que foi deixado de fora e é 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 para resolver essa desvantagem.

Existe uma excelente pergunta e resposta sobre este ponto em eletrônica SE

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 definido como associativo, como a maioria dos caches hoje). Requer portas e lógica. Então, mesmo se descartamos o custo e o espaço morto

If someone would try to implement a ridiculously large L1 cache, the logic which performs all the required operations for a cache read would also become large. At some point, the propagation delay through all this logic would be too long and the operations which had taken just a single clock cycle beforehand would have to be split into several clock cycles. This will rise the latency.

    
por 04.04.2014 / 15:57
fonte
-2

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

As transferências de dados do disco - > memória principal (RAM) (armazenamento temporário) - > Cache da CPU (menor armazenamento temporário perto da 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 de 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 similar que armazena cópias dos dados dos sites visitados mais recentemente pelos usuários.

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

    
por 31.03.2014 / 12:09
fonte