Pipeline

Em processadores sem pipeline, as instruções são executadas uma atrás da outra.

Já em processadores com pipeline, as várias etapas que compõem a instrução são sobrepostas na execução, o que requer uma unidade de controle mais complexa e registradores adicionais.

As etapas que compõem a pipeline exemplificada são:

    • BI - Busca de Instrução

    • DI - Decodificação de Instrução

    • BO - Busca dos Operandos

    • EI - Execução da Instrução

    • AR - Armazenamento do Resultado

Essas são as típicas etapas de uma pipeline de um processador RISC. No caso cinco etapas, que são chamadas tecnicamente de estágios. O ganho teórico de desempenho com uma pipeline é correspondente a quantidade de estágios, mas nunca é alcançado.

É importante ressaltar que o ganho de desempenho de uma CPU com uma pipeline decorre do aumento no fluxo de execução de instruções como pode ser visto na figura seguinte. Note que o tempo para se executar uma instrução é constante. Como a instrução é dividida em estágios, há um fluxo maior delas. É o que ocorre em uma linha de montagem, conceito do qual deriva a técnica de pipeline. Podemo até dizer que Henry Ford foi um gênio da informática, mas nunca soube disso! ;) :P

Mencionei que o ganho teórico nunca é obtido na prática. Isto se deve à ocorrência de conflitos (hazards) que provocarão a parada da pipeline (pipeline stall), também chamada de bolha. As causas desses conflitos são bastante triviais, como veremos a seguir

    • Conflito de Desvio => Uma instrução de desvio fez com que o desvio fosse tomado e as instruções carregadas na pipeline precisam ser descartadas;

    • Conflito de Dados => A instrução que está na pipeline depende de um valor que está sendo manipulado pela instrução anterior e terá que esperar. Algo muito comum em expressões matemáticas com a dependência de resultados intermediários;

    • Conflito Estrutural => Um recurso do hardware não pode ser usado porque já estava em uso (duas instruções não podem usar o mesmo componente da CPU ao mesmo tempo, assim como dois corpos não podem ocupar o mesmo lugar no espaço).

A figura a seguir mostra o que acontece na pipeline com um conflito de desvio:

E agora, o que acontece em um conflito de dados. O conflito estrutural tem basicamente o mesmo comportamento.

Para tentar reduzir a ocorrência de conflitos são implementadas técnicas sofisticadas como:

  • Previsão de desvios;

  • Execução fora de ordem (out of order execution);

  • Execução especulativa.

Essas técnicas acabam desembocando na implementação de despacho múltiplo e o grau de complexidade a que elas conduziram, aliadas a questões de aquecimento, consumo de energia e dificuldades de implementação física dos chips levaram a era dos microprocessadores multicore, com mais de uma CPU em um único chip. Cada CPU com sua pipeline...


Referências:

  • Organização e Projeto de Computadores – A Interface Hardware/Software - David A. Patterson e John L. Hennessy.

  • Arquitetura e Organização de Computadores - William Stallings.

  • Organização Estruturada de Computadores - Andrew S. Tanenbaum e Todd Austin.


Conteúdos Relacionados:

RISC e CISC, Despacho Múltiplo, Estrutura e Funcionamento do Computador e Princípio de Funcionamento de um Microprocessador.


Retornar para Arquitetura de Computadores.