domingo, 4 de setembro de 2011

Coprocessador Aritmético

O grande problema dos processadores K6 é o desempenho do coprocessador aritmético, isso já deve estar farto de saber. A grande vantagem do coprocessador aritmético utilizado nos processadores Intel desde o Pentium é o recurso de Pipeline, que combina várias unidades de execução no mesmo processador, permitindo que sejam processadas várias instruções por ciclo.

Toda a família K6 partilha o mesmo projecto de coprocessador aritmético, equipado com uma única unidade de execução. O facto de existir uma única unidade, elimina a necessidade dos circuitos que ordenam as instruções, o que simplifica bastante o projecto do processador, mas tem um grande custo em termos de desempenho. Para tentar compensar, a AMD projectou esta unidade de execução solitária com muito cuidado, conseguindo que ela tivesse uma latência mais baixa. Isto traduz-se num ganho considerável de desempenho, que torna a unidade de execução mais rápida do que cada um das unidades de execução do Pentium III. O problema é que o Pentium III tem três unidades de execução de ponto flutuante, ou seja, ganha na quantidade.

Vendo por este ângulo, é até surpreendente que um K6-2 fique apenas 20 ou 30% atrás de um Pentium II da mesma frequência na maioria dos jogos e chegue até mesmo a quase empatar em alguns (graças às instruções 3D-Now!). Mas, felizmente isso mudou no Athlon, que também passou a adoptar um coprocessador aritmético com três unidades de execução, superior ao do Pentium III sob vários aspectos.

Tanto no Pentium III como no Athlon, o coprocessador aritmético é composto por três unidades de execução, chamadas de FADD, FMUL e FSTORE. “ADD” é a abreviatura de adição, “MUL” é a abreviatura de multiplicação, e “STORE” significa guardar. Pelos nomes já se tem uma ideia da função de cada uma das unidades de execução, a FADD executa operações de soma, envolvendo números de ponto flutuante, a FMUL executa operações de multiplicação, divisão, instruções MMX e instruções 3D-NOW!, enquanto o FSTORE executa operações de leitura/gravação e mais algumas operações diversas. Abaixo está uma foto que mostra a distribuição física dos componentes do coprocessador no Athlon:
Tanto no Pentium III, quanto no Athlon, as três unidades de execução de ponto flutuante possuem Pipeline e como são em mesmo número, executam as mesmas funções. Seriam então equivalentes, mas apenas a princípio.

No Athlon é possível executar simultâneamente operações de soma, operações de multiplicação e operações de leitura/gravação, pois cada unidade é completamente independente das demais. Isto significa que em situações ideais, o coprocessador aritmético do Athlon é capaz de processar três instruções por ciclo.

Para economizar transístores, os projectistas da Intel optaram por partilhar as mesmas subunidades de execução entre as unidades de soma e multiplicação do Pentium III. Isto significa que apenas uma das duas unidades pode funcionar de cada vez: ou é feita uma multiplicação e mais uma operação de leitura/gravação, ou então é feita uma soma e mais uma operação de leitura/gravação, nunca as três operações ao mesmo tempo. Ao contrário do Athlon, o coprocessador aritmético do Pentium III é capaz de executar apenas duas instruções por ciclo, em condições ideais.

O motivo da economia é simples: as operações de multiplicação são na verdade sequências de várias operações de soma. Como as duas unidades possuem o mesmo núcleo básico (que faz as somas), é possível criar um projecto onde tanto a unidade de soma quanto a de multiplicação utilizem o mesmo núcleo. Com isso, é possível economizar um grande número de transístores, sacrificando também parte do desempenho, já que apenas uma das unidades poderá usar o núcleo de soma de cada vez.

Podemos usar como analogia uma fábrica de automóveis. Imagine que na mesma fábrica existem duas linhas de produção, uma de carros de passeio e outra de camiões, onde cada linha de produção pode entregar um veículo por hora trabalhando a pleno vapor. 

Imagine também que esta fábrica está passando por um processo de redução de custos e por isso demitiu metade dos funcionários.
 
Os funcionários que ficaram, foram treinados para trabalhar tanto na linha de produção de carros, como na linha de produção de camiões, mas, naturalmente, um mesmo funcionário não pode estar nas duas ao mesmo tempo. Ou se produz um carro, ou se produz um camião.

Na fábrica do Athlon foram mantidos todos os funcionários, por isso é possível manter ambas as linhas funcionando ao mesmo tempo.

Na prática, o coprocessador do Athlon jamais chega a ser duas vezes mais rápido que o coprocessador do Pentium III, já que é possível utilizar apenas uma instrução de leitura/gravação por ciclo e porque nem sempre é possível agendar uma instrução de soma e outra de multiplicação num mesmo ciclo, pois a procura por cada tipo de instrução depende da aplicação que estiver sendo executada. De qualquer maneira, o coprocessador do Athlon sempre será capaz de trabalhar de forma mais eficiente.

Vale lembrar que apesar desta superioridade técnica, os primeiros modelos do Athlon não tinham suporte às instruções SSE e ainda por cima eram equipados com cache L2 operando a uma fracção da frequência do processador, como no Pentium II. Somadas, estas duas desvantagens anulavam a superioridade do coprocessador, fazendo com que os Athlons K7 e K75 continuassem sendo mais lentos que os Pentium III Coppermine em várias aplicações.

A situação mudou com o Athlon Thunderbird, equipado com cache L2 trabalhando na mesma frequência do processador e, mais recentemente, com os Athlons baseados no core Palomino, que além de conservarem o cache mais rápido, trazem suporte parcial às instruções SSE do Pentium III.

Actualmente, o concorrente do Athlon já não é o Pentium III, mas sim o Pentium 4, que ainda é inferior a um Athlon da mesma frequência na maioria das aplicações, mas em troca é capaz de atingir frequências de operação muito mais altas.

in Manual de Hardware Completo
de Carlos E Marimoto

Sem comentários: