Um resumo sobre os processadores de 64 bits

Um resumo sobre os processadores de 64 bits

Todos os processadores Intel e AMD, do 386 ao Athlon, são chamados genericamente de “processadores x86”, deixando claro que apesar de todas as diferenças de arquitetura, eles são compatíveis com o mesmo conjunto básico de instruções. É graças a isso que temos um número tão grande de softwares, acumulados ao longo de mais de duas décadas, que continuam funcionando nos PCs atuais. Com exceção da questão dos drivers, você poderia perfeitamente rodar o DOS e o Windows 3.11 em um Core 2 Duo, por exemplo.

Duas grandes limitações da plataforma x86 são o pequeno número de registradores e o suporte nativo a apenas 4 GB de memória RAM, limitação compartilhada por todos os processadores de 32 bits.

Os registradores são pequenos espaços de memória utilizados pelo processador para armazenar informações que serão usadas para processar a instrução seguinte. Você pode pensar nos registradores como uma espécie de “cache L0”. Eles estão muito próximos das unidades de execução do processador e por isso as informações podem ser acessadas imediatamente, mas em troca eles são incrivelmente limitados em tamanho. A arquitetura x86 prevê o uso de apenas 8 registradores, com 32 bits cada um. Ou seja, todos os registradores somados armazenam apenas 32 bytes de dados.

Não é possível adicionar mais registradores facilmente, pois softwares escritos para utilizarem os registradores adicionais não seriam mais compatíveis com os processadores antigos. A solução encontrada foi utilizar o recurso chamado “register renaming” onde o processador possui um número maior de registradores, mas apenas 8 são visíveis para os softwares. Os demais são gerenciados de forma dinâmica pelo processador, que vai chaveando entre eles conforme novas informações são necessárias. Essa técnica ameniza os problemas de desempenho causados pelo pequeno número de registradores, mas não soluciona a questão completamente.

Com relação à memória, o limite de 4 GB se tornou uma limitação séria em algumas áreas a partir da época do Pentium 1. A solução veio na forma do PAE (Physical Address Extension), um hack (originalmente desenvolvido pela Intel) que está disponível na maior parte dos processadores a partir do Pentium Pro. O PAE consiste numa segunda tabela de endereços, com 4 bits adicionais, que permitem endereçar 16 páginas de memória, cada uma com 4 GB.

Com o PAE, passa a ser possível endereçar até 64 GB de memória. A desvantagem é que o processador continua sendo capaz de acessar apenas 4 GB por vez e o chaveamento entre diferentes páginas de memória toma um certo tempo, o que acaba prejudicando bastante o desempenho. Ou seja, assim como no caso do register renaming, o PAE ameniza o problema, mas não o soluciona completamente.

A única forma de solucionar de vez as duas questões, assim como um conjunto de outros problemas comuns a todos os processadores de 32 bits, era desenvolver uma nova nova arquitetura, composta agora por processadores de 64 bits.

As primeiras questões que precisamos deixar claro é a definição do que são processadores de 64 bits e quais são as vantagens sobre os de 32. Processadores de 64 bits não são duas vezes mais rápidos nem processam (necessariamente) o dobro de dados por ciclo de clock. A grande vantagem dos processadores de 64 bits é que eles são capazes de trabalhar com endereços de memória de 64 bits, o que permite endereçar muito mais do que 4 GB de memória RAM. Temos também um aumento no tamanho dos registradores, que passam a armazenar 64 bits de informações, em vez de 32, o que representa um pequeno ganho de desempenho.

Outro benefício (embora menos significativo) é que eles são capazes de processar números inteiros de até 64 bits, ao invés de 32. Isto oferece ganhos de desempenho em algumas áreas específicas (como, por exemplo, softwares de encriptação e alguns aplicativos científicos) mas não ajuda muito nos aplicativos do dia-a-dia. Processadores de 32 bits podem processar números inteiros de 64 bits, mas eles precisam ser divididos em duas instruções separadas, o que naturalmente toma mais tempo.

Com relação ao processamento de números de ponto flutuante, não existe ganho, pois os co-processadores aritméticos utilizados nos processadores atuais já são capazes de processar números de ponto flutuante de 64 bits e vetores de 128 bits. Nestas duas áreas não existe um ganho direto, já que a transição foi feita há muito tempo.

A primeira tentativa de criar um sucessor de 64 bits para a plataforma x86 veio da Intel, que em 2001 lançou o Itanium, um processador de 64 bits destinado a servidores.

