onde exatamente os Caches L1, L2 e L3 estão localizados no computador?

vamos começar com isso:

acho que os processadores smp mais recentes usam caches de 3 níveis, então quero entender a hierarquia de Nível de Cache e sua arquitetura .

para entender caches, você precisa saber algumas coisas:

uma CPU tem registros. Valores que podem ser usados diretamente. Nada é mais rápido.

no entanto, não podemos adicionar registros infinitos a um chip. Essas coisas ocupam espaço. Se tornarmos o chip maior, ele ficará mais caro. Parte disso é porque precisamos de um chip maior (mais Silício), mas também porque o número de chips com problemas aumenta.

(imagem uma bolacha imaginária com 500 cm2. Eu cortei 10 chips dele, cada chip 50cm2 em tamanho. Um deles está quebrado. Eu descartá-lo e eu sou deixado 9 chips de trabalho. Agora pegue a mesma bolacha e eu corto 100 fichas, cada uma Dez vezes menor. Um deles se quebrado. Eu descarto o chip quebrado e fico com 99 chips de trabalho. Isso é uma fração da perda que eu teria tido. Para compensar os chips maiores, eu precisaria pedir preços mais altos. Mais do que apenas o preço do Silício extra)

esta é uma das razões pelas quais queremos chips pequenos e acessíveis.

no entanto, quanto mais próximo o cache estiver da CPU, mais rápido ele poderá ser acessado.

isso também é fácil de explicar; sinais elétricos viajam perto da velocidade da luz. Isso é rápido, mas ainda uma velocidade finita. CPU moderna funciona com relógios GHz. Isso também é rápido. Se eu pegar uma CPU de 4 GHz, um sinal elétrico pode viajar cerca de 7,5 cm por Relógio. Isso é 7,5 cm em linha reta. (Chips são tudo menos conexões retas). Na prática, você precisará de significativamente menos do que aqueles 7,5 cm, pois isso não permite que os chips apresentem os dados solicitados e que o sinal volte.

Bottom line, queremos o cache o mais fisicamente próximo possível. O que significa grandes chips.

esses dois precisam ser equilibrados (desempenho vs. Custo).

onde exatamente estão os Caches L1, L2 e L3 localizados em um computador?

assumindo o hardware apenas no estilo PC (os mainframes são bem diferentes, inclusive no desempenho vs. equilíbrio de custos);

IBM XT
o original 4.77 Mhz um: sem cache. CPU acessa a memória diretamente. Uma leitura de memória deve seguir esse padrão:

  • A CPU coloca o endereço que deseja ler sobre o barramento de memória e afirmar o sinalizador de leitura
  • Memória coloca os dados no barramento de dados.
  • a CPU copia os dados do barramento de dados para seus registros internos.

80286 (1982)
ainda não há cache. O acesso à memória não era um grande problema para as versões de velocidade mais baixa (6Mhz), mas o modelo mais rápido rodava até 20Mhz e muitas vezes precisava atrasar ao acessar a memória.

em seguida, Você obtém um cenário como este:

  • A CPU coloca o endereço que deseja ler sobre o barramento de memória e afirmar o sinalizador de leitura
  • Memória começa a colocar os dados no barramento de dados. A CPU espera.
  • a memória terminou de obter os dados e agora está estável no barramento de dados.
  • a CPU copia os dados do barramento de dados para seus registros internos.

essa é uma etapa extra gasta esperando a memória. Em um sistema moderno que pode ser facilmente 12 etapas, é por isso que temos cache.

80386: (1985)
as CPUs ficam mais rápidas. Ambos por relógio, e correndo em velocidades de clock mais altas.
a RAM fica mais rápida, mas não tão rápida quanto as CPUs.
como resultado, mais estados de espera são necessários.Algumas placas-mãe resolvem isso adicionando cache (que seria cache de 1º nível) na placa-mãe.

uma leitura da memória agora começa com uma verificação se os dados já estão no cache. Se for, é lido a partir do cache muito mais rápido. Se não for o mesmo procedimento descrito com o 80286

80486: (1989)
esta é a primeira CPU desta geração que tem algum cache na CPU.
é um cache unificado de 8KB, o que significa que é usado para dados e instruções.

nessa época, é comum colocar 256 kB de memória estática rápida na placa-mãe como cache de segundo nível. Assim, cache de 1º nível na CPU, cache de 2º nível na placa-mãe.

486 placa-mãe com localização da CPU e cache de 2º nível marcado

80586 (1993)
o 586 ou Pentium-1 usa um cache de Nível 1 dividido. 8 KB cada para dados e instruções. O cache foi dividido para que os caches de dados e instruções pudessem ser ajustados individualmente para seu uso específico. Você ainda tem um primeiro cache pequeno, mas muito rápido, perto da CPU, e um segundo cache maior, mas mais lento, na placa-mãe. (A uma distância física maior).

