AMD 64 bits : Evolução ou Revolução?
Introdução > Porquê 64 bits? > Vantagens > Desvantagens > Conclusão > Bibliografia / Links

• Porquê 64 bits?


Porquê a adopção de um endereçamento de 64 bits do processador em relação aos anteriores 32 bits dos anteriores processadores de arquitectura x86?


__A necessidade de um processador de 64 bits é muitas vezes questionada, pelo menos no mercado de consumo, visto que actualmente já existem várias soluções de 64 bits para servidores e estações de trabalho (workstations). Além disso, a AMD quer posicionar agressivamente este processador como uma alternativa tanto aos processadores Intel Xeon (baseados no Pentium-4, IA-32) na vertente de estações de trabalho e servidores de entrada de gama, como aos processadores Intel Itanium (IA-64), a aposta da Intel para a computação de topo da próxima geração.

__Para obter uma resposta a esta interrogação acerca da necessidade deste produto da AMD, precisamos primeiro de entender a que se referem estes 64 bits do processador Opteron, e qual o seu lugar no mercado de hoje em dia.

__No diagrama ao lado, é possível ver uma pequena história dos processadores x86, que foram introduzidos em 1979 pela Intel na forma dos processadores 8086/8088 (a diferença entre estes dois processadores é o tamanho do bus de dados, que no 8086 é de 16 bits e no 8088 de 8; podendo parecer insignificante, a diferença de custo era significativa na altura, e daí a escolha pela IBM do 8088 para a introdução do IBM PC, que se tornou no sucesso que hoje conhecemos). É importante referir que a maioria dos computadores pessoais de hoje em dia se baseiam numa arquitectura com mais de 20 anos! Na indústria tecnológica, 20 anos é uma idade muito respeitável, e devido a todas as evoluções tecnológicas que os processadores x86 foram sofrendo, tendo de manter a compatibilidade com o passado, advém uma herança pesada.

O pesadelo do modelo de programação x86 (e x87, para cálculos de vírgula flutuante) já é discutido quase desde a introdução destes processadores, havendo por isso muita polémica acerca da aposta da AMD em perpetuar esta arquitectura por mais tempo ainda; uma das justificações da Intel (a própria empresa responsável pela arquitectura x86) para introduzir os processadores Itanium, é justamente "enterrar" estes processadores pré-históricos, que dão pesadelos tanto aos programadores como aos próprios desenhadores de circuitos da Intel e outras empresas que fabricam processadores compatíveis com a ISA (Instruction Set Architecture) x86.

Genericamente, quando falamos de processadores de 16 bits, 32, etc., estamos a referir-nos à largura do caminho de dados do processador. Mais especificamente, quando falamos de processadores de 64 bits, estamos a referir-nos a processadores nos quais cada um dos registos tem espaço de armazenamento para 64 bits de dados; da mesma forma, uma instrução de 64 bits é uma instrução que opera em números de 64 bits.

No diagrama acima, os quadrados negros representam pedaços de código e os quadrados brancos representam dados.
Nem todos os dados na memória, cache ou registos são de 64 bits - este valor é o máximo de cada bloco de dados. Também é de salientar que, apesar de a largura do caminho de dados ter duplicado, a largura do caminho de código permanece inalterada. Tendo em conta que este diagrama é apenas um exemplo de um processador hipotético, é de realçar que é teoricamente possível manipular dados de 64 bits com os mesmos opcodes de um processador de 32 bits (não é esse o caso com o processador da AMD). Para sustentar o aumento da largura do caminho de dados, é necessário igualmente a duplicação dos caminhos de dados internos e do tamanho dos registos do processador.

Os registos do processador simples de 64 bits ilustrado em cima têm o dobro da dimensão dos do processador de 32. De igual modo, o Program Counter (PC) tem também uma dimensão duas vezes superior. No entanto, o Instruction Register mantém o seu tamanho - é necessário realçar de novo que neste processador hipotético, aumentámos a largura do caminho de dados mas não a do caminho de código.

