Ir ao conteúdo
  • Cadastre-se

Cache L1 e L2


El Chavo

Posts recomendados

Parece meio ídiota a minha pergunta mas nunca consegui entender por que o cache L1 é muito menor que o cache L2 e o que me deixa mais intrigado na verdade, por que ele está cada vez menor, antigamente os caches de L1 eram por exemplo de 128KB hoje em dia é de 32KB, já que o cache L1 é mais rápido que o L2, por que aumentar o mais lento e diminuir o mais rápido?

Abraços!!

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...
Parece meio ídiota a minha pergunta mas nunca consegui entender por que o cache L1 é muito menor que o cache L2 e o que me deixa mais intrigado na verdade, por que ele está cada vez menor, antigamente os caches de L1 eram por exemplo de 128KB hoje em dia é de 32KB, já que o cache L1 é mais rápido que o L2, por que aumentar o mais lento e diminuir o mais rápido?

Abraços!!

Essa é uma questão bastante ampla, para respondê-la eu a dividirei em partes. Lá vai:
Parece meio ídiota a minha pergunta mas nunca consegui entender por que o cache L1 é muito menor que o cache L2
Sua pergunta não é *****... Quem disser que é provavelmente não sabe a resposta:devil:.

Existem várias razões pelas quais o cache L1 é menor que o cache L2. Mas a ideia básica é que o cache L1 precisa ser significativamente mais rápido que o cache L2. Se não for, ele simplesmente não vale a pena hoje em dia. Em microprocessadores atuais, uma diferença de latência de cache só vale alguma coisa em condições muito especiais, ou caso a diferneça percentual seja de pelo menos uns 20%. Um exemplo disso é a justificada resistência e as explicações meio estranhas criadas para explicar a estranhamente significativa diferença de performance entre os AMD64 65nm (que possuem cache um pouco mais lento) e os 90nm. A verdade é que trocar 12 ciclos de latência por 14, por exemplo, não vai matar ninguém em condições normais. Por isso, cache L1 tem de ser muito mais rápido que o L2, pelo menos umas duas vezes mais rápido, para existir. Aí é que está: a velocidade de acesso de uma memória é (bem) basicamente composta pelo tempo para calcular o endereço, o tempo para achar a linha necessária necessária, o tempo para que a linha devolva o dado e os diversos tempos gastos movendo todos esses sinais de um lado para outro.

O primeiro tempo gasto pode ser reduzido de diversas formas. Veja bem, o cálculo de endereço demora tempo porque o endereço deve ser traduzido de virtual para físico (o que significa uma consulta em diversas tabelas de tradução). Você pode, por exemplo, endereçar o cache com endereços virtuais mesmo. Só que isso causa uma série de problemas, que podem ser amenizados com caches menores (essa ideia é pouco usada). Outra ideia seria usar um cache que adivinha o endereço certo com base nas últimas entradas. Essa ideia sim é muitíssimo usada (diria que é essencial): tais caches chamam-se TLBs. Agora, é óbvio que com caches menores, a TLB pode ser menor com a mesma eficiência, e mais velocidade, já que memórias menores são mais rápidas (depois explico por quê).

O segundo tempo gasto é composto basicamente do tempo necessário para descobrir em que via está o endereço procurado, e pode ser reduzido de diversas formas também. Você pode, por exemplo, prever que linha deverá ser ativada (P4, por exemplo), o que se torna mais fácil em caches menores, juntar o processo de ativação com o de cálculo de endereço (Sparc IV, por exemplo), ou então, simplesmente, procurar em menos linhas. Com menos linhas, você precisará procurar em menos linhas para achar o endereço certo. Mas como? Bem, você pode colocar mais dados por linha (o que significa que você vai trazer muito lixo para o cache), limitar o número de vias onde um endereço pode caber (a chamada associatividade, que pode causar problemas se vários endereços quiserem ocupar a mesma via) ou diminuir o número de vias, diminuindo o cache. Com menos endereços no cache, você consegue achar um endereço mais rapidamente. É o mesmo príncipio de uma biblioteca: achar um livro em uma biblioteca pequena de coleginho é bem mais fácil do que em um sebão gigantesco.

Quanto ao tempo gasto para o acesso ao endereço, esse tempo depende muito do tamanho das células: quanto maiores, melhor. Por isso, as células devem ser muito grandes. Como cada célula ocupa um espaço grande, o cache deve ser pequeno em Kibi Bytes, ou ele ocupará espaço demais.

Por fim, o tempo gasto com o transporte pode ser diminuído com um cache mais próximo do núcleo, ou com um cache menor, pelo qual dados demorarão menos para serem transportados. Uma olhada rápida em qualquer foto de microprocessador vai lhe revelar que os caches L1 estão muito mais próximos do núcleo (na verdade, dentro dele) e são muito menores que os L2.

