:. AMD Athlon em detalhes

 Por Carlos E. Morimoto
 http://www.guiadohardware.net
 28/06/2000


Introdução

Do K6 ao K6-3, pouca coisa foi mudada na arquitetura dos processadores AMD. Basicamente foram acrescidas as instruções 3D-now! e foi incluído um cache L2 que trabalha na mesma frequência do processador, sendo o cache encontrado na placa mãe aproveitado na forma de um cache L3. Foram melhoradas também as técnicas de produção, o que permitiu o lançamento de processadores trabalhando à frequências mais altas. O núcleo do processador, assim como o coprocessador aritmético porém, não foram mudados em praticamente nada. Basicamente foram adicionados apenas alguns "acessórios" ao K6, que o tornaram mais rápido.

Durante muito tempo, a AMD prometeu um novo processador, onde fosse solucionado o velho problema de desempenho dos processadores AMD em aplicativos gráficos, e que finalmente fosse capaz de apresentar um desempenho igual ou superior a um processador Intel equivalente em todos os aplicativos. Quando finalmente foi lançado, o K7 como era chamado até então ganhou o apelido de "Athlon".

O Athlon é um projeto de processador completamente novo, ao contrário do Pentium III, que utiliza a mesma arquitetura do Pentium II, apenas com as novas instruções SSE e um cache L2 mais rápido, no caso da versão Coppermine.

A fim de atingir todas as metas de desempenho, a AMD optou por abandonar a idéia de processador de baixo custo, como tínhamos no K6-x e optar por um projeto realmente "generoso" em termos de número de transístores e recursos.

Um processador é mais ou menos como uma fábrica. Desde que o projeto seja bem elaborado, quanto mais componentes forem adicionados e mais "operários" tivermos trabalhando, maior será a produção em cada ciclo de clock. É por isso que um Pentium de 100 MHz é muito mais rápido que um 486 também de 100 MHz, e é nisso que a AMD apostou suas fichas enquanto produzia seu novo processador.

Arquitetura

A idéia fundamental da AMD ao desenvolver o Athlon parece ter sido "mais". O Athlon tem mais estágios de Pipeline, mais unidades de FPU, mais unidades de execução, mais registradores, o que naturalmente resulta em mais desempenho. Na ilustração ao lado, temos uma foto que mostra como o Athlon é fisicamente. Esta foto foi cedida pela própria AMD e é bem interessante, pois ajuda a entender como os dados trafegam dentro do processador. Veja que a foto está dividida em pequenos retângulos, cada um mostrando a área ocupada por cada componente do processador. Infelizmente tudo está em inglês, mas aqui vai uma breve legenda dos componentes mais importantes (na ordem em que cada componente aparece na ilustração, começando de cima:):

Floating Point Execution Units: Unidades de execução de ponto flutuante. Nada mais é do que a parte fundamental do coprocessador aritmético, onde são processados os cálculos de ponto flutuante.

Floating Point Control: Controla a ordem em que as instruções serão executadas pelo coprocessador

Floating Point Scheduler: Armazena as próximas instruções que serão processadas pelo coproces-sador.

64 Kbyte Data Cache: Os 128 KB de cache L1 do Athlon são divididos em dois blocos, 64 KB para dados e 64 KB para instruções. Este é o bloco que armazena os dados.

Integer Execution Unit: Unidades de execução de inteiros. Este é o principal componente do processador. É aqui que são processadas as operações envolvendo inteiros.

Instruction Control Unit: Circuito que controla o envio de instruções para as unidades de execução. Também ordena as instruções de forma que possam ser processadas mais rápido.

Bus Interface Units: É por aqui que os dados entram e saem do processador. Controla a comunicação do processador com o chipset e com os demais componentes do micro.

64 Kbyte Instruction Cache: É o segundo bloco do cache L1, o bloco que armazena instruções.

Branch Prediction: Lembra-se do recurso de execução especulativa, usado apartir do Pentium, onde são processadas instruções aleatórias nos ciclos ociosos do processador, ajudando a aumentar o desempenho? Este é o circuito que controla a execução destas instruções.

Predecode Array: Esta é a porta de entrada do processador. Estes circuitos convertem as instruções x86 enviadas pelos programas nas instruções simples que o processador executa internamente.