na mesma área do pentium 1, A Intel produziu o Pentium Pro (‘80686’). Dependendo do modelo, este chip tinha um cache de 256KB, 512KB ou 1mb a bordo. Também foi muito mais caro, o que é fácil de explicar com a imagem a seguir.

 imagem de uma CPU pentium Pro, modelo de cache de 256KB

observe que metade do espaço no chip é usado pelo cache. E isso é para o modelo 256kb. Mais cache era tecnicamente possível e alguns modelos foram produzidos com caches de 512 KB e 1 MB. O preço de mercado para estes foi alto.

observe também que este chip contém duas matrizes. Um com a CPU real e 1º cache, e um segundo dado com 256KB 2º cache.

Pentium-2

o pentium 2 é um núcleo pentium pro. Por razões econômicas, nenhum segundo cache está na CPU. Em vez disso, o que é vendido uma CPU nos um PCB com chips separados para CPU (e 1º cache) e 2º cache.

à medida que a tecnologia avança e começamos a criar chips com componentes menores, é financeiramente possível colocar o segundo cache de volta no dado real da CPU. No entanto, ainda há uma divisão. Muito rápido 1º cache aconchegado até a CPU. Com um primeiro cache por núcleo da CPU e um segundo cache maior, mas menos rápido, próximo ao núcleo.

Imagem de um pentium 2 'CPU (com e sem cobertura)

Pentium 3
Pentium-4
Isso não mudar para o pentium 3 ou o pentium 4.

nessa época, atingimos um limite prático de quão rápido podemos clock CPUs. Um 8086 ou um 80286 não precisavam de resfriamento. Um pentium-4 rodando a 3,0 GHz produz tanto calor e usa tanta energia que se torna mais prático colocar duas CPUs separadas na placa-mãe em vez de uma rápida.

(duas CPU de 2,0 GHz usariam menos energia do que uma única CPU idêntica de 3,0 GHz, mas poderiam fazer mais trabalho).

isso pode ser resolvido de três maneiras:

  1. torne as CPUs mais eficientes, para que funcionem mais na mesma velocidade.
  2. Use várias CPUs
  3. Use várias CPUs no mesmo ‘chip’.

1) é um processo contínuo. Não é novo e não vai parar.

2) foi feito no início (por exemplo, com placas-mãe Pentium-1 duplas e o chipset NX). Até agora, essa era a única opção para construir um PC mais rápido.

3) requer CPUs onde vários ‘núcleo da cpu’ são construídos em um único chip. (Então chamamos essa CPU de CPU Dual core para aumentar a confusão. Obrigado marketing:))

nos dias de hoje, apenas nos referimos à CPU como um ‘núcleo’ para evitar confusão.

agora você obtém chips como o pentium-D (duo), que é basicamente dois núcleos pentium-4 no mesmo chip.

início do pentium-D (2 núcleos P4)

lembra da foto do velho pentium-Pro? Com o enorme tamanho do cache?
veja as duas grandes áreas nesta foto?

acontece que podemos compartilhar esse segundo cache entre os dois núcleos DA CPU. A velocidade cairia ligeiramente, mas um cache compartilhado de 512KiB é frequentemente mais rápido do que adicionar dois caches independentes de 2º nível com metade do tamanho.

isso é importante para sua pergunta.

isso significa que se você ler algo de um núcleo da CPU e depois tentar lê-lo de outro núcleo que compartilha o mesmo cache, você receberá um acerto de cache. A memória não precisará ser acessada.

como os programas migram entre a CPU, dependendo da carga, do número de núcleo e do agendador, você pode obter desempenho adicional fixando programas que usam os mesmos dados na mesma CPU (o cache atinge L1 e inferior) ou nas mesmas CPUs que compartilham o cache L2 (e, portanto, obtêm erros no L1, mas atingem as leituras do cache L2).

assim, em modelos posteriores, você verá caches de Nível 2 compartilhados.

Imagem de um Core2 CPU

Se você está programando para CPUs modernas, em seguida, você tem duas opções:

  1. não se incomode. O sistema operacional deve ser capaz de agendar as coisas. O Agendador tem um grande impacto no desempenho do computador e as pessoas gastaram muito esforço para otimizar isso. A menos que você faça algo estranho ou esteja otimizando para um modelo específico de PC, é melhor usar o agendador padrão.
  2. se você precisar de cada último bit de desempenho e hardware mais rápido não é uma opção, tente deixar os passos que acessam os mesmos dados no mesmo núcleo ou em um núcleo com acesso a um cache compartilhado.

eu percebo que ainda não mencionei o cache L3, mas eles não são diferentes. Um cache L3 funciona da mesma maneira. Maior que L2, mais lento que L2. E muitas vezes é compartilhado entre núcleos. Se estiver presente é é muito maior do que o cache L2 (caso contrário, não faria sentido) e muitas vezes é compartilhado com todos os núcleos.

 modernCPUwithL3.png

Deixe uma resposta

O seu endereço de email não será publicado.