O Itanium quebrou a compatibilidade com a família x86, passando a utilizar o IA-64, um novo conjunto de instruções, desenvolvido a partir do zero. O plano inicial era popularizar a arquitetura primeiro nos servidores, onde os benefícios de um processador de 64 bits são mais evidentes, e em seguida, lançar também versões destinadas a desktops. O problema com o Itanium (além do processador ser muito caro) era que não existiam softwares capazes de se beneficiar da nova plataforma. Ele incluía um sistema de emulação, que permitia rodar softwares de 32 bits, mas neste caso o desempenho era muito ruim, o que eliminou qualquer possibilidade do uso em larga escala nos desktops.

As duas versões iniciais do Itanium (com o core Merced, produzido usando uma técnica de 180 nanômetros) operavam a 733 e 800 MHz. Elas foram seguidas pelas diferentes versões do Itanium 2 single-core (McKinley, Madison, Deerfield e Fanwood), que foram vendidas em versões de 900 MHz a 1.67 GHz e também pelo Montecito, que é uma versão dual-core, com 12 MB de cache L2, produzido usando uma técnica de 90 nm.

64bits_html_49078b52

Embora tenha obtido algum sucesso no ramo dos servidores, o Itanium logo se revelou um beco sem saída, devido à estagnação do desenvolvimento dos chips e da popularização dos processadores dual-core e quad-core produzidos usando técnicas mais avançadas. Mesmo para os adeptos do novo conjunto de instruções, faz pouco sentido pagar caro por um Itanium 2, se um Core 2 Quad é capaz de oferecer um desempenho consideravelmente superior.

Segundo o Gartner, foram vendidos apenas 55 mil servidores com o Itanium em 2007 (contra os vários milhões de servidores x86 vendidos anualmente) e em 2009 as vendas já haviam caído ainda mais.

A Intel continua produzindo o Itanium em pequenas quantidades e uma pequena equipe tem trabalho no desenvolvimento de novos modelos, incluindo o Tukwila, que será produzido usando uma técnica de 65 nm (obsoleta em relação aos Core 2 baseados no Penryn e ao Core i7, que já são produzidos usando a técnica de 45 nm) e herdará algumas das tecnologias estreadas no Core i7, como o controlador de memória integrado e o barramento PQI.

Apesar disso, o futuro da plataforma é incerto, já que o uso de técnicas obsoletas de fabricação (consequência do pequeno volume de vendas) limita o clock dos chips e anula qualquer potencial benefício da arquitetura. A menos que algo muito surpreendente aconteça, a tendência é que o Itanium continue definhando até ser finalmente descontinuado, assumindo seu lugar no rodapé das páginas da história.

Em vez de repetir o mesmo erro da Intel, lançando uma plataforma incompatível com os softwares já existentes, a AMD decidiu desenvolver um projeto mais simples, adicionando o suporte a instruções de 64 bits no Athlon (incluindo novos registradores, suporte a endereços de memória de 64 bits, etc.) sem entretanto quebrar a compatibilidade com os softwares de 32 bits, nem prejudicar o desempenho do processador ao executá-los.
Com isso chegaram a uma arquitetura de processadores de 64 bits, que desfruta de um número maior de registradores e maior capacidade de endereçamento de memória, mas que é capaz também de rodar aplicativos de 32 bits nativamente, sem perda de desempenho.

Este slide de apresentação da AMD mostra os novos registradores adicionados. Os 8 registradores x86 foram expandidos de 32 para 64 bits e foram adicionados 8 novos registradores de 64 bits, o que resultou em um espaço de armazenamento 4 vezes maior. Foram adicionados ainda 8 novos registradores para instruções SSE ou SSE2, mas neste caso não houve expansão, já que o SSE utiliza registradores de 128 bits:

64bits_html_m5c13a7ef

No modo “legacy”, o processador funciona como um processador x86 comum, executando instruções de 32 bits e utilizando apenas os registradores padrão. Ao mudar para o modo “long”, o processador tem acesso a 16 registradores de 64 bits cada um e passa a suportar as instruções e endereços de memória de 64 bits. O chaveamento entre os dois modos é feito de maneira muito rápida, o que permite ao processador executar aplicativos de 32 bits dentro de um sistema operacional de 64 sem um grande overhead.

