Você está na página 1de 7

ORGANIZAÇÃO E

ARQUITETURA DE
COMPUTADORES -
PIPELINE EM
PROCESSADORES
Entenda como os processadores otimizam seu desempenho
através da técnica de Pipeline

Atualizado em 2023/02/13 16:58

Ativar fundo escuro


INTRODUÇÃO

Pipeline, muitas vezes traduzido para português como paralelismo, é


uma técnica que permite os processadores executarem tarefas
diferentes ao mesmo tempo sendo capazes de respeitar a ordem das
instruções que chegam ao processador. Essa técnica aumenta o
desempenho do processador e reduz o tempo de execução global de
tarefas. Vamos compreender como o Pipeline em
processadores funciona.
A imagem acima mostra um exemplo hipotético e
meramente didático da execução com Pipeline de 4
tarefas com 4 atividades cada: lavar, secar, dobrar e
guardar roupas. Note que cada atividade sobrepõe outra
atividade durante a execução das 4 tarefas ao longo do
tempo. Para compreender porque o Pipeline faz com que
os processadores trabalhem mais rápido, vamos ver a
execução dessas mesmas tarefas sem o uso de
Pipeline.

Considere que cada uma das 4 atividades (lavar, secar,


dobrar e guardar) da tarefa demore 1 unidade de tempo.
Vamos considerar aqui que a unidade
é hora. Sem Pipeline nós só poderíamos começar uma
nova tarefa após finalizada a tarefa anterior. Ou seja, 4
tarefas vezes 4 horas cada, resultaria em um total de 16
horas para executar todas as 4 tarefas com suas 4
atividades cada. Uma tarefa só começa após a tarefa
anterior terminar completamente suas atividades. A figura
abaixo exemplifica esse funcionamento:

O problema aqui é que após o término da primeira


lavagem de roupas dentro da máquina de lavar, essa
máquina ficará ociosa até que a roupa passe pela
secadora, seja dobrada e guardada. Somente após todo
esse processo é que a máquina de lavar irá ser usada
novamente.

É exatamente em função desse problema que o Pipeline


em processadores possibilita reduzir o tempo total de
execução de múltiplas tarefas. Imagine que após tirar as
roupas da máquina de lavar e colocá-las na secadora
você já colocasse novas roupas sujas para lavar. Ou
seja, no mesmo instante de tempo você terá a máquina
de lavar e a secadora
funcionando. Paralelamente executando múltiplas
atividades é possível maximizar o uso dos recursos e ao
mesmo tempo reduzir o tempo global de execução
das tarefas!
A imagem acima mostra lado à lado o tempo de
execução sem Pipeline e com Pipeline. Note que nos
dois casos a tarefa Lavanderia (lavar roupas) dura 4
horas. No entanto com Pipeline minimiza-se a
quantidade de recursos ociosos e reduz-se o tempo
global necessário para executar todas as 4 tarefas.

Substitua agora as atividades individuais (lavar, secar,


passar e guardar) da tarefa Lavanderia por instruções de
máquina como somar dois números, carregar valores da
memória principal e etc. O Pipeline permite executar
essas instruções paralelamente, exatamente como no
exemplo da lavanderia.
ESTÁGIOS DE UM PIPELINE
A quantidade de operações paralelas que um processador é capaz de
executar é chamada de estágios. Um pipeline de 8 estágios, por
exemplo, consegue executar 8 operações concorrentes.

É justamente em função do número de estágios que podemos aferir


quão mais rápido um processador pipeline é comparado a um não
pipeline. Vamos compreender essa relação logo à diante. Primeiro
vamos entender a relação do clock (sinal de relógio) e o tempo
individual das instruções.

SINAL DE RELÓGIO E INSTRUÇÕES


Imagine os vários circuitos especializados de um processador: soma,
leitura de dados na memória principal, armazenamento em
registradores e etc. Cada circuito desses leva um tempo para ser
executado.

Para o devido funcionamento de processadores, planeja-se que cada


um desses circuitos tomem apenas o tempo de um ciclo
de clock (sinal de relógio). Logo, todo o conjunto de circuitos do
processador deve ser ajustado para que 1 ciclo de clock demore o
tempo da instrução mais lenta dentre todas as instruções disponíveis.

É intuitivo perceber isso: imagine se o ciclo de clock do sistema


computacional fosse 1 nano segundo e houvesse ao menos uma
instrução cujo circuito demorasse 2 ns para executar. Quando
chamada, essa instrução seria "atropelada" pelo ciclo
de clock subsequente, uma vez que ainda não terminou sua
execução. A imagem abaixo demonstra a escolha do clock em função
da instrução mais lenta:

PERFORMANCE DO PIPELINE
No geral, pode-se dizer que o número de estágios de um
pipeline representa o ganho em relação a um processador não
pipeline. Um processador com 7 estágios dentro do pipeline seria 7
vezes mais rápido que um não pipeline.

Existe uma fórmula simples que mostra a vantagem da vazão


(throughput) de instruções:

Por mais que tenhamos um clock baseado na instrução


mais lenta, o pipeline consegue ter um tempo de
execução por instrução menor. Na verdade, cada
instrução irá demorar o tempo de clock, no entanto o fato
de várias instruções estarem sendo executadas em
paralelo faz com que a vazão de instruções seja maior.

Vamos considerar um exemplo em que tem-se 5000


instruções a serem executadas. Suponhamos
um clock de 10 nano-segundos. Um processador não
pipeline levaria 5000 * 10 = 50000 ns. Se tivermos um
processador com um pipeline de 12 estágios, temos que
ao final da execução de todas instruções, o tempo
decorrido seria 50000 / 12 = 4166.6 ns.
LIMITAÇÕES E CONFLITOS DO PIPELINE
Quando fazemos esses cálculos estamos
generalizando. Pipelines sofrem de algumas limitações na hora de
suas construções. Algumas situações impossibilitam que o
processador execute em paralelo.

Existem conflitos estruturais que ocorrem quando um


circuito implementa mais de uma instrução. Se essas
instruções forem necessárias em dois lugares diferentes
apenas um poderá executar. No exemplo da lavanderia
imagine que você tenha uma máquina lava-e-seca.
Nesse caso, ninguém poderia utilizar a secadora caso
alguém já estivesse lavando roupa. Esse é um dos
fatores que fazem com que processadores
especializados para gráficos, placas de vídeo por
exemplo, tem muito mais instruções de máquina e
núcleos (processadores isolados). Eles evitam conflitos
estruturais.

Outros conflitos seriam os conflitos de controle. Eles


ocorrem quando a entrada de uma instrução depende da
execução de outra e ambas estão em execução
no pipeline. Nesse caso o processador precisa esperar
para dar sequência na execução.
CONCLUSÃO
Pipeline é uma técnica de implementação de sistemas
computacionais onde o processador consegue paralelizar a execução
de instruções de modo a maximizar a vazão de instruções
processadas. Essa técnica adiciona complexidade na criação desse
tipo de processador mas garante processadores mais eficientes.

Nesse artigo vimos superficialmente os conceitos por trás


dos pipelines. No entanto há muito a se aprofundar na eletrônica
digital e nos circuitos lógicos que possibilitam a construção desses
processadores.

Do ponto de vista de software é interessante ver que, mesmo


escrevendo programas com threads e conhecendo como o sistema
operacional gerencia a execução concorrente dos programas, ainda
assim existem muitas camadas de otimizações em nível
de hardware que também são desenhadas para otimizar o paralelismo
de nossos programas.

REFERÊNCIAS
[1] Organização e projeto de computadores - A interface
hardware/software, David Patterson & John Hennessy (capítulo 6 da
segunda edição do livro)

Você também pode gostar