Por que vários níveis de cache são usados ​​em CPUs modernas?

Por que vários níveis de cache são usados ​​em CPUs modernas?

Recentemente li sobre processadores (principalmente multiprocessadores) e me deparei com o conceito de caches multiníveis. Esses designs possuem vários níveis de cache, neste caso, para aumentar o desempenho.

Não consegui descobrir, entretanto, como caches adicionais aumentam o desempenho do processador? Por que não apenas aumentar o tamanho dos caches existentes?

Responder1

O uso de múltiplos níveis de cache é parcialmente um mecanismo para coordenar processadores multi-core e parcialmente um compromisso entre preço e desempenho.

Em um processador com múltiplos núcleos, cada núcleo possui seu próprio cache L1. Isso permite que o núcleo leia e grave no cache sem se preocupar em interferir em outros núcleos. Os núcleos precisam de armazenamento compartilhado, para que possam trocar certas informações com facilidade. O cache L2 é compartilhado por todos os núcleos, por isso é usado como uma espécie de espaço de armazenamento comum onde as informações estão disponíveis para todos os threads.

A diferença entre os caches L2 e L3 é a parte do compromisso. Os caches são feitos de RAM estática ou SRAM. Isso é diferente da RAM Dinâmica (DRAM) que constitui a memória principal. A RAM dinâmica precisa ser “atualizada” periodicamente, ou seja, com o tempo, as células DRAM perdem seu valor, a menos que sejam lidas e depois reescritas. Seu controlador de memória faz isso automaticamente, mas toda vez que o controlador de memória precisa fazer isso (milhares de vezes por segundo), ele não consegue ler/gravar valores para o processador até que isso seja feito. Isso retarda a DRAM. A SRAM não possui essa limitação, a SRAM manterá seu valor indefinidamente enquanto tiver potência operacional, tornando-a muito mais rápida. Portanto, seus caches (L2 e L3) são feitos de SRAM. O problema é que a SRAM émuitocaro; embora 4 GB de DRAM de alta velocidade sejam um pouco caros, mas acessíveis, 4 GB de SRAM estão muito além da sua faixa de preço.

Portanto, sempre que um fabricante de processador decide adicionar mais SRAM ao design, ele fica visivelmente mais caro. A SRAM vem em várias velocidades e, como você pode esperar, uma SRAM mais rápida é mais cara do que uma SRAM mais lenta. Então, o fabricante do seu processador tentou otimizá-lo tanto paravelocidadeecustousando uma SRAM de velocidade mais alta e uma SRAM de velocidade mais baixa. O processador é então projetado de forma que coloque os valores de que mais precisa no cache mais rápido (L2) e as informações de que menos precisa em um cache mais lento (L3). Ao gerenciar cuidadosamente essa memória no microcódigo do processador, isso cria um compromisso uniforme: há mais cache e parte do cache (espero que seja o cache que o processador mais precisa) é muito rápido.

Portanto, resumindo, os processadores possuem caches multiníveis para aumentar a capacidade do cache do processador sem aumentar drasticamente o preço do processador. Essa mistura cuidadosa permite processadores mais rápidos e mais baratos.

Responder2

Os caches multinível são principalmente um compromisso entre capacidade e custo de acesso (latência/tempo e energia).

Pode ser útil compará-lo com a compra de uma ferramenta. Ir à loja de hardware local (comparável ao cache L1) seria rápido e consumiria menos energia, mas a loja de hardware local é pequena e é mais provável que não tenha a ferramenta específica que procura. Ir a uma grande loja de ferragens (comparável ao cache L2) levará mais tempo e energia (é mais longe e procurar a ferramenta levará mais tempo), mas é mais provável que a ferramenta esteja em estoque. Se mesmo a grande loja de ferragens não tiver a ferramenta, pode-se ir ao armazém do fabricante (comparável à memória principal), que é quase certo que possui a ferramenta. Mesmo que o armazém não possua a ferramenta, espera-se uma espera ainda maior até que a fábrica do fabricante (comparável ao disco) produza mais ferramenta.

