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
PF
A 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.
Figura 14: Buffer de Reordenamento e Agendadores da arquitetura AMD64.
Respostas recomendadas
Crie uma conta ou entre para comentar
Você precisa ser um usuário para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar agora