Por Dentro da Arquitetura do Pentium 4
Por Gabriel Torres e Cássio Lima em 16 de abril de 2006

Introdução

Neste tutorial explicaremos a você como o processador Pentium 4 funciona em uma linguagem clara e objetiva. Você aprenderá exatamente como é a arquitetura interna do Pentium 4 e poderá comparar o seu funcionamento com os processadores anteriores da Intel e com os processadores concorrentes da AMD.

O processador Pentium 4 e os novos modelos de Celeron são baseados na arquitetura de sétima geração da Intel, também chamada Netburst. Na Figura 1 você tem uma visão geral desta arquitetura. Não se assuste, explicaremos o seu funcionamento em detalhe ao longo deste tutorial.

Para uma maior 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á também muitos dos conceitos apresentados aqui. Na verdade, podemos considerar o presente tutorial como seqüência de nosso tutorial Como os Processadores Funcionam.


clique para ampliar
Figura 1: Diagrama em blocos do Pentium 4.

Aqui estão as diferenças básicas entre a arquitetura do Pentium 4 e a arquitetura de outros processadores:

  • Externamente o Pentium 4 trabalha transferindo quatro dados por pulso de clock. Esta técnica é chamada QDR (Quad Data Rate) e faz com que o barramento local tenha um desempenho quatro vezes maior do que o seu clock real, como você pode ver na tabela abaixo. Na Figura 1 isto é mostrado como “3.2 GB/s System Interface”; já que a figura foi desenvolvida quando o primeiro modelo de Pentium 4 foi lançado ela leva em consideração um barramento local de “400 MHz”.

Clock Real

Desempenho

Taxa de Transferência

100 MHz 

400 MHz 

3,2 GB/s

133 MHz 

533 MHz

 4,2 GB/s

200 MHz

800 MHz

6,4 GB/s

266 MHz

1.066 MHz

8,5 GB/s

  • Caminho de dados entre o cache de memória L2 (“L2 cache and control” na Figura 1) e o cache de dados L1 (“L1 D-Cache and D-TLB” na Figura 1) é de 256 bits. Nos processadores anteriores da Intel este caminho de dados era de apenas 64 bits. Por isso, essa comunicação nos processadores Pentium 4 pode ser quatro vezes mais rápida do que os processadores de gerações anteriores quando operando com o mesmo clock. O caminho de dados entre o cache de memória L2 (“L2 cache and control” na Figura 1) e a unidade de pré-busca (“BTB & I-TLB” na Figura 1), no entanto, continua sendo de 64 bits.
  • O cache L1 de instruções foi alterado de local. Em vez de estar localizado antes da unidade de busca, o cache L1 de instruções agora está localizado após o decodificador de instruções, com um novo nome, “Cache de código” (Trace Cache). Este cache de código pode armazenar 12 K microinstruções. Como cada microinstrução do Pentium 4 tem 100 bits, significa que o cache de código tem 150 KB (12 K x 100 / 8). Um dos erros mais comuns que as pessoas cometem sobre a arquitetura do Pentium 4 é dizer que o Pentium 4 não possui nenhum cache de instruções. Isto não é verdade. O cache de instruções está lá, mas com um novo nome e em um local diferente.
  • No Pentium 4 existem 128 registradores internos, enquanto que nos processadores da Intel de sexta geração (como o Pentium II e Pentium III) existiam apenas 40 registradores internos. Esses registradores estão na unidade de Renomeamento de Registradores (também conhecida como RAT, Register Alias Table, mostrada como “Rename/Alloc” na Figura 1).
  • O Pentium 4 possui cinco unidades de execução trabalhando em paralelo e duas unidades para carregar e armazenar dados na memória RAM.

Claro que isto é apenas um resumo para aqueles que já estão familiarizados com as arquiteturas de outros processadores. Se tudo isso parece grego para você, não se preocupe. Explicaremos tudo o que você precisa saber sobre a arquitetura do Pentium 4 em uma linguagem clara nas próximas páginas.

Pipeline do Pentium 4

Pipeline é uma lista de todos os estágios que uma dada instrução precisa percorrer dentro do processador para ser executada. Nos processadores Intel de sexta geração, como o Pentium III, o pipeline tinha 11 estágios. O pipeline do Pentium 4 possui 20 estágios. Por isso, no Pentium 4 uma dada instrução demora mais para ser executada do que no processador Pentium III, por exemplo! Para você ter uma idéia, a situação é ainda pior nos novos processadores Pentium 4 com núcleo Prescott, já que os mesmos possuem um pipeline com 31 estágios! Impressionante!

Este aumento no número de estágios do pipeline foi criado para que os processadores rodassem com clocks mais elevados. Com mais estágios, cada um deles pode ser construído com poucos transistores o que facilita a obtenção de clocks maiores. Na verdade, o Pentium 4 é mais rápido do que o Pentium III apenas porque ele trabalha com um clock maior. Se eles operassem com o mesmo clock um Pentium III seria mais rápido do que um Pentium 4 por causa do tamanho do pipeline.

