Pipeline

Técnica de sistemas computacionais que dividi tarefas em estágios e executa de forma simultânea, diminuindo o tempo total de processamento.

Categoria de Tecnologia

Postado em 09 fevereiro 2023

Atualizado em 09 fevereiro 2023

Palavras-chave: pipeline,tecnica,metodo,técnica,método,processa,processamento,estagio,sistema,tarefa

Visualizações: 2064



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.

tarefas com pipeline

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:

tarefas sem pipeline

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.

sinais digitais pulsantes

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.

IPC=ab IPC = \frac{a}{b}

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:
=1.000.000.000/1.000.000.0005=1.000.000.000/5.000.000.000IPC=1/5 = 1.000.000.000/1.000.000.000 * 5\\ = 1.000.000.000/5.000.000.000\\ IPC = 1/5

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.

CPI=ab CPI = \frac{a}{b}

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:
=40.000.000/18.000.000CPI=2,222... = 40.000.000/18.000.000 \\ CPI = 2,222...

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.

Projetos práticos

Criando um jogo de guerra nas estrelas em javascript usando a biblioteca p5.js

Jogo simples de guerra espacial desenvolvido em javascript. Esse jogo usa cálculos de física para simular efeitos de atrito e inércia.

Caixa eletrônico usando arquitetura limpa

Usando JavaFX e arquitetura limpa para criar um aplicativo de caixa eletrônico extremamente simples.

Desenvolvendo o campo de visão de um personagem em um plano 2D

Detectando objetos que entram dentro do campo de visão do personagem. Útil para servir de "gatilho" para eventos em um jogo.

Implementando um algoritmo de pathfinding

Implementando um programa que encontra a menor distância entre dois pontos dentro de um labirinto usando o algoritmo A* (a-estrela).

Criando um sistema de integração contínua (CI/CD)

Fazendo a integração contínua de Jenkins, Sonatype Nexus, Sonatype, JUnit e Gradle para automatizar processos repetitivos. Prática bastante usada em tecnologias de DevOps.

Veja também

Afinal, para que servem os cookies que sempre são solicitados quando entramos em uma página?

A política de privacidade é obrigatória para qualquer site que utiliza dados pessoais do usuário. Porém, quais dados são esses especificamente?

O DNS torna a interface do navegador mais amigável aos usuários

Antes de podermos visualizar o site, o endereço que digitamos na barra de endereço do nosso navegador passa por várias etapas, para só então podermos visualizar o site pela primeira vez...

Sistema embarcado

Mini-computador fixado a um circuito elétrico integrado com outros componentes essenciais, como memória, componente de entrada e saída

ERP Enterprise Resource Planning

Software que possibilita o gerenciamento de todos os recursos da empresa em um só sistema. Esses recursos são capital, pessoas, coisas e informações.

Método scrum

Tem como objetivo entregar o projeto com velocidade e satisfazer as necessidades dos clientes entregando cada funcionalidade do software separadamente.

Barramento (Bus)

Caminhos entre os componentes do computador que são responsáveis pela transferência de informações de controle, endereçamento e dados.