O que é pipeline no processador? Entenda as vantagens da segmentação de instruções

Descubra o que é pipeline, como um processador se beneficia da execução paralela de instruções e por que essa técnica (quase) sempre melhora o desempenho

Paulo Higa
Por
Intel Pentium D, um processador dual-core com arquitetura CISC x86; modelo tinha pipeline de 31 estágios (Imagem: Everton Favretto/Tecnoblog)
Intel Pentium D, um processador dual-core com arquitetura CISC x86; modelo tinha pipeline de 31 estágios (Imagem: Everton Favretto/Tecnoblog)

Pipeline é um método usado em processadores para executar múltiplas instruções simultaneamente. A técnica melhora o desempenho do sistema e funciona a partir da divisão de uma tarefa em partes menores, que podem ser processadas em conjunto.

O processamento paralelo é uma das principais vantagens do pipeline. Como mais de uma instrução pode ser executada ao mesmo tempo, um chip pode trabalhar de maneira mais eficiente. Entenda o funcionamento do pipeline e suas vantagens na arquitetura de um processador.

Como funciona o pipeline em um processador?

O pipeline é uma técnica usada em arquitetura de processadores para melhorar a eficiência e o desempenho do chip. Ele divide o processamento de uma instrução em múltiplos estágios (passos), permitindo que várias instruções sejam executadas ao mesmo tempo.

No contexto de processamento paralelo, o pipeline é um tipo de paralelismo a nível de instrução. Uma instrução é um comando dado a um computador para executar uma tarefa, como operações matemáticas (adição, subtração, multiplicação e divisão), operações lógicas (e, ou) e controle de fluxo (condições, repetições e desvios).

Como o pipeline com execução de instruções fora de ordem influencia a execução da tarefa (Imagem: Vitor Pádua/Tecnoblog)
Como o pipeline com execução de instruções fora de ordem influencia a execução da tarefa (Imagem: Vitor Pádua/Tecnoblog)

As tarefas que um chip executa são sequências de instruções. A implementação de um pipeline permite que um processador trabalhe na instrução 1 em um estágio, na instrução 2 em outro passo e assim por diante. A quantidade de instruções executadas paralelamente depende do tamanho do pipeline e da eficiência da arquitetura.

Na analogia com um restaurante fast-food, um cozinheiro pode estar preparando ingredientes em uma bancada (instrução 1) enquanto outro monta um sanduíche (instrução 2) e outro coloca um lanche em uma embalagem (instrução 3). Quando esse paralelismo acontece, a comida fica pronta de maneira mais rápida e eficiente.

Um dos benefícios possíveis com um pipeline é a execução de instruções fora de ordem (out-of-order execution, ou OoOE). Quando um chip só pode processar instruções na ordem (in-order execution), uma lentidão em uma instrução causa atraso em todas as instruções subsequentes.

Já em pipeline com processamento fora de ordem, as instruções que não dependem de uma instrução mais lenta podem ser concluídas primeiro. Dessa forma, uma tarefa pode ser executada em menos tempo e usar os recursos do processador de maneira mais eficiente.

O que é execução de instruções na ordem e fora de ordem no pipeline?

Execução de instruções na ordem (in-order execution) é um método no qual as instruções são executadas pelo processador na mesma ordem em que aparecem no código do programa.

execução de instruções fora de ordem (out-of-order execution, ou OoOE) é um método no qual o processador decide em qual ordem irá executar as instruções do programa, de modo a diminuir a ociosidade de recursos do chip e concluir a tarefa em menos tempo.