Por esse motivo, a Intel já anunciou que a oitava geração de seus processadores será baseada na arquitetura do Pentium M, que por sua vez é baseada na arquitetura da Intel de sexta geração (arquitetura do Pentium III) e não na arquitetura Netburst do Pentium 4.

Na Figura 2 você pode ver os 20 estágios do pipeline do Pentium 4. Até agora a Intel não divulgou quais são os 31 estágios do pipeline dos processadores Pentium 4 baseados no núcleo Prescott, e por isso não podemos falar nada a respeito desta geração de Pentium 4.


clique para ampliar
Figura 2: Pipeline do Pentium 4.

Aqui está uma explicação básica de cada um dos estágios, que explica como uma dada instrução é processada por um processador Pentium 4. Se você acha isso complicado, não se preocupe. Isto é apenas um resumo do que falaremos nas próximas páginas.

  • Ponteiro da próxima instrução do cache de microinstruções (TC Nxt IP, Trace cache next instruction pointer): Este estágio vê no buffer de destino de desvio (BTB) qual é a próxima microinstrução a ser executada. Esta etapa demora 2 estágios.
  • Busca da próxima microinstrução no cache de microinstruções (TC Fetch, Trace cache fetch): Carrega, do cache de microinstrução, essa microinstrução. Esta etapa demora 2 estágios.
  • Drive: Envia a microinstrução a ser executada à unidade de alocação de recursos e de renomeamento de registradores.
  • Alocação de recursos (Alloc): Verifica quais recursos serão alocados pela microinstrução, como, por exemplo, o buffer de carga (load) ou o buffer de armazenamento (store).
  • Renomeamento de Registradores (Rename): Renomeia os oito registradores padrão x86 em um dos 128 registradores internos presentes no Pentium 4. Esta etapa demora 2 estágios.
  • Fila (Queue): As microinstruções são armazenadas em filas de acordo com o seu tipo (por exemplo, inteiro ou ponto flutuante). Elas são mantidas na fila até haver espaço no agendador de execução correspondente ao tipo de instrução a ser executada.
  • Agendamento (Sch, Schedule): As microinstruções são agendadas de acordo com o seu tipo (inteiro, ponto flutuante, etc). Antes de chegar nesta etapa, as microinstruções são entregues em ordem, ou seja, na mesma ordem em que apareciam no programa. Nesta etapa, o agendador reordena as instruções de forma que estas sejam executadas da melhor forma possível, isto é, que não fique nenhuma unidade de execução vazia. Por exemplo, se uma unidade de ponto flutuante vai ficar disponível, o agendador procurará por uma instrução de ponto flutuante para mandá-la para esta unidade, mesmo que a próxima instrução no programa seja uma instrução que opere com números inteiros. Os agendadores são o coração da execução fora de ordem dos processadores de 7ª geração. Esta etapa demora três estágios.
  • Envio (Disp, Dispatch): As microinstruções são enviadas às unidades de execução adequadas. Esta etapa é dividida em dois estágios.
  • Leitura dos registradores internos (RF): Os registradores internos, armazenados no pool de instruções, são lidos. Esta etapa demora dois estágios.
  • Execução (Ex): As microinstruções são executadas.
  • Flags (Flgs): Atualiza os flags do processador.
  • Verificação de desvios (Br Ck, Branch check): Verifica se o desvio tomado pelo programa é o mesmo que o previsto pelo circuito de previsão de desvio.
  • Drive: Envia o resultado dessa verificação para o buffer de destino de desvio (BTB) localizado na entrada do processador.

Cache de Memória e Unidade de Busca

O cache de memória L2 do Pentium 4 pode ser de 256 KB, 512 KB, 1 MB ou 2 MB, dependendo do modelo. O cache L1 de dados é de 8 KB ou 16 KB (nos modelos de 90 nm).

Como explicamos antes, o cache L1 de instruções foi movido de antes da unidade de busca para depois da unidade de decodificação, usando um novo nome, “Cache de código” (Trace Cache). Dessa forma, em vez de armazenar as instruções do programa a serem carregadas pela unidade de busca, o cache de código armazena microinstruções já decodificadas pela unidade de decodificação. O cache de código pode armazenar até 12 K microinstruções e, como no Pentium 4 cada microinstruções é de 100 bits, o cache de código é de 150 KB (12.288 x 100 / 8).

A idéia por trás desta arquitetura é muito interessante. No caso de um loop no programa (loop é pedaço de programa que é repetido mais de uma vez), as instruções a serem executadas já estarão decodificadas, já que elas são armazenadas já decodificadas no cache de código. Em outros processadores, as instruções precisam ser carregadas do cache L1 de instruções e decodificadas novamente, mesmo que elas já tenham sido decodificadas pouco tempo antes.