O que eventualmente se tornou na actual ISA x86, introduzida em 1979 com o lançamento do processador 8086 da Intel, passou de 8 bits (dos antecessores dos 8086/8088, os 8080/8085) para 16 bits e finalmente 32 bits. O 8086 possuía 4 GPR's (General Purpose Registers - registos de uso geral), cada um de 16 bits, e 4 registos de 16 bits para conter endereços de memória, mas que podiam ser utilizados como GPR's (os 4 GPR's, no entanto, não podiam ser utilizados para armazenar endereços de memória no modo de endereçamento de 16 bits).

Com o lançamento do processador 80386, a Intel aumentou a arquitectura para suportar 32 bits; para tal duplicou o tamanho dos 8 registos de 16 bits originais. Para aceder à porção extendida destes registos, os programadores de assembly utilizavam um conjunto diferente de mnemónicas.

Com a introdução da arquitectura AMD64, passou-se algo semelhante: a AMD duplicou o tamanho dos 8 GPR's e atribui novas mnemónicas aos registos extendidos.

Ao aumentar de 32 para 64 o número de bits que a ALU e os registos suportam, e tendo em conta que os endereços de memória não passam de números inteiros e são armazenados nos registos, é possível endereçar mais memória: 232 bits = 4.294.967.296 bytes; 264bits = 18.446.744.073.709.551.616 bytes.

É claro que a quantidade de memória que é teoricamente possível endereçar não corresponde necessariamente à sua implementação prática. Uma arquitectura teórica com um espaço de endereçamento de 64 bits poderia endereçar de modo directo até um máximo 18 milhões de terabytes.

A implementação da AMD quebra a barreira dos 4 GBytes de memória física endereçável do modo 32 bits dos processadores x86 actuais (até 4 Gbytes, que não são atingidos na prática, excepto com sistemas operativos mais recentes), permitindo endereçar directamente até 1024 GBytes de memória física (são utilizados 40 bits para o endereçamento nestes processadores, e não 64: 240 bits = 1.099.511.627.776 bytes) e uns incríveis 256 TBytes (48 bits) de memória virtual.

Em abono da verdade, é bom salientar que existem sistemas baseados no processador Intel Xeon que permitem o endereçamento de mais de 4 Gbytes de memória, e além disso, existe aparentemente um "truque" relativamente fácil de implementar que permitiria à Intel endereçar até 512 GBytes nos seus sistemas de 32 bits. No entanto, o método mais "limpo" e com menos implicações futuras é de facto aumentar o tamanho dos ponteiros de memória.

E quais são as vantagens de se poder endereçar mais memória e de se poderem realizar cálculos com números de 64 bits?

• A inserção de bases de dados de grande dimensão na sua totalidade na memória é uma possibilidade. A intenção de o fazer já foi expressa por algumas entidades, que não levam em conta considerações financeiras enquanto factor inibidor de uma solução tecnológica, e que desejam obter o máximo desempenho nas suas aplicações.
• Utilizadores de software de imagem, modelação 3D, simulação, CAD e até jogadores de jogos 3D em tempo real, obcecados em obter o melhor desempenho possível, estão também interessados na memória extra que é possível utilizar e no desempenho acrescido que soluções de 64 bits permitem obter.

• Finalmente, existe uma outra aplicação para a qual a utilização de números inteiros de 64 bits pode oferecer verdadeiros benefícios: criptografia. A maioria das tecnologias de encriptação mais populares assenta na multiplicação e factorização de números inteiros muito grandes, e quanto maior for o número maior será a segurança. A AMD espera que o aumento da procura de segurança mais apertada e a crescente utilização de técnicas de encriptação nos mercados informáticos empresariais e domésticos torne atractivo um processador de 64 bits compatível com x86.

Uma desvantagem da utilização de valores de endereçamento de memória de 64 bits é que, como estes endereços têm o dobro do tamanho físico dos de 32 bits, ocupam também o dobro do tamanho que ocupam na cache (para não falar do aumento no tamanho do código em disco, mas esse aspecto é algo insignificante com o aumento constante do espaço de armazenamento). Mesmo tendo em conta que os ponteiros para memória ocupam uma fracção pequena da cache, quando essa fracção duplica, o que impede que outros dados mais úteis estejam presentes na cache, o que pode diminuir o desempenho.

Um dos problemas mais antigos acerca da arquitectura x86 é a de que o modelo de programação contempla apenas 8 GPR's, 8 FPR's (Floating Point Registers: registos de vírgula flutuante) e 8 registos para SIMD (Single Instruction, Multiple Data) . Todos os ISA's RISC (Reduced Instruction Set: conjunto de instruções reduzidas) mais recentes suportam muito mais registos arquitecturais. Por exemplo, a ISA PowerPC especifica a inclusão de 32 unidades de cada tipo de registo. O aumento do número de registos permite ao processador armazenar mais dados onde as unidades de execução podem aceder directamente, o que se traduz numa redução do número de instruções load e store, o que por sua vez implica menor tráfego nos subsistemas de memória, o que implica por sua vez a diminuição do tempo de espera no carregamento de dados, e por aí em diante. Mais registos permitem também uma maior flexibilidade para o escalonamento de instruções, originando menos dependências e minimização das bubbles nas pipelines.
Os processadores x86 modernos dão a volta a este problema através de um truque denominado de renomeação de registos (register renaming): este truque consiste em incluir registos internos escondidos no processador, e através de mapeamento dinâmico, mapear os registos acessíveis ao programador aos registos escondidos, vísiveis apenas para o processador. O Pentium 4, por exemplo, contém 128 registos destes, o que permite armazenar mais dados próximos da ALU (Arithmetic and Logic Unit: unidade de execução de operações aritméticas e lógicas, uma das principais unidades de execução do processador), e reduzir dependências. No entanto, destes 128, apenas 8 são vísiveis para o programador ou compilador, sendo os outros 120 vísiveis apenas para os circuitos lógicos internos do processador, o que relega para o hardware a responsabilidade de optimizar o seu uso durante a execução.

Apesar deste truque, seria benéfico que mais registos fossem directamente acessíveis para o programador através da ISA x86. Isto daria ao compilador ou ao programador de assembly mais flexibilidade e controlo para uma optimização estática do código. Também permitiria uma diminuição do número de instruções de acesso à memória.

A AMD, ao aumentar a ISA x86 para 64 bits, aproveitou a oportunidade para duplicar o número de GPR's e registos SIMD acessíveis através da ISA x86-64. Assim, ao correr no modo de 64 bits, os programadores vão ter acesso a 8 GPR's adicionais, além dos 8 registos SIMD (utilizados em instruções SSE e SSE2)

É importante referir que o stack x87 não foi modificado. Esta decisão advém da política tanto da AMD como da Intel em encorajar os programadores a utilizador a tecnologia SSE/SSE2 para cálculos de vírgula flutuante, para tentar abandonar o modelo x87, um modelo com muitas insuficiências, tanto ao nível de prestações como dificuldade de programação.

É importante referir que a simples duplicação do tamanho dos registos e a possibilidade de realizar cálculos com números de 64 bits (sem ter de os dividir em 2 subnúmeros, o que é feito para realizar cálculos de 64 bits em processadores de 32) não aumenta magicamente a velocidade de um sistema como fazem crer a algumas pessoas menos informadas! Um processador em que apenas fossem implementadas estas adições teria vantagem de performance em relação a um sistema de 32 bits somente na execução de código e de cálculos de 64 bits. Mas as novidades dos processadores da AMD não se resumem aos 64 bits; com o lançamento do Opteron foi definida uma plataforma e não apenas um mero circuito integrado. De seguida serão abordadas algumas das inovações que fazem parte da tecnologia AMD64.

Seguinte : Vantagens >


© 2003 João Pedro Alves FerreiraLuis Filipe Barreto Ribeiro IntroduçãoPorquê 64 bits?VantagensDesvantagensConclusãoBibliografia