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.