O cache de microinstruções tem também seu próprio buffer de destino de desvio (BTB, Branch Target Buffer) de 512 entradas. O BTB é uma pequena memória que lista todos os desvios identificados no programa.

Já na unidade de busca, seu BTB foi aumentado para 4.096 entradas. Nos processadores Intel de 6ª geração, como o Pentium III, este buffer era de 512 entradas e nos processadores Intel de 5ª geração, como os primeiros modelos de Pentium, este buffer era de apenas 256 entradas.

Na Figura 3 você pode ver um diagrama em blocos que demonstra o que estamos falando. TLB significa buffer de tradução de endereços virtuais (Translation Lookaside Buffer).


clique para ampliar
Figura 3: Unidades de busca e decodificação e o cache de código.

Decodificador CISC/RISC

Desde da geração anterior (6ª geração), os processadores da Intel utilizam uma arquitetura híbrida CISC/RISC. 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 inteiramente RISC não poderia ser criado para ser usado nos PCs porque ele não pode rodar programas que temos disponíveis hoje, como Windows e Office.

Portanto, a solução usada por todos os processadores disponíveis no mercado hoje, tanto da Intel quanto da AMD, é usar um decodificador CISC/RISC. O processador trabalha internamente executando instruções RISC, mas aceita apenas instruções CISC x86.

Instruções CISC x86 são conhecidas como “instruções”, enquanto que as instruções RISC são conhecidas como “microinstruções” ou “µops”.

Essas microinstruções RISC, no entanto, não podem ser acessadas diretamente e, portanto, não poderíamos criar programas baseados nessas instruções e enviá-las para as unidades de execução passando por cima do decodificador de instruções. Além disso, cada processador possui seu próprio conjunto de instruções RISC, que não são divulgadas pelo fabricante e são incompatíveis com as microinstruções de outros processadores. Por exemplo, as microinstruções do Pentium III são diferentes das microinstruções do Pentium 4, que são diferentes das microinstruções do Athlon 64.

Dependendo da complexidade da instrução x86 ela pode ser convertida em várias microinstruções RISC.

O decodificador do Pentium 4 pode decodificar uma instrução x86 em até quatro microinstruções RISC por pulso de clock. As instruções mais complexas e que precisam ser convertidas em mais do que quatro microinstruções na verdade não são convertidas: é consultada uma memória ROM (“ROM Microcódigo” na Figura 3) contendo uma lista de microinstruções para a conversão daquela instrução. Essa memória ROM é chamada de Seqüenciador de Instruções de Microcódigo (MIS,  Microcode Instruction Sequencer).

Como falamos anteriormente, após serem decodificadas as microinstruções são enviadas para o cache de microinstruções e de lá seguem para uma fila de microinstruções. O cache de microinstruções pode colocar até três microinstruções na fila por pulso de clock, apesar da Intel não divulgar o tamanho desta fila.

De lá, as instruções vão para o Alocador e para a unidade de Renomeamento de Registradores. A fila pode também entregar até três microinstruções por pulso de clock para o Alocador.

Alocador e Renomeamento de Registradores

O que o alocador faz:

  • Reserva um dos 126 buffers de reordenamento (ROB) para a microinstrução atual de modo a monitorar o status de execução da microinstrução. Com isso, a microinstrução pode ser executada fora de ordem, já que o processador será capaz de colocá-las em ordem novamente através da utilização desta tabela.
  • Reserva um dos 128 arquivos de registro (RF) de modo a armazenar lá o dado resultante do processamento da microinstrução.
  • Se a microinstrução é do tipo carga ou armazenamento (load ou store), ou seja, se ela lê (load) ou grava (store) dados de/para a memória RAM, o alocador reservará um dos 48 buffers de carga ou um dos 24 buffers de armazenamento de acordo.
  • Reserva uma entrada na fila de memória ou na fila geral, dependendo do tipo de microinstrução.

Após isso a microinstrução vai para o estágio de renomeamento de 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 em um dos 128 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.

É interessante notar que o Pentium 4 tem na verdade 256 registradores internos, 128 registradores para instruções inteiras e 128 registradores para instruções de ponto flutuante e SSE.

O renomeador do Pentium 4 é capaz de processar três microinstruções por pulso de clock.

Do renomeador a microinstrução vai para a fila, de acordo com o seu tipo: fila de memória, para microinstruções relacionadas à memória, ou fila de inteiros/ponto flutuante, para todos os outros tipos de instruções.


clique para ampliar
Figura 4: Alocador e unidade de renomeamento de registradores.

Agendador