Quais processadores têm pipeline com execução fora de ordem (OoO)?

  • Intel Core: é a principal linha de processadores da Intel para PCs. Inclui desde CPUs mais simples (como os Core 3) até as mais avançadas (como os Core Ultra 9);
  • AMD Ryzen: família de chips da AMD para PCs baseada em microarquitetura Zen. É composta de processadores básicos a avançados (Ryzen 3, Ryzen 5, Ryzen 7 e Ryzen 9) e usa execução fora de ordem para otimizar o desempenho;
  • Apple Silicon: nome dado aos chips baseados em arquitetura Arm projetados pela Apple. É usado principalmente em Macs e iPads;
  • Qualcomm Snapdragon: marca de System-on-a-Chip (SoC) da Qualcomm, uma das principais empresas de chips para celulares com Android. Núcleos mais poderosos, como os Kryo presentes na série 8, têm execução OoO para maximizar a performance;
  • Samsung Exynos: é a principal alternativa aos processadores Snapdragon em smartphones e tablets da linha Galaxy. Também possui pipelines com execução fora de ordem em núcleos de CPU mais potentes.
Processador Intel Core 2 Duo T7200, lançado em julho de 2006 (Imagem: Everton Favretto/Tecnoblog)
Processador Intel Core 2 Duo T7200, lançado em julho de 2006 (Imagem: Everton Favretto/Tecnoblog)

Execução de instruções fora de ordem é mais rápido que na ordem?

A execução de instruções fora de ordem (OoO) geralmente é mais rápida que a execução na ordem, porque pode executar instruções de forma simultânea, evitando ociosidade e melhorando a eficiência de uso do pipeline do processador.

No entanto, um processador com execução de instruções na ordem pode ser melhor em algumas situações. Se houver muitas instruções que não podem ser paralelizadas, a execução OoO não oferecerá ganhos significativos, por exemplo.

Além disso, uma arquitetura com execução OoO tende a ser mais complexa e consumir mais energia, o que pode limitar o desempenho em computadores com restrições térmicas ou movidos a bateria, como celulares e smartwatches. Nesses casos, um chip com execução na ordem pode ser mais adequado.

Quais são os estágios mais comuns em um pipeline?

Busca, decodificação e execução de instruções são os estágios mais comuns no pipeline de um processador. O ciclo busca-decodifica-executa (fetch-decode-execute) também é chamado de ciclo de instrução. Em muitos pipelines, existem ainda os estágios de acesso à memória e write-back.

Busca de instrução

No estágio de busca de instrução, o processador localiza a próxima instrução a ser executada. Isso é feito por meio de um registrador, chamado ponteiro de instruções, que guarda o endereço da próxima instrução. Depois da busca, o contador é incrementado e passa a apontar para a próxima instrução da sequência.

Decodificação de instrução

No estágio de decodificação de instrução, o processador interpreta a instrução e determina qual operação será executada, como adição, subtração ou carregamento de memória. Ele também define os operandos da instrução, ou seja, os valores ou locais de memória com os quais a instrução irá operar.

Execução de instrução

No estágio de execução de instrução, a operação determinada na etapa anterior é executada. Um cálculo matemático, por exemplo, é realizado pela Unidade Lógica e Aritmética (ULA) do processador. Já uma operação de memória envolve a movimentação de dados nos registradores do chip. Após a execução, o processador busca a próxima instrução e recomeça o ciclo.

Acesso à memória

Acesso à memória é o estágio no qual uma instrução carrega (load) ou salva (store) dados em uma memória, que pode ser uma RAM ou uma memória cache (L1, L2 e L3).

Write-back

Write-back é o estágio no qual o resultado de uma instrução é escrito (write) nos registradores do processador.

Quantos estágios de pipeline tem um processador moderno?

O número de etapas varia de acordo com o chip.

Arquiteturas baseadas em RISC têm um estágio clássico de cinco passos: busca, decodificação, execução, acesso à memória e write-back. Porém, a implementação muda dentro da própria arquitetura: uma CPU Arm Cortex-A57 tem pipeline de mais de 15 estágios, enquanto um núcleo Arm Cortex-M0+ possui apenas 2 estágios.

Processadores como os Intel Pentium 4 baseados em microarquitetura Prescott, lançados em 2004, tinham pipeline de 31 estágios, considerado muito longo. Um dos objetivos do pipeline extenso era construir CPUs com clock mais alto, mas os problemas com thermal throttling dificultaram os planos da fabricante.

