A plataforma K10 (Barcelona)

Todos os processadores atuais da AMD são descendentes da plataforma K7, que deu origem aos primeiros modelos do Athlon, com os quais a AMD deu combate às variações do Pentium III e do Pentium 4. Em 2003, a plataforma foi atualizada, ganhando suporte a instruções de 64 bits, um controlador de memória integrado e outras melhorias, o que deu origem à plataforma K8, usada nos diferentes modelos do 64, X2, FX e Opteron. Ela foi a plataforma mais bem sucedida da AMD, com a qual ela conseguiu roubar espaço da Intel tanto nos desktops quanto nos servidores, capitalizando sobre as deficiências da plataforma NetBurst.

Em 2006 a Intel contra-atacou com a plataforma Core, que pegou a AMD de surpresa, oferecendo um desempenho clock por clock consideravelmente superior na maioria das aplicações e, ao mesmo tempo, um consumo elétrico mais baixo. Pressionada, a AMD foi obrigada a recuar, passando a competir com base no custo.

Não demorou para que começassem a surgir informações sobre o “Barcelona”, um processador quad-core nativo, destinado a suceder a plataforma K8. Para evitar trocadilhos a AMD decidiu pular o “K9” (que é o nome da conhecida unidade de cães farejadores), adotando o codenome K10.

O Barcelona acabou sendo efetivamente lançado em 2007, na forma dos Opteron quad-core, destinados a concorrer com os Xeon quad-core da Intel no ramo dos servidores. A versão para desktops veio um pouco depois, dando origem à família Phenom.

componentes internos do K10, com destaque para o cache L3 compartilhado:

É composto por 4 núcleos idênticos, cada um contendo seu próprio cache L1 (de 128 KB, dividido em dois blocos de 64 KB, para dados e instruções) e 512 KB de L2. Entre os processadores temos os circuitos referentes ao Crossbar Switch (o componente responsável por dividir as requisições entre os dois cores e controlar o acesso de ambos ao controlador de memória, entre outras funções) e outros circuitos de gerenciamento.

No centro temos o bloco referente ao controlador de memória (que é compartilhado por todos os núcleos) e do lado esquerdo temos o cache L3, também compartilhado pelos 4 núcleos. O Barcelona inclui também quatro links HyperTransport. Um é usado para a conexão com o chipset, enquanto os outros três ficam disponíveis para a comunicação com outros processadores, o que permite a criação de sistemas com dois ou até mesmo 4 processadores, cada um com 4 núcleos. Esta função não é usada nas versões para desktop, mas é uma das armas secretas da AMD nos servidores.

O Barcelona não é uma simples expansão do Athlon 64 X2, onde foram adicionados mais dois núcleos e o cache L3 compartilhado, de forma a produzir um sistema similar ao Quad-FX, porém composto de um único processador. Referido processador revela outras melhorias.

Além de adicionar os dois núcleos adicionais, a AMD fez um trabalho de aperfeiçoamento no X2, eliminando gargalos e adicionando novos recursos. A primeira mudança diz respeito ao processamento das instruções SSE, área onde o Conroe e os demais processadores baseados na plataforma Core superam o Athlon 64 por uma boa margem.

O problema fundamental da arquitetura K8 neste quesito é o fato de serem utilizadas unidades SSE de 64 bits. Isso faz com que instruções SSE de 128 bits precisem ser divididas e processadas na forma de duas instruções de 64 bits separadas, que consomem dois ciclos de clock.

Em comparação, o Conroe é equipado com unidades SSE de 128 bits, capazes de processar as instruções em um único ciclo. Embora isso tenha representado um grande aumento no volume de transistores do processador, a AMD conseguiu equilibrar a balança, também equipando o K10 com unidades SSE de 128 bits.

A ampliação das unidades SSE foi acompanhada também por melhorias no cache e nos decodificadores. O K8 era capaz de realizar duas transferências de 64 bits por ciclo do cache L1 para as unidades SSE, e os decodificadores de instruções eram dimensionados para alimentar as unidades de execução com 16 bytes de instruções por ciclo. No K10, as transferências do cache L1 para as unidades SSE passaram a ser de 128 bits e os decodificadores passaram a ser capazes de alimentar as unidades de execução com 32 bytes por ciclo, tudo dimensionado de forma a acompanhar a ampliação das unidades SSE. A AMD batizou esse conjunto de melhorias de “SSE128”.