Para entender o que faz o Athlon ser mais rápido do que os processadores anteriores da AMD, nada melhor que fazer um tour pela maneira como ele processa instruções. Vamos lá:

Até certo ponto, tanto o Pentium III quanto o Athlon e outros processadores x86 atuais trabalham da mesma maneira. Internamente, o processador é capaz de executar apenas instruções simples, como somas, leituras ou escritas de dados, comparações, etc. Basicamente é só isso que o processador sabe fazer. Operações mais complexas, são conseguidas utilizando-se várias instruções simples. Para calcular uma multiplicação, por exemplo, o processador utilizará sequencialmente várias operações de soma. Na verdade, dentro do processador todas as operações, mesmo as mais complexas, são calculadas com base em várias operações de soma, feitas entre os valores binários processados pelo processador. Uma operação de subtração é conseguida executando-se uma soma com um valor negativo, enquanto uma operação de divisão é conseguida executando-se uma sequência de operações de subtração. Todas os demais cálculos, mesmo os cálculos mais complexos, executados pelo coprocessador aritmético, são resolvidos usando apenas as quatro operações, que por sua vez são obtidas apartir da simples instrução de soma.

Pois bem, o conjunto de instruções x86, utilizadas pelos programas e com as quais qualquer processador destinado a micros PC deve ser compatível, é composto tanto por instruções simples (soma, subtração, leitura, gravação, comparação, etc.) quanto por instruções muito complexas, que devem ser quebradas em várias instruções simples para que possam ser executadas pelo processador.

Excluindo-se componentes de apoio como o cache L1, deixando apenas a parte "funcional" do processador, podemos dividir o processador em três partes.

A primeira parte é o decodificador de instruções. Este componente tem a função de converter as instruções x86 usadas pelos programas nas instruções simples que podem ser executadas pelo processador. As instruções simples vão então para uma unidade de controle, que organiza as instruções da forma que possam ser executadas mais rapidamente. As instruções formam então uma fila, (scheduler) a fim de permitir que a unidade de controle tenha tempo de fazer ser trabalho. Lembre-se que os processadores atuais são superescalares, executam várias instruções por ciclo, simultaneamente, o que torna essencial a existência de algum circuito que as coloque numa ordem em que a execução de uma não dependa do resultado da execução de outra.

Finalmente, temos as unidades de execução, onde as instruções preparadas e organizadas são finalmente processadas. Veja que todos os circuitos trabalham simultaneamente, visando que as unidades de execução sempre tenham algo para processar.

É mais ou menos como num banco, onde aparecem várias pessoas com vários tipos de tarefas, contas para pagar, depósitos, querendo sacar dinheiro, tirar extratos, etc. Algumas pessoas querem fazer apenas uma operação (pagar apenas uma conta por exemplo), enquanto outras querem fazer várias operações (sacar dinheiro, pagar uma conta, depois depositar um cheque, etc.). Para evitar tumulto, é formada uma fila, onde cada um aguarda a sua vez e ir ao caixa e fazer o que deseja. No processador temos um cenário parecido, as unidades de execução são os caixas, onde tudo é realmente feito, enquanto os demais componentes tem a função de organizar a fila e fazer com que cada um se dirija ao caixa apropriado.

Poderíamos então dividir o processador em duas partes. A parte da frente, ou a entrada, composta por todos os circuitos que decodificam e ordenam as instruções dos programas; composta pelo decodificador de instruções, unidade de controle, e também pelos registradores e pelo cache. A parte de trás, ou os "fundos" do processador, seria então composta pelas unidades de execução, onde realmente são processadas as instruções. Cada uma das duas partes seriam então igualmente importantes. As unidades de execução deveriam ser capazes de processar o máximo de instruções possíveis, enquanto a parte da frente, composta pelos demais componentes, teria a função de preparar as instruções o mais rápido possível, de modo que as unidades de execução ficassem ocupadas todo o tempo.

A lógica é que quanto mais unidades de execução tivermos trabalhando ao mesmo tempo, mais instruções todas juntas serão capazes de processar, e quanto mais circuitos de decodificação e controle tivermos, mais eficiente será a decodificação das instruções, resultando em um processador mais rápido. Vamos à uma comparação direta entre as arquiteturas do Athlon e do Pentium III.

Decodificador de instruções