O conjunto de instruções da AMD foi batizado de x86-64 (e posteriormente renomeado para AMD64) e acabou sendo adotado também pela Intel, na forma do EM64T, um conjunto compatível, incluído sem muito alarde a partir do Pentium 4 com core Prescott. Pela primeira vez na história, a AMD ditou o novo padrão e a Intel se viu obrigada a segui-lo.
O grande mérito do x86-84 foi o e possibilitar uma migração suave, permitindo que os sistemas de 32 bits continuassem sendo utilizados nos primeiros anos, até que as limitações no acesso à memória começassem a se tornar um problema.

Ao usar as versões de 32 bits do Windows ou Linux em par com aplicativos de 32 bits, o processador não utiliza os novos registradores ou outras melhorias incluídas no novo conjunto de instruções, mas isso tem um efeito pequeno sobre o desempenho. A principal limitação é que operando em modo de 32 bits o processador não é capaz de endereçar mais do que 4 GB de memória, o que limita o uso às configurações mais básicas.

A segunda possibilidade é utilizar um sistema operacional de 64 bits. Neste caso, você tem um pequeno ganho de desempenho devido ao uso dos novos registradores e o processador passa a suportar mais de 4 GB de memória RAM. A maior parte dos aplicativos não exibe grandes ganhos de desempenho ao serem recompilados para rodarem em modo 64 bits, mas alguns (sobretudo bancos de dados) podem obter 15 ou mesmo 20% de ganho de desempenho em alguns casos.

Embora no início tenham existido muitos problemas (sobretudo em relação aos drivers), as versões de 64 bits das distribuições Linux, assim como do Windows Vista e Windows 7 já estão bastante maduras, o que torna a migração bastante suave, desde que você não tenha periféricos antigos cujos drivers existam apenas em versão de 32 bits.

No caso dos aplicativos, a solução é mais simples, já que é possível executar aplicativos de 32 bits lado a lado com os aplicativos de 64 bits. Existe um certo overhead em executar aplicativos de 32 bits sobre um sistema de 64 bits, pois o sistema precisa de mais memória para manter carregadas as bibliotecas de legado, mas o desempenho do processador não é prejudicado. Existem casos de incompatibilidades com aplicativos específicos, mas eles estão se tornando cada vez mais raros.

Como vimos, os aplicativos de 32 bits podem utilizar apenas 4 GB de memória (que na prática acabam se transformando em apenas 3 ou 3.5 GB devido aos endereços reservados aos dispositivos). Um efeito colateral interessante é que, em um PC com 8 GB de memória, por exemplo, os aplicativos de 32 bits enxergarão e utilizarão apenas os primeiros 4 GB. A memória adicional poderá ser usada pelo sistema operacional e aplicativos de 64 bits, mas não ajudará muito em casos em que os aplicativos de 32 bits sejam os aplicativos principais.
Com relação à memória, os processadores AMD64 são capazes de endereçar até 1 terabyte de memória física, o que corresponde a 40 bits de endereços. Os 64 bits completos não são usados por questões relacionadas ao desempenho, já que não existem módulos e placas que permitam utilizar tanta memória atualmente.

Apesar de o AMD64 reservar “apenas” 40 bits para o endereçamento da memória física, estão disponíveis 48 bits de endereçamento para o virtual address space, o que permite endereçar até 256 terabytes. Esse limite não tem apenas a ver com o uso de memória swap, mas indica o volume total de memória que o processador é capaz de endereçar, incluindo não apenas a memória RAM, mas também a memória da placa de vídeo (e outros dispositivos) e está relacionado também com o suporte a arquivos grandes, como bancos de dados. Você poderia imaginar esses dois limites em ação no caso de um grande servidor, com muita memória RAM e diversos HDs em RAID, que armazenam um grande banco de dados.

Quando criamos um array RAID, o sistema passa a enxergar um único e grande disco, ao invés de vários HDs separados, de forma que podemos usar todo o espaço somado para armazenar um único e gigantesco arquivo. Com o sistema de endereçamento do AMD64, o nosso hipotético servidor poderia ter até 1 TB de memória RAM, e o sistema operacional seria capaz de gerenciar um banco de dados de até 256 TB espalhado pelos diversos HDs, sem que fosse necessário recorrer a truques para aumentar o espaço de endereçamento, como é necessário ao acessar mais do que 4 GB de RAM, ou gerenciar arquivos maiores do que 4 GB em um processador de 32 bits.

Quando esse limite se tornar um empecilho, daqui a mais alguns anos, novas revisões dos processadores podem estender os limites de endereçamento para 56 ou mesmo 64 bits completos, permitindo gerenciar volumes virtualmente ilimitados de endereços.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X