Com relação ao acesso aos caches, o K10 continuou sendo inferior ao Penryn e ao Conroe, já que eles possuem caches muito maiores. Ao optar por utilizar um controlador de memória integrado no K8 e, em seguida, por utilizar uma arquitetura quad-core no K10, a AMD sacrificou um brutal número de transistores que de outra forma poderiam ser utilizados para incluir um grande cache L2, assim como nos processadores Intel (a AMD foi capaz de ampliar o cache apenas ao migrar para a técnica de 45 nanômetros, durante o desenvolvimento do Phenom II).

A principal arma do K10 contra as deficiências no cache é o controlador de memória integrado, que recebeu duas pequenas melhorias. Em primeiro lugar, em vez de um grande controlador de memória de 128 bits, que realiza acessos aos dois módulos de memória simultaneamente, ele passou a incluir dois controladores de 64 bits independentes. Isso representa uma pequena redução nos tempos de latência, pois duas leituras podem ser realizadas de forma independente, permitindo que sejam realizados dois acessos (de 64 bits) a endereços diferentes, ao invés de um único acesso (de 128 bits) a endereços sequenciais.

A versão inicial do K10 (usada no Phenom) inclui um controlador de memória DDR2, mas a versão usada no Phenom II foi atualizada com um controlador híbrido DDR2/DDR3 (na verdade dois controladores independentes e um circuito chaveador), que permite que o chip use memórias DDR2 ou DDR3, de acordo com a placa-mãe usada.

Outra melhoria foi uma expansão dos buffers do controlador de memória, desenvolvida para tirar melhor proveito dos bursts oferecidos pelos módulos DDR2 e DDR3. Basicamente, os módulos de DDR2 e DDR3 oferecem taxas de transferência muito mais altas, mas em compensação trabalham com tempos de latência relativamente altos, sacrificando parte dos ganhos. Ao invés de realizar várias operações de escrita separadas (tendo que arcar com um lento acesso inicial para cada uma delas), o controlador pode acumular um certo volume de dados e escrevê-los de uma vez em uma única rajada de operações de escrita. Isso permite que as operações de escrita tomem menos tempo, deixando mais ciclos livres para as operações de leitura.

Em seguida, temos as melhorias no funcionamento dos caches, que aumentaram sutilmente eficiência. Novos dados, selecionados pelo circuito de prefetch, são carregados diretamente para o cache L1, ao invés de passarem primeiro pelo cache L2, minimizando o tempo de acesso inicial. Nem todos os dados carregados pelo circuito de prefetch são úteis, já que ele trabalha tentando “adivinhar” de quais dados o processador precisará em seguida, mas o fato do processador possuir 128 KB de cache L1 permite que a AMD se dê ao luxo de armazenar alguns dados desnecessários de forma a acelerar o acesso aos demais.

Conforme novos dados são carregados, informações antigas vão sendo descartadas. Entretanto, em vez de serem apagadas, as informações são movidas para o cache L2 e em seguida para o cache L3 compartilhado, onde podem ser recuperadas rapidamente caso sejam necessárias mais tarde.

Ou seja, em vez de armazenar um grande volume de informações nos caches, como no caso dos processadores Intel, a AMD optou por usar um cache mais “fluído” onde é priorizado o tempo de acesso a novas informações. Combinadas com as melhorias no controlador de memória, este novo sistema acaba oferecendo um ganho de mais alguns pontos percentuais em relação ao desempenho dos Athlon X2.

Outro pequeno conjunto de melhorias foi feito no circuito de branch prediction, responsável por “adivinhar” qual caminho o processador deve seguir enquanto não conhece o resultado de operações de tomada de decisão. Além de ter ganhado um circuito aprimorado, capaz de calcular o resultado de derivações indiretas (assim como no Conroe), o histórico de operações tem o dobro da capacidade.

O histórico armazena os resultados de operações de tomada de decisão executadas anteriormente, informações que são usadas pelo circuito de branch prediction para prever o caminho mais provável para novas operações. Com um histórico maior, o circuito de branch prediction torna-se mais eficiente.

As “derivações indiretas” (indirect branches) são usadas em funções que envolvem diversas possibilidades, como ao usar funções “case” ou “switch” em que o programador estabelece diversas possibilidades, de acordo com o resultado de uma condição. Como era de se esperar, essas operações representam um desafio muito maior para o circuito de branch prediction do que as funções “if”, onde existem apenas duas possibilidades; mas prevê-las corretamente aumenta de forma considerável a eficiência do processador.

Fonte: http://www.amd.com/br/Pages/AMDHomePage.aspx; pt.wikipedia.org/wiki/AMD; http://www.hardware.com.br/guias/processadores-era-moderna/plataforma-k10.html

2011 02 09