A primeira grande diferença entre o Athlon e o Pentium III reside na maneira como as instruções são decodificadas e processadas. Existem basicamente dois tipos de instruções simples que o processador pode executar: operações aritméticas (soma por exemplo) e instruções de leitura ou gravação. Na maioria das vezes, uma instrução aritmética vem junto com uma operação de leitura ou gravação, já que depois de executar a operação será preciso gravar o resultado em algum lugar.

No Athlon, as instruções são decodificadas na forma de pares. Cada par, chamado "macro-ops" pode ter uma instrução aritmética e uma instrução de leitura ou gravação. Caso a opção de leitura ou gravação não seja necessária, o espaço reservado a ela ficará vago. O Athlon tem dois decodificadores de instruções. O primeiro decodificador chamado "Hardware decoder", se encarrega de converter todas as instruções simples, enquanto o segundo decodificador, chamado de "Microcode decoder" tem a função de converter as instruções mais complexas. Cada um dos dois decodificadores pode enviar 3 pares de instruções, ou três macro-ops por ciclo para a unidade de controle, onde as instruções serão ordenadas e despachadas para as unidades de execução. Como as unidades de execução do Athlon processam três instruções por ciclo, este arranjo assegura que em qualquer caso, mesmo caso entrem apenas instruções simples, ou só instruções complexas, o processador terá pelo menos três instruções por ciclo para processar.

O Pentium III, por sua vez, internamente processa cada instrução separadamente, e não em pares com o Athlon. No Pentium III cada instrução é chamada de "uops".

O Pentium III possui três decodificadores de instruções: temos dois decodificadores simples, que cuidam das instruções simples, e decodificam apenas uma instrução cada, e um decodificador mais complexo que cuida das instruções x86 mais complexas. Este segundo decodificador é capaz de decodificar até 4 instruções por ciclo.

A princípio, parece um empate técnico, já que somados os três decodificadores, temos 6 instruções por ciclo, como no Athlon. Na prática porém, quando o decodificador de instruções complexas está ocupado, os dois decodificadores simples param. Isto faz com que em muitas situações os decodificadores não sejam capazes de produzir todas as instruções que as unidades de execução podem processar, fazendo com que fiquem ociosas durante parte do tempo, o que naturalmente, significa perda de performance.

Coprocessador Aritmético

O grande problema do K6-x é o desempenho do coprocessador aritmético, disso você já deve estar careca de saber. A grande vantagem do coprocessador aritmético utilizado nos processadores Intel é o fato de utilizarem Pipeline, processando várias instruções simultaneamente em cada unidade de execução, enquanto o K6-x utiliza um coprocessador simples, capaz de processar apenas uma instrução simples por ciclo. No caso do Athlon, a situação se inverte, e o "poderoso" coprocessador do Pentium III começa a apresentar sinais de cansaço.

Não que seja um mau projeto, muito pelo contrário, o problema é que a Intel vem utilizando o mesmo coprocessador desde o Pentium Pro, por isso é natural que ele já esteja ultrapassado.

Tanto no Pentium III quanto no Athlon, o coprocessador aritmético é composto por três unidades de execução, chamadas de FADD, FMUL e FSTORE. "ADD" é a abreviação de adição, "MUL" é a abreviação de multiplicação, e "STORE" significa guardar. Pelos nomes já da para ter uma boa idéia 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.

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 e executam as mesmas funções, seriam a princípio equivalentes. Apenas a princípio.

No Athlon é possível executar simultaneamente 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 projetistas da Intel optaram por compartilhar as mesmas sub-unidades 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 se faz uma multiplicação e mais uma operação de leitura/gravação, ou então se faz 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.

Como disse, o Athlon não foi desenvolvido tendo em mente economia de transístores e sim, apenas desempenho. No caso do Pentium III não se pode dizer o mesmo. No caso do coprocessador aritmético, 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 projeto 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, mas perdemos em desempenho, já que apenas uma das unidades poderá usar o núcleo de soma de cada vez.

Podíamos usar como analogia uma fábrica de automóveis. Imagine que na mesma fábrica tenhamos duas linhas de produção, uma de carros de passeio e outra de caminhõ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 saber trabalhar tanto na linha de produção de carros, quanto na linha de produção de caminhõ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 caminhão. Na fábrica do Athlon foram mantidos todos os funcionários, e 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 por que nem sempre é possível agendar uma instrução de soma e outra de multiplicação num mesmo ciclo, já que a demanda por cada tipo de instrução dependem do aplicativo que estiver sendo executado. De qualquer maneira, o coprocessador do Athlon sempre será capaz de trabalhar de forma mais eficiente.