Mas não é só isso: os caches L1 não têm apenas uma latência menor, mas, a cada ciclo, eles entregam mais dados que os L2. Primeiro, eles são divididos em caches de instruções e de dados, o que permite acessar simultaneamente... instruções e dados. Segundo, eles podem ser acessados várias vezes por ciclo (pelo menos duas, normalmente). Isso, porém, significa que eles precisam de uma área muito maior por MiB. Para acessar dois dados por ciclo, você pode usar uma área duas vezes maior, talvez mais ou bem menos dependendo de como for feito. Ao dividir o cache em instruções e dados, você acaba gastando mais espaço. Por causa de tudo isso, caches L1 são muito mais rápidos do que caches L2, mas também muito maiores por MiB, e, para que não se tornem grandes demais, ocupem espaço precioso e percam velocidade, as empresas os fazem menores.

o que me deixa mais intrigado na verdade, por que ele está cada vez menor, antigamente os caches de L1 eram por exemplo de 128KB hoje em dia é de 32KB, já que o cache L1 é mais rápido que o L2, por que aumentar o mais lento e diminuir o mais rápido?
Primeiro, os caches L1 vem aumentando lentamente desde o lançamento do Pentium II. Este possuía cache de instruções de 16 KiB e cache de dados também de 16 KiB. O K8/7 possui cache de 128 KiB (64 de dados, 64 de endereços). O Pentium M e os Cores possuem 64 KiB (32 de dados 32 de instruções).

Dito isso, o fato é que aumentar o L1 é muito mais complicado que aumentar o L2. O espaço que ele ocupa é "nobre", dentro do núcleo: aumentá-lo significaria ter de redesenhar o núcleo inteiro. Aumentá-lo também significa aumentar significativamente sua latência, dificultar seu desenvolvimento e aumentar seu consumo, que é relativamente mais alto que o do L2. Aumentá-lo, ou, principalmente, mudar sua latência e suas outras caracterísiticas requer uma mudança radical no núcleo, particularmente no agendamento e unidade de Load/Store. É muita complicação. Benefício? É limitado. Aumentar o cache L1 além de 8 KiB, mais ou menos, traz cada vez menos vantagens.

Por fim só para ilustrar, um pequeno gráfico. O eixo Y (vertical) representa a velocidade do microprocessador, em inteiros, no de cima e em ponto flutuante, no de baixo. O eixo X (horizontal) representa o tamanho do cache L1 de dados, em KiB. O resultado é surpreendente....

willy3-fig7.gif

Link para o comentário
Compartilhar em outros sites

Caso você n tenha se esclarecido, pense no cache como uma bibioteca.... quanto maior, mais livros se guarda, mas mais tempo demora pra encontrar um exemplar no meio da coleçao... (foi assim q eu aprendi sobre cache)

um caixe pequeno, quarda poucos dados.... mas eles sao "achados" rapidamente (l1)

um cache maior, guarda varias coisas, mas demora-se mais para encontrar o arquivo X nele (l2)

por isso dividem em 2 caches, um pequeno e rápido e outro grande e mais lento.... cada um com uma finalidade

Link para o comentário
Compartilhar em outros sites

Thiagolckurovski, PARABÉNS pela completa explicação..

Dragum, PARABÉNS também, com esse resumo ficou perfeito..

Valeu.
Caso você n tenha se esclarecido, pense no cache como uma bibioteca.... quanto maior, mais livros se guarda, mas mais tempo demora pra encontrar um exemplar no meio da coleçao... (foi assim q eu aprendi sobre cache)

um caixe pequeno, quarda poucos dados.... mas eles sao "achados" rapidamente (l1)

um cache maior, guarda varias coisas, mas demora-se mais para encontrar o arquivo X nele (l2)

por isso dividem em 2 caches, um pequeno e rápido e outro grande e mais lento.... cada um com uma finalidade

Explicar coisas de um jeito mais rápido não é mesmo comigo...
mas a amd não diminuiu o cache L1, continua com 128K
Realmente, eu disse isso mas não frisei. De qualquer modo, é preciso lembrar que se não diminuiu o cache L1, a AMD também não aumentou. Não que precise. Aliás, eu acho que o cache L1 dos K7 era grande até demais: pessoalmente, eu diria que foi uma opção da AMD pela performance em ponto flutuante e pela maior elasticidade em termos de frequência. Isso comparando com a P6, óbvio, não com uma microarquitetura extrema como a dos Willys ou simplesmente ruim demais como a dos Prescotts.
Link para o comentário
Compartilhar em outros sites

  • mês depois...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...