Por Dentro da Arquitetura do Pentium M
Por Gabriel Torres e Cássio Lima em 17 de abril de 2006
Introdução
Neste tutorial explicaremos como o processador Pentium M trabalha internamente em uma linguagem fácil e clara. Como todos os novos processadores da Intel serão baseados na arquitetura do Pentium M, o estudo desta arquitetura é muito importante para entender como os processadores Core Solo e Core Duo (Yonah) funcionam e também para entender a base da arquitetura Core, que será usada pelos processadores Merom, Conroe e Woodcrest. Você aprenderá como é a arquitetura interna do Pentium M e poderá comparar o seu funcionamento com o de outros processadores da Intel e com os processadores concorrentes da AMD.
O Pentium M é um processador voltado para o mercado de notebooks e é baseado na arquitetura Intel de 6ª geração, também conhecida como P6, que é a mesma arquitetura usada pelos processadores Pentium Pro, Pentium II e Pentium III, e não na arquitetura do Pentium 4, como você poderia pensar. Você pode pensar no Pentium M como uma versão aprimorada do Pentium III. Cuidado para não confundir o Pentium M com o Pentium 4 M ou com o Pentium III M, já que são processadores diferentes. Leia nosso tutorial Todos os Modelos do Pentium M para saber mais sobre os modelos lançados deste processador.
Algumas vezes o Pentium M é chamado de Centrino. Na verdade, Centrino é quando você tem um notebook equipado com um processador Pentium M, chipset Intel 855 ou 915 e rede wireless Intel/PRO. Caso um notebook seja baseado no processador Pentium M mas não tenha rede wireless Intel/PRO, por exemplo, ele não pode ser chamado de Centrino.
Neste tutorial explicaremos basicamente como a arquitetura P6 funciona e o que existe de novo no Pentium M em relação ao Pentium III. Por isso, neste tutorial você aprenderá também como os processadores Pentium Pro, Pentium II, Pentium III e Celeron (modelos baseados na arquitetura P6, isto é, os modelos slot 1 e soquete 370) funcionam.
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. Sugerimos também que você leia nosso tutorial Por Dentro da Arquitetura do Pentium 4 para poder comparar as diferenças entre o Pentium M e o Pentium 4.
Antes de continuarmos, vamos dar uma olhada nas principais diferenças entre os processadores Pentium M e Pentium III.
- Externamente, o Pentium M trabalha igual ao Pentium 4, 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 atual, como você pode ver na tabela abaixo.
Clock Real
Desempenho
Taxa de Transferência
100 MHz
400 MHz
3,2 GB/s
133 MHz
533 MHz
4,2 GB/s
- Cache de memória L1: dois caches de memória L1 de 32 KB, um para dados e outro para instruções (o Pentium III tinha dois caches de memória L1 de 16 KB).
- Cache de memória L2: 1 MB nos modelos de 130 nm (núcleo Banias) ou 2 MB nos modelos de 90 nm (núcleo Dothan). O Pentium III tinha até 512 KB. O Celeron M, que é uma versão de baixo custo do Pentium M, tem um cache L2 de 512 KB.
- Suporte às instruções SSE2.
- Previsão de desvio avançada: o circuito de previsão de desvio foi redesenhado (e é baseado no circuito de previsão de desvio do Pentium 4) para aumentar o desempenho.Fusão de microinstruções: O decodificador de instruções funde duas microinstruções em uma única microinstrução de modo a economizar energia e aumentar o desempenho. Falaremos mais sobre isto adiante.
- Tecnologia Enhanced SpeedStep, que permite que o processador reduza o seu clock interno em momentos de ociosidade de modo a economizar bateria.
- Vários outros recursos de economia de energia foram adicionados à microarquitetura do Pentium M, já que ele é um processador voltado para o mercado de notebooks.
Agora falaremos em mais detalhes sobre a arquitetura do Pentium M.
Pipeline do Pentium M
Pipeline é uma lista de todos os estágios que uma dada instrução precisa percorrer para ser executada. A Intel não divulga quais são os estágios do pipeline do Pentium M, mas falaremos sobre o pipeline do Pentium III. O pipeline do Pentium M tem provavelmente mais estágios do que o do Pentium III, mas analisando o pipeline do Pentium III podemos ter uma idéia de como a arquitetura do Pentium M funciona.
Lembre-se de que o pipeline do Pentium 4 tem 20 estágios e o pipeline dos novos processadores Pentium 4 baseados no núcleo Prescott tem 31 estágios.
Na Figura 1 você pode ver o pipeline de 11 estágios do Pentium III.
clique para ampliar
Figura 1: Pipeline do Pentium III.Aqui está uma explanação básica de cada um dos estágios, que explica como uma dada instrução é processada em processadores baseados na arquitetura P6. Se você achar complicado, não se preocupe. Isto é apenas um resumo do que falaremos nas próximas páginas.
- Busca - Estágio 1 (IFU1): Carrega uma linha (32 bytes, 256 bits) do cache L1 de instruções e armazena no buffer de pré-busca (Instruction Streaming Buffer).
- Busca - Estágio 2 (IFU2): Identifica os limites de instruções dentro de 16 bytes (128 bits). Como as instruções x86 não têm tamanho fixo, este estágio marca onde começa e onde termina cada instrução dentro dos 16 bytes carregados. Se houver alguma instrução de desvio nesses 16 bytes, seu endereço é armazenado no buffer de destino do desvio (BTB), de forma que o processador possa posteriormente usar esta informação no seu circuito de previsão de desvio.
- Busca - Estágio 3 (IFU3): Separa as instruções para serem entregues ao decodificador apropriado. Existem três diferentes unidades de decodificação, como explicaremos adiante.
- Decodificação - Estágio 1 (DEC1): Decodifica a instrução x86 em uma microinstrução RISC (também chamada micro-op, µop ou microinstrução). Como o processador tem três unidades de decodificação, é possível a decodificação de até três instruções simultaneamente.
- Decodificação - Estágio 2 (DEC2): Passa as microinstruções para a fila de instrução decodificadas, que é capaz de armazenar até seis microinstruções (micro-ops). Se a instrução x86 tiver sido convertida em mais do que seis microinstruções, este estágio precisará ser repetido de forma a colher as microinstruções que ficaram faltando.
- Renomeamento de registradores (RAT): Como a microarquitetura P6 implementa execução fora de ordem, o valor de um dado registrador poderia ser alterado por uma instrução executada antes do seu lugar “correto” (original) no fluxo do programa, corrompendo os dados necessários por outra instrução. Para resolver este tipo de conflito, neste estágio o nome do registrador original usado pela instrução é trocado por um dos 40 registradores internos que a microarquitetura P6 tem.
- Buffer de reordenamento (ROB): Neste estágio, três microinstruções são carregadas para o buffer de reordenamento (ROB). Se todos os dados necessários para a execução de uma microinstrução estiverem disponíveis e se houver uma posição disponível na fila de microinstruções da unidade de reserva, então a microinstrução é copiada para a fila de execução da unidade de reversa.
- Envio (DIS): Se a microinstrução não foi enviada para a unidade de reserva, isto é feito. A microinstrução é enviada para a unidade de execução apropriada.
- Execução (EX): A microinstrução é executada na unidade de execução apropriada. Em geral, cada microinstrução é capaz de ser executada em apenas um pulso de clock.
- Retirada - Estágio 1 (RET1): Verifica no buffer de reordenamento se há microinstrução que podem ser marcadas como “executadas”.
- Retirada - Estágio 2 (RET2): Quando todas as microinstruções envolvidas com a instrução x86 anterior já foram retiradas do buffer de reordenamento e todas as microinstruções envolvidas com a instrução x86 atual foram executadas, essas microinstruções são removidas do buffer de reordenamento e os registradores x86 são atualizados (processo inverso ao que é feito no estágio de renomeamento de registradores). O processo de retirada tem de ser feito em ordem. Até três microinstruções podem ser retiradas do buffer de reordenamento por pulso de clock.
Não se preocupe se tudo isso parecer confuso para você. Explicaremos tudo isto melhor nas próximas páginas.
Cache de Memória e Unidade de Busca
Como mencionamos, o cache de memória L2 do Pentium M pode ser de 1 MB (modelos de 130 nm, núcleo Banias) ou de 2 MB (modelos de 90 nm, núcleo Dothan), enquanto que o seu cache L1 é dividido, sendo 32 KB para instruções e 32 KB para dados.
A unidade de busca está dividida em três estágios, como explicamos na página anterior. Na Figura 2 você pode ver como a unidade de busca do Pentium M trabalha.
clique para ampliar
Figura 2: Unidade de busca.Como falamos anteriormente, a unidade de busca carrega uma linha (32 bytes = 256 bits) do cache L1 de instruções e armazena no buffer de pré-busca (Instruction Streaming Buffer). Então o decodificador de comprimento de instrução identifica os limites da instrução dentro de 16 bytes (128 bits). Como as instruções x86 não têm tamanho fixo, este estágio marca onde começa e onde termina cada instrução dentro dos 128 bits carregados. Se houver alguma instrução de desvio nesses 128 bits, seu endereço é armazenado no buffer de destino do desvio (BTB, Branch Target Buffer), de forma que o processador possa posteriormente usar esta informação no seu circuito de previsão de desvio. O BTB do Pentium M tem 512 entradas.
Então o estágio de alinhamento do decodificador separa as instruções para serem entregues ao decodificador apropriado. Existem três diferentes unidades de decodificação, como explicaremos na próxima página.Decodificador de Instrução e Renomeamento de Registradores
Desde a introdução da arquitetura P6 com o processador Pentium Pro 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ção. 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”, “micro-ops” 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 passar por cima do decodificador de instruções do processaador. 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 de instrução do Pentium M trabalha como mostrado na Figura 3. Como você pode ver, existem três decodificadores e um Seqüenciador de Instruções de Microcódigo (MIS, Microcode Instruction Sequencer). Dois decodificadores são otimizados para instruções simples, que são as mais usadas. Este tipo de instrução é convertido em apenas uma microinstrução. Um decodificador é otimizado para instruções x86 complexas, que podem ser convertidas em até quatro microinstruções. As instruções mais complexas e que precisam ser convertidas em mais do que quatro microinstruções na verdade não são convertidas: uma memória ROM (“ROM do Microcódigo”) 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).
clique para ampliar
Figura 3: Decodificador de instrução e a unidade de Renomeamento de registradores.O decodificar de instruções pode converter até três instruções x86 por pulso de clock: uma complexa no decodificador 0 e duas simples nos decodificadores 1 e 2, alimentando a fila de instruções decodificadas com até seis microinstruções por pulso de clock, cenário obtido quando o Decodificador 0 manda quatro microinstruções e os outros dois decodificadores mandam uma microinstrução cada – ou quando o MIS é usado. Instruções x86 muito complexas que usam o Seqüenciador de Instruções de Microcódigo podem demorar vários pulsos de clock para serem decodificadas, dependendo da quantidade de microinstruções que serão geradas na conversão. Tenha em mente que a fila de instruções decodificadas pode armazenar até seis microinstruções e, portanto, caso mais de seis microinstruções sejam geradas pelos decodificadors mais o MIS, um outro pulso de clock será necessário para enviar as microinstruções atuais presentes na fila para a tabela de alocação de registradores (RAT), esvaziando a fila e aceitando as microinstruções que não “couberam” na fila antes.
O Pentium M usa um novo conceito em relação à arquitetura P6 que é chamada de fusão de microinstruções. No Pentium M a unidade de decodificação funde duas microinstruções em apenas uma. Elas serão separadas apenas quando forem executadas, no estágio de execução.
Na arquitetura P6 cada microinstrução é de 118 bits. O Pentium M em vez de trabalhar com microinstruções de 118 bits trabalha com microinstruções de 236 bits, que são na verdade duas microinstruções de 118 bits.
Tenha em mente que as microinstruções continuam sendo de 118 bits; o que mudou é que elas são transportadas em grupos de duas microinstruções.
A idéia por trás desta técnica é economizar energia e aumentar o desempenho. É mais rápido mandar uma microinstrução de 236 bits do que duas de 118 bits. Além disso, o processador consome menos, já que menos microinstruções estarão circulando dentro do processador.
As microinstruções fundidas são enviadas para a unidade de renomeamento de registradores (RAT). 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 os modernos processadores 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 seus 40 registradores internos disponíveis (cada um deles é de 80 bits, permitindo desta forma o armazenamento tanto de números inteiros quanto de ponto flutuante), 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.
Buffer de Reordenamento
Até agora as instruções x86 e as microinstruções que resultaram delas foram transferidas entre os estágios do processador na mesma ordem que apareciam no programa sendo executado.
Ao chegarem no buffer de reordenamento (ROB), as microinstruções podem ser carregadas e executadas fora de ordem pelas unidades de execução. Após serem executadas, as instruções são mandadas de volta para o buffer de reordenamento. Então, na unidade de retirada, as microinstruções executadas são removidas do buffer de reordenamento na mesma ordem que entraram, ou seja, são removidas em ordem. Na Figura 4 você pode ver uma idéia melhor de como isto é feito.
clique para ampliar
Figura 4: Como o buffer de reordenamento trabalha.Na Figura 4 simplificamos a estação de reserva e as unidades de execução para um melhor entendimento do buffer de reordenamento. Falaremos sobre esses dois estágios mais a fundo na próxima página.
Unidades Estação de Reserva e de Execução
Como comentamos anteriormente, o Pentium M usa microinstruções fundidas (ou seja, manipula duas microinstruções dentro de uma só) da unidade de decodificação até as portas de envio localizadas na estação de reserva. A estação de reserva envia cada microinstrução individualmente para ser executada.
O Pentium M tem cinco portas de envio numeradas de 0 a 4, localizadas na sua estação de reserva. Cada porta está conectada a uma ou mais unidades de execução, como você pode ver na Figura 5.
clique para ampliar
Figura 5: Unidades Estação de Reserva e de Execução.Aqui está uma pequena explicação de cada unidade de execução encontrada no Pentium M:
- IEU: A Unidade de Execução de Instrução (IEU, Instruction Execution Unit) é onde instruções “comuns” são executadas. Esta unidade é também chamada de ULA (Unidade Lógica e Aritmética). Instruções “comuns” são também chamadas de instruções “inteiras”.
- FPU: A Unidade de Ponto Flutuante é onde instruções matemáticas complexas são executadas. No passado esta unidade era também conhecida como “co-processador matemático”.
- SIMD: É nesta unidade que as instruções SIMD são executadas, a exemplo das instruções MMX, SSE e SSE2.
- WIRE: Outras funções (não divulgadas pela Intel).
- JEU: A Unidade de Execução de Desvios (JEU, Jump Execution Unit) processa os desvios e também é conhecida como Unidade de Desvio.
- Shuffle: Esta unidade executa um tipo de instrução SSE chamada “shuffle”.
- PFADD: Executa uma instrução SSE chamada PFADD (Packed FP Add) e também as instruções COMPARE, SBTRACT, MIN/MAX e CONVERT. Esta unidade tem um pipilene e por isso pode iniciar a execução de uma nova microinstrução em cada pulso de clock mesmo que a execução da microinstrução anterior não tenha terminado ainda. Esta unidade tem uma latência de três pulsos de clock, ou seja, ela demora três pulsos de clock para entregar cada instrução processada.
- Reciprocal Estimates: Executa duas instruções SSE, uma chamada RCP (Reciprocal Estimate) e outra chamada RSQRT (Reciprocal Square Root Estimate).
- Load: Unidade de carga, processa instruções que solicitam dados a serem lidos da memória RAM.
- Store Address: Unidade de armazenamento de endereços, processa instruções que solicitam dados a serem escritos na memória RAM. Esta unidade é também conhecida como Unidade de Geração de Endereços (AGU, Address Generator Unit). Este tipo de instrução usa tanto as unidades Store Address e Store Data ao mesmo tempo.
- Store Data: Unidade de armazenamento de dados, processa instruções que solicitam dados a serem escritos na memória RAM. Este tipo de instrução usa tanto as unidades Store Address e Store Data ao mesmo tempo.
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á ocupada processando uma instrução muito complexa que leva vários pulsos de clock para ser executada, a unidade de envio da porta 1 não estará ocupada e continuará enviando instruções simples para a IEU enquanto a FPU estiver ocupada.
Desta forma, apesar de a taxa máxima de envio de microinstruções ser cinco, na verdade o processador pode ter até 12 microinstruções sendo processadas ao mesmo tempo.
Isso 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 envio correspondente. Como mencionamos anteriormente, a idéia é manter todas as unidades de execução ocupadas ao mesmo tempo.
Como mencionamos, nas instruções que solicitam ao processador para ler um dado armazenado em um determinado endereço de memória RAM, a unidade Store Address e a unidade Store Data são usadas ao mesmo tempo, uma para calcular o endereço e outra para armazenar o dado.
Como explicamos, após cada microinstrução ter sido executada, elas retornam para o buffer de reordenamento, onde seus marcadores são definidos como “executada”. Então na unidade de retirada as microinstruções que tem seus marcadores definidos como “executada” são removidas do buffer de reordenamento na sua ordem original (isto é, na ordem em que foram decodificadas) e então os registradores x86 são atualizados (o processo inverso da unidade de renomeamento de registradores). Até três microinstruções podem ser removidas do buffer de reordenamento por pulso de clock. Após isto a instrução é completamente executada.
Tecnologia Enhanced SpeedStep
A tecnologia SpeedStep foi criada para aumentar a autonomia da bateria e o Pentium III foi o primeiro processador da Intel a ter esta tecnologia. Esta primeira versão da tecnologia SpeedStep permitiu ao processador chavear entre duas freqüências de operação: Modo de Baixa Freqüência (LFM, Low Frequency Mode), que economizava energia, e o Modo de Alta Freqüência (HFM, High Frequency Mode), que permitia ao processador rodar em seu clock máximo. O processador tinha dois multiplicadores de clock e o que ele fazia era mudar o multiplicador que estava usando. O multiplicador do modo de baixa freqüência era travado de fábrica e você não poderia mudá-lo.
O Pentiuim M introduziu a tecnologia Enhanced SpeedStep, que vai além disto, tendo várias outras configurações de clock e tensão entre o clock mínimo ou LFM (que é fixado em 600 MHz) e o clock máximo ou HFM (que é o clock real do processador).
Só para darmos um exemplo real, as configurações de tensão e clock de um Pentium M de 1,6 GHz baseado na tecnologia de 130 nm é a seguinte:
Tensão
Clock
1,484 V
1,6 GHz
1,42 V
1,4 GHz
1,276 V
1,2 GHz
1,164 V
1 GHz
1,036 V
800 MHz
0,956 V
600 MHz
Cada modelo do Pentium M tem sua própria tabela de tensão e clock. É muito interessante notar que não é apenas o clock do processador que é reduzido em momentos de ociosidade do processador do seu notebook, mas também a sua tensão de alimentação, o que ajuda em muito a diminuir o consumo da bateria.
A tecnologia Enhanced SpeedStep funciona monitorando registradores específicos do processador chamados Contadores de Desempenho. Com esta informação, o processador pode aumentar ou diminuir seu clock e tensão de alimentação dependendo da utilização do processador. Se você exigir mais do processador, esta tecnologia aumentará seu clock e tensão de alimentação, enquanto que se você diminuir a utilização do seu processador, esta tecnologia diminuirá seu clock e tensão de alimentação.
A tecnologia Enhanced SpeedStep foi somente um dos muitos avanços feitos na microarquitetura do Pentium M para aumentar a autonomia da bateria.
Um bom exemplo foi feito nas unidades de execução. Em outros processadores, a mesma linha de alimentação abastece todas as unidades de execução. No Pentium 4, por exemplo, não é possível desligar uma unidade que esteja ociosa. As unidades de execução do Pentium M têm diferentes linhas de alimentação fazendo com que o processador seja capaz de desligar unidades de execução ociosas. Por exemplo, o Pentium M verifica se uma dada instrução é inteira (“instruções comuns”) e então desabilita as unidades e caminhos de dados que não serão necessários para a execução desta instrução, caso elas estejam ociosas, é claro.
Originalmente em http://www.clubedohardware.com.br/artigos/1202
© 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.