quarta-feira, 22 de dezembro de 2010

O cache de três níveis

O cache surgiu na época dos processadores 386, como uma forma de acelerar o acesso aos dados gravados na memória RAM. Inicialmente, tínhamos apenas alguns Kbytes de cache espetados na placa mãe, mas, quando a Intel desenvolveu o 486, embutiu uma pequena quantidade de memória cache dentro do processador. Tínhamos agora dois tipos de cache diferentes, um interno ao processador, e outro espetado na própria placa mãe. Para diferenciar os dois, o cache incorporado ao processador passou a ser chamado de cache nível um, ou “L1”, enquanto o cache da placa mãe passou a ser chamado de nível 2, ou “L2”.

A diferença entre o cache L1 e o cache L2 reside na velocidade. Enquanto o cache L1 trabalha na frequência do processador, possuindo tempos de acesso extremamente baixos, o cache L2 trabalha na frequência da placa mãe, sendo bem mais lento do que o cache L1. Justamente por ser mais lento, o cache nível 2 é mais barato, possibilitando o uso de quantidades maiores. Mesmo nos processadores actuais, onde o cache L2 também faz parte do processador, a velocidade é mais baixa.
Os dados mais requisitados pelo processador são inicialmente armazenados no cache L2, sendo os dados que o processador está processando no momento, juntamente com alguns outros dados importantes, transferidos para o cache L1.

Assim que o processador termina de processar uma determinada rotina e passa para a próxima, são trocados os dados do cache L1, evitando ao máximo que o processador precise aceder a dados contidos no cache L2 (que sempre será mais lento) e principalmente aceder directamente a memória RAM, o que  resultaria em uma grande perda de tempo. Nos processadores actuais, a velocidade e a quantidade de memória cache são muito mais importantes que a própria velocidade da memória RAM. Vou usar um exemplo tosco, só para tentar tornar mais claro este tema:
  • Imagine que num sistema qualquer, 40% das vezes que o processador necessite de dados, encontre-os no cache L1, 45% da vezes precise recorrer ao cache L2, e em 15% dos casos os dados não estejam gravados no cache e o processador precise busca-los directamente na memória RAM.
  • Imagine que neste sistema, um acesso ao cache L1 demore 2 nanossegundos, um acesso ao cache L2 demore 6 nanos, e um acesso à memória RAM demore 50 nanos (é apenas um exemplo). Usando a estatística anterior (40-45-15), 1000 acessos à dados demorariam 12.800 nanos (400 x 2 + 450 x 6 + 150 x 50).
  • Imagine agora que aumentamos o tamanho do cache L1 deste processador, aumentamos a velocidade do cache L2, mas foi mantida a mesma memória RAM. Neste caso, poderíamos imaginar que em 50% das vezes que o processador precisar de dados, os encontrará no cache L1 (já que agora é maior do que no exemplo anterior), em 40% das vezes encontrará os no cache L2 e em 10% das vezes será necessário um acesso à memória RAM. Imaginando que um acesso ao cache L1 continue demorando 2 nanos (já que aumentamos apenas seu tamanho, e não a velocidade), um acesso ao cache L2 passe a demorar 4 nanos depois de aumentarmos sua velocidade, e um acesso à memória RAM continue demorando os mesmos 50 nanos, 1000 acessos demorariam agora apenas 6600 nanos (500 x 2 + 400 x 4 + 100 x 50), uma  diminuição de quase 50%, muito mais do que conseguiríamos aumentando a velocidade da memória RAM.
  • Terminando, imagine agora, que fosse acrescentado um cache nível 3, um pouco mais lento do que o cache L2, mas em uma quantidade um pouco maior, e que um acesso a este novo cache demore 10 nanos. Manteríamos então um cache-hit de 50% no cache L1, 40% no cache L2, mas passaríamos a ter um cache-hit de (digamos) 5% no cache L3, fazendo com que em apenas 5% dos casos fosse necessário um acesso à memória RAM. Os 1000 acessos demorariam então apenas 5600 nanos (500 x 2 + 400 x 4 + 50 x 10 + 50 x 50), um aumento de quase 15% na velocidade de acesso, que certamente resultaria em um aumento considerável na velocidade global do equipamento. 
A ideia do K6-3 é justamente essa, aumentar o desempenho através de uma maior eficiência da memória cache. O K6-3 traz os mesmos 64 KB de cache L1 do K6-2, mas vem agora com 256 KB de cache L2 embutidos no encapsulamento do processador, cache que trabalha na mesma frequência do processador, assim como o cache usado no Celeron e no Pentium II Xeon. Ora, se apenas 128 KB de cache L2 trabalhando na frequência do processador, conseguiram transformar o anémico Celeron sem cache, em um processador cujo desempenho chega até mesmo a superar o desempenho do Pentium II em alguns aplicativos, imagine o que o dobro dessa quantidade não pode fazer pelo K6-3.

Para aumentar ainda mais o desempenho do K6-3, a AMD resolveu aproveitar também o cache L2 encontrado em todas as placas mãe Socket 7, passando a usa-lo como um cache L3. O funcionamento do cache da placa mãe continua idêntico, apenas mudamos seu nome.
O uso do cache L3 consegue aumentar de 3 a 8% o desempenho do K6-3, dependendo da quantidade usada. Não chega a ser nenhuma revolução, mas é um ganho bem perceptível, principalmente se lembrarmos que o Pentium II é apenas 3 ou 5% mais rápido do que o K6-2 em aplicativos de escritório.

Testando o K6-3 em uma placa mãe com 512 KB de cache, o ganho de performance fica em cerca de 3.8%. Segundo números obtidos por outros usuários, o ganho de performance com 1024 KB de cache fica em torno de 6%, chegando a 8% no caso de placas mãe com 2048 KB de cache.

in Manual de Hardware Completo
de Carlos E Marimoto

Sem comentários: