O computador é capaz de realizar milhões de tarefas por segundo. Entretanto, esse grande número não é o suficiente em muitos casos. Por essa razão, além de adquirir componentes mais eficientes para implementar em circuitos, técnicas de arquitetura também foram adotadas. O pipeline é um exemplo dessas técnicas que melhoram o desempenho do computador.
O que é pipeline?
A palavra “pipeline”, se traduzida diretamente, torna-se “gasoduto”. Porém, na computação essa expressão pode ser traduzida para termos como “segmentação de instruções” ou “paralelismo”.
Pipeline é uma técnica em sistemas computacionais onde o processador executa múltiplas tarefas ao mesmo tempo. Cada tarefa é dividida em etapas menores, e em seguida são organizadas de modo que após o fim de cada etapa, uma outra nova etapa seja iniciada. Além disso, as etapas respeitam a mesma ordem que as instruções chegam ao processador, respeitando a ordem de chegada das instruções que devem ser processadas pelo CPU.

A imagem acima mostra a execução de tarefas em pipeline. Cada instrução é dividida em 4 partes: A, B, C e D. Cada instrução precisa de 4 unidades de tempo para ser finalizada. No caso do exemplo acima, todas as 5 instruções são finalizadas na unidade 7, totalizando 8 etapas (zero também está sendo contado).
Caso as tarefas fossem executadas uma de cada vez, isso traria problemas de desempenho para a máquina e a velocidade de processamento iria cair drasticamente como mostra na figura abaixo:

A figura acima mostra a execução de tarefas sem utilizar a técnica de pipeline. O total de unidades de tempo aumenta drasticamente, chegando quase a ter o triplo do tempo da arquitetura que usa pipeline.
Qual é a quantidade de instruções paralelas que um pipeline pode processar?
Cada instrução paralela que o processador pode processar simultaneamente é chamada de estágio.
Em geral, quanto mais estágios em um pipeline, maior será a quantidade de operações paralelas que podem ser processadas. No exemplo acima, na primeira imagem, as etapas A, B, C e D formam um estágio.
A quantidade de estágios de um pipeline depende da arquitetura do processador e do número de estágios que ele suporta. Processadores modernos possuem pipelines de 10 até 20 estágios. Porém, esse número pode variar. Além disso, a quantidade de estágios do pipeline também é influenciada por outros fatores como:
- Velocidade do clock (sinal de relógio) do processador
- Largura do barramento (bus)
- Complexidade da instrução executada
Entretanto, um grande número de estágios também pode trazer alguns problemas como latência e dificuldades de sincronização entre estágios. A latência ocorre devido ao tempo total necessário para completar estágios adicionais, diminuindo o desempenho do processador. Um grande número de estágios também traz um grande nível de complexidade. Erros em alguma etapa de um estágio podem atrasar a disponibilização de informações necessárias para outros estágios, trazendo problemas de sincronização. Enfim, o equilíbrio é o mais importante.
Como a velocidade do clock (sinal de relógio) afeta o pipeline?
O sinal de relógio pode ser comparado com a pulsação de um coração e nada mais é do que um sinal digital pulsante. Em uma máquina, o clock é usado para manter os componentes de um sistema em sincronização. O clock envia pulsos para todos os circuitos do sistema, fazendo com que os componentes trabalhem em sincronia.

O gráfico acima representa os pulsos que um clock emite. Ao todo, são dois valores, zero e um. Também é possível observar que o gráfico acima completa 3 ciclos.
A quantidade de pulsos por segundo pode ser medida. Com isso, obtêm-se a frequência dos pulsos gerados pelo clock do sistema. A unidade de frequência da quantidade de pulsos de um sistema é medido por Hz (Hertz). No caso da imagem acima, um ciclo é completado em 1 segundo, portanto sendo 1Hz.
| Hz | Pulsos por segundo |
|---|---|
| 1Hz | 1 pulso por segundo |
| 10Hz | 10 pulsos por segundo |
| 100Hz | 100 pulsos por segundo |
| 1kHz | 1.000 pulsos por segundo |
| 1MHz | 1.000.000 pulsos por segundo |
| 1GHz | 1.000.000.000 pulsos por segundo |
Quanto maior a frequência do sistema, mais rápido as instruções serão processadas. Porém, outros fatores como eficiência do pipeline também influenciam na velocidade do sistema. O desempenho de uma pipeline pode ser medida com o IPC.
O que é o IPC em um pipeline?
IPC é a abreviação de “Instruções por ciclo”.
O IPC é um método para medir a eficiência de um processador na execução de instruções em um sistema computacional. Assim, é possível saber quantas instruções podem ser processadas em cada ciclo de clock. Enquanto a frequência do clock mostra quantos ciclos podem ser concluídos por segundo, o IPC mostra quantas tarefas o CPU pode concluir em cada ciclo.
O desempenho de um pipeline pode ser medido com o IPC. O número total de instruções executadas em um certo período de tempo é dividido pelos ciclos do clock desse mesmo período.
a = número de instruções
b = número de ciclos
Por exemplo, um processador que executa 1.000.000.000 de instruções em 5 segundos com o sinal de relógio a 1GHz teria um IPC de 1/5 ou 0,2 como mostra a resolução abaixo:
Processadores modernos tem uma média de IPC entre 1 e 4. Um IPC baixo pode significar ineficiência do processador.
Em geral, a frequência do clock é um fator importante para o desempenho do pipeline de um processador. A frequência do clock é o que determina o ritmo que o pipeline é executado. Por isso, quanto maior a frequência do clock, mais rápido o pipeline é executado. Outro método de medir a eficiência do circuito é com o CPI.
O que é o CPI?
CPI é a abreviação de “Ciclos de clock por instrução”.
É um método para medir o número médio de ciclos de clock necessários para executar uma única instrução em um processador. Esse termo é mais usado do que o IPC.
a = Tempo Total de Execução
b = Número Total de Instruções
Suponhamos um tempo total de execução seja de 40.000.000 e o total de instruções seja 18.000.000. O resultado seria o que a resolução abaixo mostra:
O CPI ideal é 1. Quanto mais perto desse valor, melhor será a eficiência.
Comparação de um processador pipeline com um não pipeline
Para comparar um processador pipeline com um processador sem pipeline basta utilizar a fórmula abaixo:
- SpeedUp = Tempo de execução (sem pipeline) / Tempo de execução (com pipeline)
Imagine um processador A de 2GHz sem pipeline com um CPI de valor 4 e outro processador B de 4GHz com pipeline e um CPI de valor 1. O tempo de execução de cada processador pode ser obtido com a fórmula abaixo:
- Tempo de execução = CPI * Tempo de 1 ciclo
- Tempo de 1 ciclo = 1 / Frequência de clock
O cálculo do processador A pode ser feito da seguinte forma:
- Processador A = 4 * (1 / 2)
- Processador A = 2
O tempo de execução do processador A é de 2 nanosegundos. Em seguida calculamos o tempo de execução do processador B:
- Processador B = 1 * (1 / 4)
- Processador B = 0,25
O tempo de execução do processador B é de 0,25 nanosegundos. Uma vez que temos o tempo de execução de cada processador, podemos calcular o SpeedUp para ver o quanto o processador sem pipeline (A) é mais rápido do que o processador com pipeline (B).
- SpeedUp = 2 / 0,25
- SpeedUp = 8
O resultado 8 é a taxa de aceleração que pode ser adquirida com o processador com pipeline.
Conclusão
O pipeline é uma técnica de processamento onde as tarefas são divididas em múltiplos estágios. Conforme um estágio é finalizado, outras tarefas podem ser processadas simultaneamente.
A técnica de pipeline aumenta o número de tarefas que podem ser executadas simultaneamente, diminuindo o tempo total necessário para processar instruções.