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

3

Eu li recentemente sobre processadores (principalmente multi-processadores) e me deparei com o conceito de caches de vários níveis. Esses designs têm vários níveis de cache, nesse caso, para aumentar o desempenho.

Eu não consegui descobrir, no entanto, como um cache adicional aumenta o desempenho no processador? Por que não apenas aumentar o tamanho dos caches existentes?

    
por Ant's 10.04.2011 / 17:47

4 respostas

11

O uso de vários 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 vários núcleos, cada núcleo tem seu próprio cache L1. Isso permite que o núcleo leia e grave de e para o cache sem se preocupar em interferir nos outros núcleos. Os núcleos precisam de armazenamento compartilhado, para que possam trocar certas informações facilmente. 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 memória RAM dinâmica (DRAM) que compõe sua 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 reescritas. Seu controlador de memória faz isso automaticamente, mas toda vez que o controlador de memória tem que fazer isso (milhares de vezes por segundo), ele é incapaz de ler / gravar valores para o processador até que seja feito. Isso desacelera a DRAM. A SRAM não tem essa limitação, a SRAM manterá seu valor indefinidamente, desde que tenha potência operacional, tornando-a muito mais rápida. Então, seus caches (L2 e L3) são feitos de SRAM. O problema é que a SRAM é muito cara; enquanto 4GB de DRAM de alta velocidade é um pouco caro, mas acessível, 4GB de SRAM está bem acima da sua faixa de preço.

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

Portanto, para resumir, os processadores têm caches de vários ní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 baratos.

    
por 10.04.2011 / 23:50
1

Caches de vários níveis são principalmente um compromisso entre capacidade e custo de acesso (latência / tempo e energia).

Pode ajudar compará-lo a comprar uma ferramenta. Ir para a 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 se busca. Ir para a loja de hardware big box (comparável ao cache L2) vai levar mais tempo e energia (é mais longe e olhando para a ferramenta levará mais tempo), mas a ferramenta é mais provável que esteja em estoque. Se até mesmo a grande loja de ferragens não tiver a ferramenta, pode-se ir ao armazém do fabricante (comparável à memória principal), o que é quase certo que tenha a ferramenta. Se mesmo o armazém não tiver a ferramenta, espera-se uma espera ainda maior até que a fábrica do fabricante (comparável ao disco) produza mais da ferramenta.

Viver próximo a uma grande loja de hardware (com um cache L1 muito grande) economizaria tempo se a diversidade de suprimentos de hardware buscada fosse normalmente excelente (alguns processadores PA-RISC voltados para cargas de trabalho comerciais faziam isso), mas normalmente uma pequena diversidade de suprimentos são usados para que uma pequena loja local teria muito probabilidade de ter o item em estoque (alta probabilidade de um acerto de cache) e encontrar um item comumente usado é 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 ele pode: evitar armazenamento repetitivo do mesmo conteúdo de memória, permitir uso desbalanceado da capacidade de armazenamento (por exemplo, um núcleo pode usar todo o armazenamento L2 com uma L2 compartilhada, enquanto com caches L2 por núcleo, o núcleo seria restrito ao seu próprio cache L2), e simplificar e acelerar a comunicação entre os 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 tinham os dados).

(vantagens similares de compartilhamento podem ser aplicadas a L2 e caches de dados e instruções L1, mas tal compartilhamento de conteúdo é geralmente evitado (isto é, uma linha de cache geralmente tem apenas código ou dados) e, excluindo ações menos comuns como auto Modificando o código e a compilação JIT, raramente há comunicação entre um cache de instruções e um cache de dados.

No entanto, o compartilhamento tem sobrecarga. Pode-se compará-lo a fazer compras em uma loja de departamentos. Quanto mais compradores usarem a loja, maior a probabilidade de haver uma linha em qualquer estação de checkout (comparável a 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 várias portas que suportam maior produtividade, mas aumenta o tempo necessário para escolher uma porta - a sobrecarga de escolha pode ser extremamente pequena (mas não não). existente) quando ninguém mais está entrando / saindo, mas quando a loja está ocupada, a escolha da porta se torna mais complexa. Se assumirmos que a loja estará ocupada, algum atraso na decisão pode ser evitado; mas apenas usar a porta mais conveniente seria mais rápido se a loja não estivesse ocupada (da mesma forma, um cache poderia levar o tempo extra para alocar um buffer para armazenar as informações de solicitação de memória, mesmo que esse 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 de determinar se o cache estava ocupado e alocar uma entrada de buffer ocorreriam em seqüência, portanto, o tempo total seria a soma dos dois, mas se o cache não está ocupado, a etapa de alocação do buffer é evitada).

O compartilhamento também pode aumentar a frequência de falhas de conflito, devido à limitada associatividade de um cache e pode causar escolhas ruins 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 outro núcleo com reutilização freqüente de dados teria maior benefício no uso). Existem técnicas para reduzir essas desvantagens, mas elas adicionam complexidade e outros custos.

    
por 17.12.2012 / 18:36
0

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 para passar) para a velocidade do processador ou da placa-mãe.

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

    
por 10.04.2011 / 18:00
0

o processador tem cache multinível como l1, l2 e l3.

O L1 é o cache mais rápido, mas também o mais caro. L2 vem em segundo e discutiu mais. E depois daquela L3 que vem depois da L2.

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

Mas as empresas precisam escolher entre o desempenho e as despesas de cada processador, de modo que introduzem o cache multinível nos processadores de acordo com seu preço.

    
por 10.04.2011 / 18:07