Barramento EV6

Todos os componentes do micro, incluindo o barramento PCI, AGP, memória RAM, etc. estão conectados ao chipset, que funciona como uma espécie de intermediário entre o processador e os demais componentes. Se for preciso acessar algum dado na memória RAM por exemplo, o processador irá entrar em contato com o chipset, e este irá buscar o dado na memória e devolvê-lo ao processador.

No Pentium III, o barramento de comunicação entre o processador e o chipset se chama GTL+, e opera à frequência da placa mãe, a 100 ou 133 MHz, dependendo do modelo do processador.

Como o barramento GLT+ é uma arquitetura proprietária da Intel, a AMD optou por licenciar o barramento EV6 desenvolvido pela Alpha Digital. O EV6 também trabalha na mesma frequência da placa mãe (100 MHz em todas as versões do Athlon disponíveis atualmente), mas permite duas transferências de dados por ciclo, o que na prática resulta em uma performance equivalente à de um barramento operando a 200 MHz.

Usando apenas um processador, os 200 MHz do bus EV6 não fazem quase nenhuma diferença, pois o gargalo maior está na comunicação com os periféricos mais lentos, conectados ao chipset. Porém, o Athlon também suporta multiprocessamento, e é justamente neste ramo que o Bus EV6 mostra para que veio.

Imagine um sistema onde temos 4 processadores Pentium III Xeon trabalhando em paralelo. Os 4 processadores estão espetados na mesma placa mãe e, consequentemente, conectados ao mesmo chipset. O bus GTL+ é um barramento compartilhado, isto significa que o mesmo barramento de 100 ou 133 MHz será compartilhado pelos 4 processadores Xeon. Isto significa que apenas um dos quatro processadores poderá usar o barramento de cada vez. Se um precisar acessar um dado na memória, e outro precisar enviar dados para a placa de vídeo, o segundo terá que esperar o primeiro terminar sua tarefa antes de poder iniciar a sua. Isto causa uma grande perda de tempo, e diminui o desempenho do sistema conforme mais processadores vão sendo adicionados.

O EV6 por sua vez, é um barramento ponto a ponto. Nele, cada processador tem seu barramento de 200 MHz exclusivo de comunicação com o chipset. Isto permite que em um sistema com vários processadores Athlon trabalhando em paralelo, cada um possa acessar os demais componentes do micro no momento em que precisar, sem ter que esperar a sua vez. Outra vantagem é que usando comunicação ponto a ponto entre os processadores e o chipset, diminuímos a quantidade de interferências elétricas, mais uma vantagem do ponto de vista da performance.

O uso do barramento EV6 não melhora em praticamente nada a performance ao ser utilizado apenas um processador. A vantagem é permitir utilizar 4 ou mais processadores na mesma placa mãe, sem que haja perda de performance como temos no bus GTL+ do Pentium III.

O encaixe utilizado pelo Athlon o Slot A, é bem parecido com o Slot 1 do Pentium III. A pinagem de ambos os encaixes é a mesma, porém ambos são electricamente incompatíveis. Isto significa que temos a mesma quantidade de contatos, mas que os sinais que trafegam através de cada contato são diferentes. Apesar dos dois encaixes serem fisicamente parecidos, todo o resto é completamente diferente, por isso, não é possível desenvolver qualquer tipo de adaptador que permita encaixar um Athlon em uma placa mãe para Pentium III ou vice-versa. Apenas para prevenir qualquer confusão, o pino do encaixe ocupa uma posição diferente em cada um, impedindo que qualquer desavisado encaixe um processador na placa de outro:

 --> Slot 1

 --> Slot A

Cache L2, o Calcanhar de Aquiles

Até agora, mostrei apenas as vantagens do Athlon sobre o Pentium III. De fato, tecnicamente falando, o Athlon é um projeto bastante superior em termos de desempenho. O problema, é que para desenvolver este "projeto superior" a AMD gastou muito mais transístores que a Intel gastou no Pentium III. O Pentium II, onde o cache L2 é externo, tem apenas 9,5 milhões de transístores. O Pentium III Coppermine, tem os mesmos 9,5 milhões de transístores (incluindo o cache L1), somados a mais 11,5 milhões de transístores que formam o cache L2 integrado ao núcleo do processador, dando um total de aproximadamente 21 milhões de transístores.

O Athlon, por sua vez, é muito mais complexo, e por isso tem muito mais transístores; um total de 22 milhões de transístores apenas para o núcleo do processador e cache L1. Caso o Athlon fosse trazer cache L2 integrado ao processador, como traz o Pentium III Coppermine, então teríamos um total de aproximadamente 33,5 milhões de transístores!

Como não temos espaço integrar o cache L2 ao núcleo do processador, restou à AMD a solução de usar cache L2 externo, como a Intel fazia na época do Pentium II.

O problema é que usando cache L2 externo, não há maneira de fazer o cache L2 trabalhar à mesma frequência do processador. No caso do PIII Coppermine e do Celeron, o cache L2 é feito com os mesmos transístores usados no restante do processador e por isso pode funcionar tranquilamente na mesma frequência do restante do processador. No caso do Athlon é necessário utilizar chips externos.

A AMD não fabrica memórias, apenas processadores, por isso é obrigada a comprar módulos de memória cache de outros fabricantes. Fazendo isso, ela fica limitada a utilizar os produtos que estes tenham para vender. O problema é que atualmente (metade do ano 2000) nenhuma companhia tem tecnologia para produzir módulos de memória cache capazes de operar a mais de 350 MHz a um preço competitivo.

Oras, se o cache L2 utilizado no Athlon trabalha a no máximo 350 MHz, e a AMD lançou versões do Athlon operando a até 1 GHz, naturalmente o cache L2 opera a uma fração da frequência do processador, o mesmo caso do Pentium II.

As versões de até 700 MHz do Athlon trazem cache L2 operando à metade da frequência do processador. As versões de 780, 800 e 850 MHz trazem cache operando a apenas 2/5 (0.4) da frequência, enquanto nas versões de 900, 950 e 1 GHz o cache opera a apenas 1/3 da frequência. Veja na tabela abaixo a frequência do cache em cada versão do Athlon:

Processador

Divisor

Frequência do cache L2

Athlon 700 MHz

1/2

350 MHz

Athlon 780 MHz

2/5

300 Mhz

Athlon 800 MHz

2/5

320 MHz

Athlon 850 MHz

2/5

340 MHz

Athlon 900 MHz

1/3

300 MHz

Athlon 950 MHz

1/3

316 MHz

Athlon 1 GHz

1/3

333 Mhz

 

Apesar de em termos de processamento e arquitetura o Athlon ser bastante superior, o desempenho do Pentium III Coppermine acaba sendo equivalente, ou até mesmo um pouco superior em muitas aplicações, já que apesar do projeto tecnicamente inferior, o Coppermine tem um cache L2 mais rápido, o que faz uma enorme diferença.

Desempenho

Como disse, o Athlon é um processador tecnicamente superior ao Pentium III Coppermine, mas devido ao seu cache mais lento acaba apresentando um desempenho bastante semelhante ao do concorrente numa base clock por clock. Entretanto, o Athlon apresenta um desempenho muito superior ao do Celeron, Pentium III Katmai, Cyrix Joshua, K6-3 e outros processadores de arquitetura mais antiga. Abaixo, estão alguns números comparando o desempenho apresentado pelo Athlon com o do Pentium III Coppermine em alguns aplicativos:

Processador

Winstone 2000 (aplicativos de escritório)

Quake 3, demo001, 640x480 (em FPS)

3D Studio MAX R2, tempo de renderização (quanto mais baixo mais rápido)

Athlon 800 Mhz (KX133 + memórias SDRAM)

30.8

114

153

Pentium III 800 MHz (i820 + memórias Rambus)

31.0

120

163

Pentium III 800 MHz (i440BX + memórias SDRAM)

30.8

117

165

Athlon 700 MHz (KX133 + memórias SDRAM)

28.7

107

159

Pentium III 700 MHz (i440BX + SDRAM

29.0

109

176

Athlon 600 MHz (KX 133 + SDRAM)

27.0

100

167

Pentium III 600 (Coppermine)
i440BX + SDRAM

26.9

101

184

(os números em negrito indicam os melhores resultados)




Copyright 2003 Carlos E. Morimoto, http://www.guiadohardware.net - Todos os direitos reservados