Processador Intel Core 2 Duo T7200, uma CPU com dois núcleos e microarquitetura Merom, de 14 estágios no pipeline (Imagem: Everton Favretto/Tecnoblog)
Processador Intel Core 2 Duo T7200, uma CPU com dois núcleos e microarquitetura Merom, de 14 estágios no pipeline (Imagem: Everton Favretto/Tecnoblog)

Quanto maior o pipeline, mais rápido é o processador?

Não necessariamente. Um pipeline mais longo teoricamente permite que um processador execute mais instruções ao mesmo tempo. Porém, quando há muitos estágios no pipeline, pode haver um aumento no consumo de energia do chip e maior número de riscos (hazards), que ocorrem quando uma instrução não pode ser paralelizada com eficiência.

O que são os riscos (hazards) ao pipeline de instruções do chip?

Hazards (riscos) no pipeline são problemas que impedem a execução paralela de instruções. Quando eles acontecem, uma instrução demora mais tempo para ser processada e o desempenho do chip pode ser reduzido.

Há três tipos de hazards:

  • Hazard de dados: quando uma instrução depende dos resultados de outra instrução em execução. Pode acontecer quando o processador está somando dois números e a próxima instrução depende do resultado dessa adição;
  • Hazard estrutural: quando mais de uma instrução em execução precisa do mesmo recurso. Ocorre quando duas instruções querem acessar a memória ao mesmo tempo, mas só existe uma porta de acesso à memória, por exemplo;
  • Hazard de controle: quando o fluxo de instruções de um programa muda. Acontece, por exemplo, quando as próximas instruções começam a ser processadas no pipeline antes que o processador perceba que essas instruções deveriam ser puladas devido a um operação condicional.

O que é branch prediction no processador?

Branch prediction é uma técnica usada em processadores modernos que tenta adivinhar o resultado de uma instrução condicional antes que o resultado da instrução seja conhecido. Tem como principal função evitar os hazards de controle no pipeline.

Um hazard de controle pode acontecer quando há uma instrução condicional (se acontecer “isso”, faça “aquilo”) e, para otimizar o uso de recursos, o processador começa a fazer “aquilo” antes de descobrir que “isso” é falso. O objetivo era manter o pipeline ocupado, mas, como as instruções deveriam ser descartadas, houve desperdício de recursos.

Um processador com branch prediction usa o conceito de execução especulativa (speculative execution), ou seja, o chip executa instruções de forma especulativa, já que não tem certeza de que elas realmente deveriam ser executadas. Se a adivinhação estiver correta, o processador ganhou tempo; caso contrário, desperdiçou recursos.

Spectre era uma falha de segurança que explorava a execução especulativa do pipeline do processador (Imagem: Paulo Higa/Tecnoblog)
Spectre era uma falha de segurança que explorava a execução especulativa do pipeline do processador (Imagem: Paulo Higa/Tecnoblog)

Em geral, os mecanismos de branch prediction e execução especulativa são bastante precisos em processadores modernos com pipeline de execução fora de ordem, logo, o ganho de desempenho compensa os desperdícios. No entanto, essa tecnologia pode ter vulnerabilidades, como a Spectre, descoberta em 2018, que afetava quase todos os processadores do mundo.

Relacionados

Escrito por

Paulo Higa

Paulo Higa

Ex-editor executivo

Paulo Higa é jornalista com MBA em Gestão pela FGV e uma década de experiência na cobertura de tecnologia. No Tecnoblog, atuou como editor-executivo e head de operações entre 2012 e 2023. Viajou para mais de 10 países para acompanhar eventos da indústria e já publicou 400 reviews de celulares, TVs e computadores. Foi coapresentador do Tecnocast e usa a desculpa de ser maratonista para testar wearables que ainda nem chegaram ao Brasil.

Temas populares