Por Dentro da Arquitetura AMD64
Por Gabriel Torres e Cássio Lima em 22 de maio de 2006
Introdução
Neste tutorial explicaremos como a arquitetura AMD64 – que é usada pelos processadores Athlon 64, Athlon 64 X2, Athlon 64 FX, Opteron, Turion 64 e alguns modelos de Sempron – funciona em uma linguagem clara e objetiva. Você aprenderá exatamente como esta arquitetura – também chamada K8 ou Hammer – funciona e poderá compará-la com as arquiteturas rivais da Intel.
Para uma melhor compreensão deste tutorial, sugerimos que você leia antes o tutorial Como os Processadores Funcionam, onde explicamos o funcionamento básico de um processador e onde você encontrará muitos dos conceitos aqui apresentados. Na verdade, podemos considerar o presente tutorial como uma seqüência de nosso tutorial Como os Processadores Funcionam. Você também pode ler sobre a arquitetura de outros processadores e comparar a arquitetura da AMD com a da Intel: Por Dentro da Arquitetura do Pentium 4, Por Dentro da Arquitetura do Pentium M e Por Dentro da Microarquitetura Intel Core.
A diferença principal entre a arquitetura AMD64 e a de outros processadores – incluindo os processadores mais antigos da AMD, como o Athlon XP e o Athlon original – é que o controlador de memória está embutido dentro do processador, e não no chip ponte norte da placa-mãe. Em placas-mãe voltadas para os processadores baseados na arquitetura AMD64 o chip “ponte norte” funciona simplesmente como uma ponte entre o processador, o barramento gráfico (AGP ou PCI Express) e o chip ponte sul. Como o controlador de memória não está mais no chip ponte norte, fica muito mais simples de desenvolvê-lo e alguns fabricantes de chipsets têm modelos de chipsets com apenas um único chip para processadores utilizando a arquitetura AMD64.
Como o controlador de memória está embutido no próprio processador, as capacidades de memória do sistema – incluindo o tipo suportado e o suporte à tecnologia dual channel – são definidas pelo processador e não pelo chip ponte norte (ou seja, pela placa-mãe), como acontece com processadores baseados em outras arquiteturas. É interessante notar que placas-mãe para processadores AMD64 não apresentam uma diferença de desempenho significativa entre elas, visto que todas elas utilizam o mesmo controlador de memória (o que está embutido no processador). Esta afirmativa é válida apenas para placas-mãe sem vídeo on-board, já que o controlador de vídeo fica fora do processador e o seu desempenho varia dependendo do controlador de vídeo utilizado.
Na Figura 1 você pode ver a arquitetura usada por outros processadores, enquanto que na Figura 2 você pode ver a arquitetura usada pelos processadores AMD64.
clique para ampliar
Figura 1: Arquitetura usada por outros processadores.
clique para ampliar
Figura 2: Arquitetura usada pelos processadores AMD64.Nós podemos dizer que o chip ponte norte está embutido no processador. Na placa-mãe você encontrará um chip ponte, que fará a comunicação entre o barramento HyperTransport (isto é, o processador), o barramento da placa de vídeo (AGP ou PCI Express x16) e o chip ponte sul. Pode ocorrer dos fabricantes de chipsets integrarem o chip ponte e o chip ponte sul em um único chip. Isto é o que os fabricantes chamam de “solução em um único chip”.
O controlador de memória embutido nos processadores AMD64 pode acessar até quatro módulos de memória por canal. Portanto, em um sistema de dois canais (dual channel) você pode instalar oito módulos de memória. O número de soquetes disponíveis na placa-mãe é limitado pelo fabricante da placa.
Barramento HyperTransport e Multiprocessamento
A comunicação entre os processadores AMD64 e o chip ponte é feita através de um barramento chamado HyperTransport. A velocidade deste barramento depende do modelo do processador. Valores típicos são 3.200 MB/s (também chamado “800 MHz”, “1.600 MHz” ou “6.400 MB/s”) ou 4.000 MB/s (também chamado “1.000 MHz”, “2.000 MHz” ou “8.000 MB/s”). Para uma maior compreensão do barramento HyperTransport, leia nosso tutorial sobre o assunto.
Os processadores AMD64 podem ter mais de um barramento HyperTransport. Enquanto que todos processadores AMD64 voltados para o mercado de notebooks e usuários domésticos – Athlon 64, Athlon 64 FX, Athlon 64 X2, Sempron e Turion 64 – têm apenas um barramento HyperTransport, os processadores AMD64 voltados para o mercado de servidores e estações de trabalho – Opteron – podem ter mais de um barramento HyperTransport.
Os processadores Opteron da série 1xx não suportam multiprocessamento simétrico (SMP) e têm apenas um barramento HyperTransport. Você pode ver o funcionamento dos processadores Opteron desta série na Figura 2. Os processadores Opteron da série 2xx suportam SMP com até dois processadores e têm dois barramentos HyperTransport. Processadores Opteron da série 8xx suportam SMP com até oito processadores e têm três barramentos HyperTransport. Esses barramentos extras são usados para conectar os processadores, como você pode ver nas Figuras 3 a 5.
clique para ampliar
Figura 3: Processadores Opteron da série 2xx ou 8xx em uma configuração de multiprocessamento com dois processadores.
clique para ampliar
Figura 4: Processadores Opteron da série 8xx em uma configuração de multiprocessamento com quatro processadores.
clique para ampliar
Figura 5: Processadores Opteron da série 8xx em uma configuração de multiprocessamento com oito processadores.O modo com que a AMD implementou o multiprocessamento é muito interessante. Como cada processador tem o seu próprio controlador de memória, cada processador acessa seus próprios módulos de memória. Por exemplo, em um servidor com quatro processadores Opteron com 4 GB de memória RAM, cada processador tem 1 GB de memória disponível exclusivamente para si. Em um servidor baseado no processador Xeon, por exemplo, os 4 GB seriam compartilhados por todos os processadores. Além disso, como cada processador pode acessar até quatro módulos de memória por canal, o servidor com quatro processadores mostrado na Figura 4 poderia acessar diretamente até 32 módulos de memória (oito por processador). O fabricante da placa-mãe, no entanto, é quem define o número de soquetes disponíveis na placa-mãe. Dizer que um servidor com quatro processadores Opteron pode acessar até 32 módulos de memória não significa que a placa-mãe terá 32 soquetes de memória. Como dissemos, quem determina a quantidade de soquetes é o fabricante da placa-mãe.
O “E/S” (entrada/saída) mostrado nas figuras acima pode representar qualquer tipo de ponte: pode ser um chip ponte sul; pode ser uma ponte AGP ou PCI Express x16 para placas de vídeo; pode ser um barramento PCI-X ou PCI Express de uso geral para placas de expansão; etc.
Na Figura 6 vemos como os barramentos HyperTransport são conectados dentro do processador. Os processadores AMD64 têm um “Crossbar”, que é o responsável por encaminhar dados e comandos de e para o processador, memória e barramentos HyperTransport. A Interface de Pedidos do Sistema (SRI, System Request Interface) é também conhecido como Fila de Pedidos do Sistema (SRQ, System Request Queue), enquanto que APIC significa Controlador de Interrupção Programável Avançado. O diagrama considera um processador de núcleo duplo.
clique para ampliar
Figura 6: Como os barramentos HyperTransport são conectados dentro do processador.Soquetes
Os processadores AMD64 estão disponíveis em diferentes tipos de soquete. Você deve usar uma placa-mãe com o mesmo tipo de soquete do seu processador. Diferentes tipos de soquetes existem por causa das diferentes especificações do controlador de memória. Até o momento você pode encontrar processadores AMD64 usando os seguintes tipos de soquete:
- Soquete 754: Controlador de memória DDR de canal único, ou seja, o controlador de memória acessa a memória a 64 bits por vez. Usado pelos primeiros processadores Athlon 64, pelo Turion 64 e por modelos de Sempron soquete 754.
- Soquete 939: Controlador de memória DDR de dois canais, ou seja, o controlador de memória pode acessar a memória a 128 bits por vez. Usado pelos atuais modelos de Athlon 64, Athlon 64 X2, Athlon 64 FX e alguns modelos de Opteron da série 1xx.
- Soquete 940: Controlador de memória DDR de dois canais com esquema de correção de erros ECC, ou seja, requer memórias to tipo ECC. Usado pelos processadores Opteron e pelos primeiros modelos de Athlon 64 FX.
- Soquete AM2: Controlador de memória DDR2 de dois canais. Será usado pelos futuros modelos do Athlon 64, Athlon 64 X2 e Athlon 64 FX.
Na figuras abaixo você pode ver a diferença física entre o soquete 754 e 939, que são os tipos mais comuns de soquete para processadores AMD64.
clique para ampliar
Figura 7: Um processador soquete 754.
clique para ampliar
Figura 8: Um processador soquete 939.
clique para ampliar
Figura 9: Soquete 754.
clique para ampliar
Figura 10: Soquete 939.Principais Características da Arquitetura AMD64
Quando a arquitetura AMD64 foi lançada junto com o Athlon 64, ela trouxe um modo de operação de 64 bits para as instruções x86. Este modo é chamado de x86-64 pela AMD e o que ele faz é expandir os registradores de 32 bits existentes em registradores de 64 bits. Todos os processadores AMD64 têm dezesseis registradores de propósito geral de 64 bits quando operando no modo x86-64. Neste modo o barramento de endereço do processador também é expandido de 32 para 40 bits, habilitando o processador para acessar diretamente até 1 TB de memória RAM (2^40). Além disso, neste modo de operação o processador pode acessar até 256 TB de memória virtual (2^48). A memória virtual é uma técnica que permite ao processador simular mais memória RAM do que realmente existe instalada no micro, criando um arquivo no disco rígido chamado arquivo de troca.
A Intel copiou todas essas características e por isso elas não são mais exclusivas da AMD. No entanto, enquanto todos os processadores AMD64 suportam o modo x86-84 (a exceção fica por conta dos primeiros processadores Sempron soquete 754), nem todos os processadores atuais da Intel suportam esta característica.
Para usar este modo, no entanto, é necessário rodar um sistema operacional de 64 bits. Não espere acessar mais do que 4 GB de memória RAM com um Athlon 64 trabalhando no Windows XP, por exemplo, já que esse sistema operacional roda no modo de 32 bits. Para mais detalhes sobre o modo de 64 bits, leia nosso tutorial sobre o assunto.
Como você pode notar, o controlador de memória da arquitetura AMD64 suporta as tecnologias DDR ou DDR2. A tecnologia DDR (Taxa de Transferência Dobrada) permite que dois dados sejam transferidos por pulso de clock. Por isso, quando um Athlon 64 com memórias DDR400/PC3200 é utilizado, o processador acessa a memória a 200 MHz e não a 400 MHz (memórias DDR e DDR2 são rotuladas com o dobro do clock real que elas utilizam).
Todos os processadores AMD64 têm 64 KB de cache L1 de instruções e 64 KB de cache L1 de dados. O cache de memória L2 varia de acordo com o modelo do processador. Em processadores de dois núcleos o cache L2 é separado, ou seja, cada núcleo tem seu próprio cache de memória L2. Nos novos processadores da Intel (Core Duo e Core 2 Duo), o processador tem apenas um cache de memória L2 que é compartilhado entre os núcleos (a Intel afirma que esta técnica de cache compartilhado aumenta o desempenho do processador).
Pipeline da Arquitetura AMD64
Pipeline é uma lista de todos os estágios que uma dada instrução precisa percorrer para ser executada. A arquitetura AMD64 utiliza um pipeline de 12 estágios para executar instruções inteiras e 17 estágios para executar instruções de ponto flutuante. Por isso, para uma dada instrução ser executada nos processadores AMD64 ela precisa passar por 12 ou 17 estágios. A arquitetura anterior da AMD – K7, que era usada pelo processador Athlon original, Athlon XP e alguns modelos de Sempron – tinha um pipeline de 10 estágios. O pipeline do Pentium 4 tem 20 estágios e o pipeline do Pentium 4 “Prescott” tem 31 estágios. Os futuros processadores da Intel Core 2 Duo terão um pipeline com 14 estágios.
Vamos estudar o pipeline de execução de instruções de números inteiros da arquitetura AMD64, que é baseado no pipeline da arquitetura K7. A principal diferença entre eles é o estágio do decodificador que, na arquitetura AMD64, foi quebrado em diferentes estágios, provavelmente para permitir que processadores AMD64 atingissem clocks mais elevados.
clique para ampliar
Figura 11: Pipeline para execução de instruções de números inteiros da arquitetura AMD64.Aqui está um resumo do que cada estágio faz, o que explica como uma dada instrução é processada pelo processador baseado na arquitetura AMD64. Se você achar isto complicado, não se preocupe. Falaremos mais detalhadamente sobre cada estágio nas próximas páginas.
Busca: Busca instruções do cache L1 de instruções em grupos de 16 bytes (128 bits). Esta etapa é dividida em dois estágios. O segundo estágio também é chamado de “Trânsito”, já que sua principal operação é mover dados dentro do processador (similar ao estágio “Drive” disponível no Pentium 4).
- Pega: Neste estágio os 128 bits enviados pela unidade de busca são armazenados em um buffer. Como as instruções x86 não têm tamanho fixo, neste estágio o processador procura e separa as instruções presentes no buffer. É nesse estágio também que é decidido para qual decodificador a instrução x86 será enviada: para um decodificador simples (e rápido), usado para instruções x86 comuns e que são convertidas em apenas um ou dois macro-ops, ou para um decodificador complexo (lento), usado por instruções x86 que são convertidas em vários macro-ops. Este estágio também é conhecido como “procura” (“scan”).
- Decodificador: Aqui as instruções x86 são convertidas em macro-ops que o núcleo do processador pode entender. Esta etapa demora dois estágios.
- Empacotamento: Aqui, pares de macro-ops decodificados são fundidos em um único macro-op.
- Empacotamento/Decodificação: Mais algumas decodificações são feitas aqui antes dos macro-ops serem enviados para a Unidade de Controle de Instruções (que é a mesma coisa do Buffer de Reordenamento presente nos processadores da Intel).
- Envio: Os macro-ops são enviados para o agendador apropriado neste estágio.
- Agendamento: Os macro-ops são agendados para serem executados em um dos agendadores do processador.
- UGE/ULA: As instruções são executadas.
- Cache de Dados: Os dados gerados pela unidade de execução são enviados para o cache L1 de dados, os registradores originais são restaurados e a instrução é marcada como “executada” no buffer de reordenamento. Esta etapa é equivalente à etapa de retirada dos processadores da Intel.
Cache de Memória e Unidade de Busca
Na arquitetura AMD64 o caminho de dados entre o cache de memória L2 e o cache L1 de dados é de 128 bits. Nos processadores Intel de 7ª geração (Pentium 4) este caminho de dados é de 256 bits e nos processadores Intel de 6ª geração (Pentium Pro, Pentium II, Pentium III e Pentium M) este caminho de dados é de 64 bits.
clique para ampliar
Figura 12: Unidade de busca da arquitetura AMD64.O cache L1 de instruções dos processadores AMD64 possui uma lógica de pré-decodificação, ou seja, cada byte armazenado no cache L1 de instruções tem alguns bits para marcar o início e o fim de cada instrução. Como as instruções x86 não têm tamanho fixo (elas pode ter qualquer tamanho entre um e 15 bytes*), o processo de detectar onde cada instrução começa e termina é muito importante para o decodificador do processador.
* Você pode ficar um pouco perdido com esta afirmação, já que você sempre escutou que a arquitetura x86 usa instruções de 32 bits (ou seja, 4 bytes), portanto uma explicação mais aprofundada é necessária para um maior entendimento.
Dentro do processador o que é considerado uma instrução é o opcode da instrução (o equivalente em linguagem de máquina da instrução em linguagem assembly), mais todos os dados requeridos. Isto ocorre porque a instrução deve entrar na unidade de execução “completa” de modo a ser executada, isto é, junto com todos os dados requeridos. Além disso, o tamanho do opcode de cada instrução x86 é variável e não fixo em 32 bits, como você poderia imaginar. Por exemplo, uma instrução do tipo mov eax, (dado de 32 bits), que armazena um dado de 32 bits no registrador EAX é considerada internamente como uma instrução de 40 bits (mov eax é traduzida em um opcode de 8 bis mais os 32 bits de seu dado). Na verdade, ter instruções com diferentes comprimentos é o que caracteriza um conjunto de instruções CISC (Complex Instruction Set Computing, computação usando um conjunto de instruções complexo).
Caso você queira aprender mais sobre este assunto, leia AMD64 Architecture Programmer’s Manual Vol. 3: General Purpose and System Instructions.
O cache L1 de instruções fornece 76 bits extras para a unidade de busca: 52 bits de marcação de pré-decodificação, oito bits de paridade e 16 bits seletores de desvio. Os bits seletores de desvio são usados pelo processador para tentar adivinhar os desvios no programa em execução.
Na realidade o cache L1 de instruções é maior do que os 64 KB anunciado, já que ele armazena informações de pré-decodificação e de desvio. Na verdade, o tamanho real do cache L1 de instruções da arquitetura AMD64 é de 102 KB (64 KB cache de instrução + 4 KB paridade + 26 KB dados de pré-decodificação + 8 KB dados de desvio).
O buffer de destino de desvio (BTB, Branch Target Buffer) na arquitetura AMD64 tem 2.048 entradas. O BTB é uma pequena memória que lista todos os desvios identificados no programa. O BTB do Pentium 4 é de 4.096 entradas enquanto que nos processadores de 6ª geração da Intel este buffer é de 512 entradas.
Um outro registrador de desvio, BHT (Tabela de Histórico de Desvios) – que a AMD chama GHBC (Global History Bimodal Counter, contador histórico bimodal global) – tem 16.384 entradas na arquitetura AMD64, enquanto que no Pentium 4 esse registrador é de 4.096 entradas, o mesmo tamanho do BHT encontrado na arquitetura AMD K7. Este registrador de dois bits é usado para identificar desvios condicionais: “certamente tomado”, “tomado”, “não tomado” e “certamente não tomado”.
Decodificador
Os processadores da AMD utilizam uma arquitetura híbrida CIS/RISC desde seus processadores de 5ª geração. A Intel começou usar esta idéia apenas a partir de seus processadores de 6ª geração. O processador deve aceitar instruções CISC, também conhecidas como instruções x86, já que todos os programas disponíveis hoje são escritos usando este tipo de instruções. Um processador genuinamente RISC não pode ser usado em PCs porque ele não seria capaz de rodar os programas que temos disponíveis hoje, como o Windows e Office.
Assim, a solução usada por todos os processadores disponíveis no mercado hoje tanto da Intel quanto os da AMD é usar um decodificador CISC/RISC. Internamente o processador executa instruções RISC, mas aceita apenas instruções CISC x86.
As instruções CISC x86 são conhecidas como “instruções” enquanto que as instruções RISC são conhecidas como “microinstruções”, “µops” ou “ROP”. A arquitetura AMD64 tem um terceiro tipo de instrução, chamada macro-op ou “MOP”, que é a instrução resultante do decodificador de instrução. A arquitetura AMD64 trata internamente com macro-ops. Quando a macro-ops chega no agendador apropriado, ela é então decodificada em microinstruções e então essas microinstruções são executadas. Se você prestar atenção, isto é parecido com o que a Intel está fazendo em sua nova arquitetura Core, com seu recurso de macro fusão. No entanto, enquanto que a macro fusão nos processadores baseados na arquitetura Core trabalham apenas com instruções condicionais, na arquitetura AMD64 o uso de macro-ops é feito para todas as instruções.
As microinstruções RISC, no entanto, não podem ser acessadas diretamente e não podemos criar programas baseados neste tipo de instruções e enviá-las para o decodificador. Além disso, cada processador utiliza suas próprias instruções RISC, que não são publicadas pelo fabricante do processador e são incompatíveis com microinstruções de outros processadores. Por exemplo, as microinstruções da arquitetura AMD64 são diferentes das microinstruções do Pentium 4, que são diferentes das microinstruções da arquitetura AMD K7.
Dependendo da complexidade da instrução x86, ela pode ser convertida em várias microinstruções RISC.
As instruções x86 da arquitetura AMD64 podem ser convertidas em macro-ops através de três caminhos diferentes: usando um decodificador simples, chamado “DirectPath Single”, que traduz uma instrução x86 comum em uma macro-op simples; usando também um decodificador simples, chamado “DirectPath Double”, que traduz uma instrução x86 em duas macro-ops; ou usando um decodificador complexo, chamado “DirectPath Vector”, que traduz uma instrução x86 complexa em várias macro-ops. O “DirectPath Vector” tem que chamar uma memória ROM (chamada microcódigo) para converter instruções x86.
Eis como o decodificador AMD64 funciona. No estágio Pega, também conhecido como “Procura”, o processador procura e separa as instruções presentes em seu buffer, decidindo qual caminho usar: DirectPath ou VectorPath.
Então vem o estágio Decodificador, que é quebrado em duas etapas, onde as instruções x86 são convertidas em macro-ops. Esta etapa é equivalente ao estágio “Alinhamento” (“Align”) encontrado nos processadores K7. A taxa de saída máxima do decodificador é de seis macro-ops por pulso de clock, três para o DirectPath e três para o VectorPath.
As macro-ops vão para o estágio Empacotamento (que é o equivalente à etapa “Decodificação 1” na arquitetura K7), onde as macro-ops são agrupadas, e então três macro-ops são enviadas para o próximo estágio, Empacotamento/Decodificação, que faz mais alguns procedimentos de decodificação e envia as macro-ops para a Unidade de Controle de Instruções, que é o nome dado pela AMD para o que a Intel chama de Buffer de Reordenamento (ROB).
clique para ampliar
Figura 13: Decodificador da arquitetura AMD64.Envio e Agendamento
Como mencionamos, a Unidade de Controle de Instruções é o Buffer de Reordenamento dos processadores AMD64. Aqui as macro-ops podem ser selecionadas e enviadas para os agendadores fora de ordem, ou seja, não na mesma ordem em que as instruções apareciam no programa em execução. Por exemplo, se o programa tem algo como:
Inteiro
Inteiro
Inteiro
Inteiro
Inteiro
PF
Inteiro
PFA arquitetura AMD64 tem três unidades de execução de instruções de números inteiros e três unidades para a execução de números de ponto flutuante. Se ela usasse a tecnologia de execução fora de ordem, sua unidade de ponto flutuante ficaria ociosa durante a execução deste programa, já que a quarta instrução é uma instrução inteira e não poderia ser executada ao mesmo tempo porque todas as três unidades de execução já estariam sendo utilizadas. Como esta arquitetura implementa o recurso de execução fora de ordem, a quinta instrução, que é a primeira instrução de ponto flutuante), pode ser enviadas para a unidade de execução junto com a primeira, aumentando o desempenho do processador. Na verdade, como ela tem três unidades de ponto flutuante, as instruções de ponto flutuante disponíveis neste programa seriam enviadas todas ao mesmo tempo para execução. O objetivo do agendador é manter todas as unidades de execução do processador ocupadas durante todo o tempo.
O Buffer de Reordenamento disponível na arquitetura AMD64 tem 72 entradas e o que é mais interessante é que cada unidade de execução tem seu próprio agendador com seu próprio buffer (8 entradas cada). As unidades de execução de ponto flutuante têm apenas um agendador com 36 entradas. Portanto, a arquitetura AMD64 tem um total de quatro agendadores, a mesma quantidade disponível nos processadores Pentium 4.
O Buffer de Reordenamento é também responsável pelo renomeamento dos registradores. A arquitetura CISC x86 tem apenas oito registradores de 32 bits (EAX, EBX, ECX, EDX, EBP, ESI, EDI e ESP). Este número é pequeno, especialmente porque processadores modernos podem executar instruções fora de ordem, o que “mataria” o conteúdo de um dado registrador, travando o programa.
Por isso, nesta etapa o processador muda o nome e o conteúdo dos registradores usados pelo programa para um dos 96 registradores internos disponíveis, permitindo que a instrução seja executada ao mesmo tempo em que outra instrução que usa o mesmo registrador padrão (ou até mesmo fora de ordem), isto é, que uma segunda instrução seja executada antes da primeira mesmo que elas utilizem o mesmo registrador.
A arquitetura AMD64 tem 96 registradores internos, enquanto que o Pentium 4 tem 128. Nos processadores Intel de 6ª geração (como o Pentium II e Pentium III) havia apenas 40 registradores internos. É interessante notar como a AMD fez um truque na arquitetura AMD64 para obter esses 96 registradores. Eles simplesmente criaram um campo de resultado em cada uma das 72 entradas do buffer de reordenamento para armazenar os resultados de cada instrução (isto não está disponível no Pentium 4; o Pentium 4 precisa alocar um registrador interno para armazenar os resultados cada vez que uma instrução é executada). Além disso, o arquivo de registradores (ou IFFRF, Integer Future File and Register File, como a AMD chama) tem 40 entradas (como 16 delas armazenam o valor “correto” para cada registrador x86, elas não podem ser usadas). Então, enquanto a resposta correta para “quantos registradores internos a arquitetura da AMD tem?” é 40, o número efetivo é de 96 devido a esta diferença arquitetural.
clique para ampliar
Figura 14: Buffer de Reordenamento e Agendadores da arquitetura AMD64.Unidades de Execução
A arquitetura AMD64 tem três unidades de execução de números inteiros (também conhecida como ULA, Unidade Lógica e Aritmética, ou UEI, Unidade de Execução de Números Inteiros – em inglês, ALU e IEU, respectivamente), três unidades de geração de endereços (UGE – em inglês, AGU) e três unidades de ponto flutuante (UPF – em inglês, FPU). A arquitetura AMD64 tem uma unidade de execução de números inteiros a mais do que o Pentium 4. A taxa máxima de envio de instruções é de seis instruções por pulso de clock, a mesma quantidade encontrada no Pentium 4.
Como você pode ver na Figura 15, existem certas instruções de ponto flutuante que pode apenas ser processada em unidades de execução específicas. FPAD significa instruções de adição de números de ponto flutuante, como por exemplo a instrução ADDPS (que, a propósito, é uma instrução SSE), enquanto que FMUL significa instruções de multiplicação de números de ponto flutuante, como por exemplo a instrução MULPS (que, a propósito, é uma instrução SSE).
clique para ampliar
Figura 15: Unidades de Execução da arquitetura AMD64.Originalmente em http://www.clubedohardware.com.br/artigos/1213
© 1996-2008, Clube do Hardware. Todos os direitos reservados.
É expressamente proibida a reprodução total ou parcial do conteúdo deste site e dos textos disponíveis, seja através de mídia eletrônica, impressa, ou qualquer outra forma de distribuição. Os infratores serão indiciados e punidos com base na lei nº 9.610 de 19/02/1998.
Não nos responsabilizamos por danos materiais e/ou morais de qualquer espécie promovidos pelo uso das informações contidas no Clube do Hardware.