O agendador tem quatro unidades. Ele analisa cada microinstrução e as coloca em uma unidade de agendamento de acordo com o seu tipo:

  • Unidade de agendamento de memória: para microinstruções relacionadas à memória. Essas são as microinstruções que vem da fila de microinstrução de memória.
  • Unidade de agendamento rápida: esta unidade é para microinstruções simples.
  • Lenta / Unidade de agendamento PF geral: esta unidade é para outras microinstruções e para as microinstruções de ponto flutuante complexas.
  • Unidade de agendamento PF simples: esta unidade é para microinstruções de ponto flutuante simples.

Portanto, o agendador classifica as microinstruções de acordo com seus tipos. Então o agendador pode enviar cada microinstrução diretamente para a unidade de execução correta para ser processada.

O agendador é o coração da unidade de execução fora de ordem do Pentium 4. Até agora todas as microinstruções foram entregues na mesma ordem em que foram decodificadas. No agendador as microinstruções podem se enviadas em ordem totalmente diferente para a unidade de execução. O objetivo do agendador é manter todas as unidades de execução do processador ocupadas o tempo inteiro.

As unidades de execução são conectadas ao agendador através de quatro portas de envio, numeradas de 0 a 3, como você pode ver na Figura 5.


clique para ampliar
Figura 5: Unidades de agendamento.

Unidades de Despacho e Execução

Como vimos, o Pentim 4 possui quatro portas de envio numeradas de 0 a 3. Cada porta é conectada a uma, duas ou três unidades de execução, como você pode ver na Figura 6.


clique para ampliar
Figura 6: Unidades de execução e envio.

As unidades marcadas como “clock x2” podem executar duas microinstruções por pulso de clock. As portas 0 e 1 podem enviar duas microinstruções por pulso de clock para essas unidades. Portanto, o número máximo de microinstruções que podem ser enviadas por pulso de clock para serem executadas é seis:

  • Duas microinstruções na porta 0;
  • Duas microinstruções na porta 1;
  • Uma microinstrução na porta 2;
  • Uma microinstrução na porta 3.

Tenha em mente que instruções complexas podem levar várias pulsos de clocks para serem processadas. Vamos pegar um exemplo da porta 1, onde a unidade de ponto flutuante está localizada. Enquanto esta unidade está processando uma instrução muito complexa que leva vários pulsos de clock para se executada, a unidade de envio da porta 1 não estará e continuará enviando instruções simples para a ULA (Unidade Lógica e Aritmética) enquanto a FPU estiver ocupada.

Então, apesar de o número máximo que pode ser enviado às unidades de despacho ser seis, na verdade o processador pode ter até sete microinstruções sendo processadas ao mesmo tempo.

Isto explica porque as portas 0 e 1 têm mais do que uma unidade de execução. Se você prestar atenção, a Intel colocou na mesma porta uma unidade rápida junto com pelo menos uma unidade complexa (e lenta). Por isso, enquanto a unidade complexa estiver processando dados, a outra unidade pode continuar recebendo microinstruções da sua porta de despacho correspondente. Como mencionamos anteriormente, a idéia é manter todas as unidades de execução ocupadas ao mesmo tempo.

As duas unidades lógicas e aritméticas de velocidade dupla podem processar duas microinstruções por pulso de clock. As outras unidades precisam de pelo menos um pulso de clock para processarem as microinstruções que elas recebem. Desta forma, a arquitetura do Pentium 4 é otimizada para instruções simples.

Como você pode ver na Figura 6, as portas de envio 2 e 3 são dedicadas a operações de memória: carga (load, leitura de dados da memória) e armazenamento (store, escrita de dados na memória), respectivamente. Nas operações com a memória é interessante notar que a porta 0 é também usada durante operações de armazenamento (veja na Figura 5 e a lista das operações na Figura 6). Em tais operações, a porta 3 é usada para enviar os endereços de memória, enquanto a porta 0 é usada para enviar dados a serem armazenados neste endereço. Este dado pode ser gerado tanto pela ULA quanto pela FPU, dependendo do tipo de dado a ser armazenado (inteiro ou ponto flutuante/SSE).

Na Figura 6 você tem uma lista completa dos tipos de instrução que cada unidade de execução pode processar. FXCH e LEA (Load Effective Address) são duas instruções x86. Na verdade, a implementação da Intel para a instrução FXCH no Pentium 4 causou um surpresa aos especialistas porque nas gerações anteriores dos processadores (Pentium III) e processadores da AMD esta instrução pode ser executada em menos de um pulso de clock, enquanto que no Pentium 4 esta mesma instrução leva alguns pulsos de clock para ser executada.

É isto. Planejamos escrever em breve um tutorial explicando como o os processadores Athlon 64 funcionam, assim você poderá comparar a arquitetura da Intel com a da AMD.

Originalmente em http://www.clubedohardware.com.br/artigos/Por-Dentro-da-Arquitetura-do-Pentium-4/1201

© 1996-2012, 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.

Quantcast