Hyper Pipelined Technology
O pipeline é um recurso que divide o processador em vários estágios, que trabalham simultaneamente, dividindo o trabalho de processar as instruções. É como uma linha de produção com vários operários, em que cada um monta uma peça, até termos no final o produto completo.
O primeiro processador Intel a utilizar esse recurso foi o 486, que possuía 5 estágios. Como o 486 era um processador muito simples (para os padrões atuais), que processava uma instrução de cada vez, ele não precisava de muitos dos componentes usados nos processadores modernos, tais como o ordenador, circuito de branch-prediction e assim por diante. O processador simplesmente recebia cada instrução, fazia a decodificação e em seguida a executava. Enquanto a primeira instrução passava do primeiro para o segundo estágio do pipeline, o primeiro estágio recebia a instrução seguinte e assim por diante.
O Pentium manteve os 5 estágios do 486, mas incorporou uma segunda unidade de execução e um coprocessador aritmético muito aprimorado. Com o uso de duas unidades de execução, surgiu a necessidade de dividir as instruções entre elas, o que gerou um problema adicional, já que a grande maioria dos programas executam processamento de maneira sequencial, esperando que o processador execute uma instrução de cada vez.
Surgiu então a necessidade de incluir circuitos adicionais, que ordenam as instruções de forma que o processador possa executar duas instruções por ciclo na maior parte do tempo. O mais importante dele é o circuito de branch prediction, que permite que o processador use o tempo ocioso para ir "adiantando o trabalho", processando um dos caminhos possíveis em uma operação de tomada de decisão enquanto não sabe o resultado da operação que diz qual dos caminhos é o carreto, como, por exemplo, ao executar um trecho de código, como neste exemplo:
if [ a = b ]; then
bloco de código 1
else
bloco de código 2
fi
Aqui o processador não tem escapatória, já que só vai saber se deve executar o bloco de código 1, ou o bloco de código 2 depois que souber o resultado da primeira operação, ou seja, souber se "a" é igual a "b". O circuito de branch prediction escolhe então o caminho que parece mais provável, permitindo que o processador permaneça ocupado.
O nível de exatidão do circuito de branch prediction varia muito de acordo com o processador. No Pentium ele era bastante simples, escolhendo qual caminho seguir praticamente de forma aleatória, enquanto nos processadores atuais ele decide consultando uma tabela com resultados anteriores de operações similares.
Quando o processador escolhe o caminho certo, ele ganha tempo, já que pode aproveitar o trabalho já feito. Mas, quando erra, ele precisa descartar todo o trabalho e recomeçar a partir do outro caminho.
O Pentium III possui um total de 10 estágios, além de um conjunto de outros circuitos (fora do pipeline) que são encarregados de converter e ordenar as instruções. Ao contrário do Pentium, que é um processador CISC, que processa todas as instruções x86 diretamente, o Pentium III e todos os demais processadores atuais, são processadores híbridos CISC/RISC, que quebram as instruções x86 em instruções simples, que são então processadas.
Graças à inclusão de todos os demais circuitos, uso do cache integrado e melhorias nas placas-mãe, o aumento no número de estágios de pipeline do Pentium III não teve um impacto muito negativo sobre o desempenho. Pelo contrário, um Pentium III é pelo menos duas vezes mais rápido que um Pentium I do mesmo clock. O Pentium II, por sua vez, é muito similar ao Pentium III em arquitetura, carecendo apenas do cache L2 on-die e das instruções SSE.
Foi graças ao aumento no número de estágios no pipeline que o Pentium III foi capaz de atingir freqüências de operação tão mais elevadas que o Pentium, que (com o MMX) atingiu apenas 233 MHz. Mesmo que fosse produzido em uma técnica de 0.18 micron, o Pentium provavelmente não seria capaz de superar a barreira dos 500 MHz, enquanto o Pentium III (de 0.18 micron) existiu em versões de até 1.0 GHz.
O Pentium 4 leva essa filosofia adiante, utilizando um total de 20 estágios de pipeline, daí o nome "Hyper Pipelined". Temos aqui um slide da Intel que mostra um comparativo entre o pipeline de 10 estágios do Pentium III com os 20 estágios do Willamette. Tenha em mente que cada instrução precisa percorrer cada um dos 20 estágios para ser completamente processada:
Com mais estágios, cada um responde por uma fração menor do processamento, o que permite que o processador seja capaz de operar a freqüências mais elevadas. Voltando ao exemplo da linha de produção, seria como se dobrássemos o número de operários e cada um passasse a encaixar apenas uma peça em cada produto que passa através da esteira, em vez de duas. Reduzindo o trabalho de cada operário pela metade, seria possível mover a esteira ao dobro da velocidade, dobrando a produção.
O grande problema é que os processadores atuais executam várias instruções simultaneamente, enquanto os programas são uma seqüência de instruções, de forma que sempre existe uma penalidade em adicionar mais estágios. Quanto mais estágios, mais tempo o processador demora para executar as instruções iniciais de tomada de decisão e mais tempo perde ao escolher o caminho errado.
Ainda no exemplo da linha de produção seria como se o produto a ser montado mudasse constantemente, de acordo com os pedidos recebidos dos clientes. Cada vez que o produto muda, é preciso parar a esteira, desmontar as unidades do produto anterior que já estavam parcialmente montadas e limpar a esteira, para só então poder recomeçar a produção.
No Pentium 4, a cada tomada de decisão errada são perdidos pelo menos 20 ciclos de processamento, uma eternidade considerando que em média, 14% das instruções processadas são de tomada de decisão.
Com exceção do Pentium 4, quase todos os processadores atuais utilizam de 8 a 14 estágios de pipeline, que parece ser a faixa com a melhor relação entre clock, complexidade e desempenho. Acima disto, mais pipelines equivalem a um desempenho por ciclo de clock cada vez menor.
A partir de um certo ponto, aumentar o número de estágios torna-se contra produtivo, já que o processador precisa operar a freqüências de clock cada vez mais altas para compensar a perda de desempenho causada pelo maior número de estágios. Um bom exemplo disto é o Pentium 4 com core Prescott (que veremos a seguir), que precisou incorporar um conjunto de várias melhorias apenas para compensar a perda de desempenho causada pelo novo aumento no número de estágios.
Além de ser mais lento que um Athlon Thunderbird da mesma freqüência, o Willamette é também substancialmente mais lento que um Pentium III do mesmo clock em praticamente todos os aplicativos. Todas as demais alterações feitas pela Intel, explicadas a seguir servem como paliativos para tentar diminuir a perda de desempenho trazida pelo maior número de estágios de pipeline.
Foi justamente devido a isto que a Intel optou por lançar diretamente os modelos de 1.4 e 1.5 GHz do Pentium 4, pulando as versões de 1.1 e 1.2, que seriam o caminho mais óbvio já que o Pentium III ficou estacionado na versão de 1 GHz. Caso fosse lançado, um Pentium 4 de 1.1 GHz perderia para um Pentium III de 1 GHz, o que não seria uma boa propaganda.
Além da perda de desempenho, outro efeito colateral de se usar mais estágios de pipeline é o fato de tornar o processador maior e mais complexo e fatalmente bem mais caro de se produzir. O Pentium 4 de 0.18 micron mede 217 milímetros quadrados, quase o dobro do Athlon Thunderbird, que mede 120 mm². Isso significa que o Pentium 4 é proporcionalmente mais caro de se produzir.
Nenhum comentário:
Postar um comentário