Morar próximo a uma grande loja de hardware (com um cache L1 muito grande) economizaria tempo se a diversidade de suprimentos de hardware procurada fosse normalmente grande (alguns processadores PA-RISC direcionados a cargas de trabalho comerciais faziam isso), mas normalmente uma pequena diversidade de suprimentos é usado para que uma pequena loja local tenha muito probabilidade de ter o item em estoque (alta probabilidade de um acerto no cache) e encontrar um item comumente usado seja mais rápido em uma loja menor.

Como jcrawfordor mencionou, há algumas vantagens em compartilhar um nível de cache entre vários núcleos, pois pode: evitar o armazenamento repetido do mesmo conteúdo de memória, permitir o uso desequilibrado da capacidade de armazenamento (por exemplo, um núcleo poderia usar todo o armazenamento L2 com um L2 compartilhado). enquanto com caches L2 por núcleo o núcleo seria restrito ao seu próprio cache L2) e simplificaria e aceleraria a comunicação entre núcleos (o mesmo L2 seria acessado de qualquer maneira em uma falha L1 e não haveria necessidade de verificar se outros caches L2 tinha os dados).

(Vantagens de compartilhamento semelhantes podem ser aplicadas em relação a caches de instruções e dados L2 e L1 separados, mas esse compartilhamento de conteúdo geralmente é evitado (ou seja, uma linha de cache geralmente contém apenas código ou dados) e, excluindo ações menos comuns, como código automodificável e compilação JIT, raramente há comunicação entre um cache de instruções e um cache de dados.)

O compartilhamento tem sobrecarga, no entanto. Poderíamos compará-lo a fazer compras em uma loja de departamentos. Quanto mais compradores usarem a loja, maior será a probabilidade de haver fila em qualquer caixa (comparável aos bancos em um cache L2). Além disso, a entrada/saída compartilhada introduz atrasos (comparáveis ​​aos atrasos de arbitragem para acesso ao cache), fornecendo múltiplas portas que podem suportar maior rendimento, mas aumenta o tempo necessário para escolher uma porta - a sobrecarga de escolha pode ser extremamente pequena (mas não desfavorável). existente) quando não há mais ninguém a entrar/sair mas quando a loja está ocupada a escolha da porta torna-se mais complexa. Se assumirmos que a loja estará ocupada, parte do atraso na decisão pode ser evitada; mas apenas usar a porta mais conveniente seria mais rápido se o armazenamento não estivesse ocupado (da mesma forma, um cache poderia, por exemplo, levar um tempo extra para alocar um buffer para armazenar as informações de solicitação de memória, mesmo que tal buffer não fosse necessário se o cache não está ocupado - sem essa otimização, se o cache estiver ocupado, as duas etapas para determinar se o cache está ocupado e alocar uma entrada de buffer ocorreriam em sequência, de modo que o tempo total seria a soma dos dois, mas se o o cache não está ocupado, a etapa de alocação de buffer é evitada).

O compartilhamento também pode aumentar a frequência de erros de conflito dada a associatividade limitada de um cache e pode causar escolhas inadequadas de substituição de cache (por exemplo, um núcleo usando um padrão de acesso de streaming com pouca reutilização de dados tenderia a usar a capacidade que outro núcleo com reutilização frequente de dados). dados teriam maior benefício no uso). Existem técnicas para reduzir essas desvantagens, mas elas acrescentam complexidade e têm outros custos.

Responder3

Os caches mais próximos são muito menores em tamanho.Aqui está um pouco sobre isso, não consigo encontrar nada sobre velocidade, mas provavelmente é limitado (é inútil e caro revisar) à velocidade do processador ou da placa-mãe.

Existem três níveis de cache da CPU (dois em um único núcleo), RAM (secundário) e discos rígidos (terciário).

Responder4

os processadores possuem cache multinível como l1, l2 e l3.

L1 é o cache mais rápido, mas também o mais caro. L2 vem em segundo lugar e é o mais discutido. E depois daquele L3 que vem depois do L2.

Quanto mais rápido o cache, mais rápido o processador lê os dados e grava nele.

Mas as empresas precisam escolher entre o desempenho e os custos de cada processador, por isso introduzem cache multinível nos processadores de acordo com seu preço.

informação relacionada