Tubulação de instrução

A tubulação de instrução é uma técnica utilizada no projeto de microprocessadores, microcontroladores e CPUs modernos para aumentar sua produção de instruções (o número de instruções que podem ser executadas em uma unidade de tempo).

A idéia principal é dividir (denominado "split") o processamento de uma instrução CPU, conforme definido pelo microcódigo de instrução, em uma série de etapas independentes de microoperações (também chamadas de "microinstruções", "microop" ou "µop"), com armazenamento no final de cada etapa. Isto permite que a lógica de controle das CPUs trate as instruções na taxa de processamento da etapa mais lenta, que é muito mais rápida do que o tempo necessário para processar a instrução como uma única etapa.

O termo gasoduto se refere ao fato de que cada etapa está carregando uma única microinstrução (como uma gota de água), e cada etapa está ligada a outra etapa (analogia; semelhante aos tubos de água).

A maioria das CPUs modernas é movida por um relógio. A CPU consiste internamente de lógica e memória (flip flops). Quando o sinal do relógio chega, os chinelos de dedo armazenam seu novo valor, então a lógica requer um período de tempo para decodificar os novos valores dos chinelos de dedo. Então chega o próximo pulso de relógio e os chinelos de dedo armazenam outros valores, e assim por diante. Ao quebrar a lógica em peças menores e inserir os flops entre as peças da lógica, o tempo requerido pela lógica (para decodificar valores até gerar saídas válidas dependendo destes valores) é reduzido. Desta forma, o período do relógio pode ser reduzido.
Por exemplo, a tubulação RISC é quebrada em cinco estágios com um conjunto de flops entre cada estágio, como se segue:

  1. Instruções de busca
  2. Instruções de decodificação e registro fetch
  3. Executar
  4. Acesso à memória
  5. Registrar escrever de volta

Os processadores com tubulação consistem internamente de estágios (módulos) que podem trabalhar de forma semi-independente em microinstruções separadas. Cada estágio é ligado por flops para o próximo estágio (como uma "cadeia") de modo que a saída do estágio seja uma entrada para outro estágio até que o trabalho de processamento de instruções seja feito. Tal organização dos módulos internos do processador reduz o tempo total de processamento das instruções.

Uma arquitetura semipipeline não é tão eficiente porque alguns módulos de CPU estão ociosos enquanto outro módulo está ativo durante o ciclo de instrução. O encanamento não remove completamente o tempo ocioso em uma CPU encanada, mas fazer com que os módulos de CPU trabalhem em paralelo aumenta o rendimento da instrução.

Diz-se que uma tubulação de instruções é totalmente encanada se ela puder aceitar uma nova instrução a cada ciclo do relógio. Uma tubulação que não está totalmente encanada tem ciclos de espera que atrasam o progresso da tubulação.

Duto básico de cinco estágios em uma máquina RISC (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). O eixo vertical é instruções sucessivas, o eixo horizontal é o tempo. Assim, na coluna verde, a primeira instrução está no estágio WB, e a última instrução está sendo submetida ao fetch de instruções.Zoom
Duto básico de cinco estágios em uma máquina RISC (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). O eixo vertical é instruções sucessivas, o eixo horizontal é o tempo. Assim, na coluna verde, a primeira instrução está no estágio WB, e a última instrução está sendo submetida ao fetch de instruções.

Vantagens e desvantagens da canalização

Vantagens do Pipelining:

  1. O tempo de ciclo do processador é reduzido; aumentando o rendimento da instrução. A tubulação não reduz o tempo necessário para completar uma instrução; em vez disso, aumenta o número de instruções que podem ser processadas simultaneamente ("de uma só vez") e reduz o atraso entre instruções completadas (chamado 'throughput').
    Quanto mais estágios de pipeline um processador tiver, mais instruções ele pode processar "de uma só vez" e menos atraso há entre as instruções concluídas. Todo microprocessador de
     uso geral predominante fabricado hoje usa pelo menos 2 estágios de gasoduto de até 30 ou 40 estágios.
  2. Se for usada tubulação, a unidade lógica Aritmética da CPU pode ser projetada mais rapidamente, mas será mais complexa.
  3. Em teoria, a tubulação aumenta o desempenho sobre um núcleo sem tubulação por um fator do número de estágios (assumindo que a freqüência do relógio também aumenta pelo mesmo fator) e o código é ideal para a execução da tubulação.
  4. As CPUs pipeline geralmente trabalham com uma freqüência de clock mais alta do que a freqüência de clock da RAM (a partir das tecnologias de 2008, as RAMs trabalham com baixas freqüências em comparação com as freqüências das CPUs) aumentando o desempenho geral dos computadores.

Desvantagens de Pipelining:

A tubulação tem muitas desvantagens, embora existam muitas técnicas usadas por CPUs e compiladores projetistas para superar a maioria delas; o seguinte é uma lista de inconvenientes comuns:

  1. O projeto de um processador não compactado é mais simples e mais barato de fabricar, o processador não compactado executa apenas uma única instrução de cada vez. Isto evita atrasos nas filiais (em Pipelining, cada filial é atrasada), bem como problemas quando as instruções em série são executadas simultaneamente.
  2. No processador de tubulação, a inserção de flops entre os módulos aumenta a latência das instruções em comparação com um processador não de tubulação.
  3. Um processador não compactado terá um rendimento de instrução definido. O desempenho de um processador encanado é muito mais difícil de prever e pode variar muito para diferentes programas.
  4. Muitos projetos incluem gasodutos de até 7, 10, 20, 31 e até mais etapas; uma desvantagem de um gasoduto longo é quando um programa se ramifica, todo o gasoduto deve ser enxaguado (limpo). O maior rendimento dos dutos fica aquém quando o código executado contém muitas ramificações: o processador não pode saber antecipadamente onde ler a próxima instrução, e deve esperar que a instrução da ramificação termine, deixando a tubulação vazia. Esta desvantagem pode ser reduzida ao prever se a instrução de uma ramificação condicional irá ramificar-se com base na atividade anterior. Depois que a ramificação for resolvida, a próxima instrução tem que percorrer todo o caminho através do gasoduto antes que seu resultado fique disponível e o processador retome o "trabalho" novamente. Em tais casos extremos, o desempenho de um processador encanado pode ser pior do que o de um processador não encanado.
  5. Infelizmente, nem todas as instruções são independentes. Em uma simples tubulação, completar uma instrução pode exigir 5 etapas. Para operar com desempenho total, esta tubulação precisará executar 4 instruções independentes subseqüentes enquanto a primeira estiver sendo concluída. Qualquer uma dessas 4 instruções pode depender da saída da primeira instrução, fazendo com que a lógica de controle da tubulação espere e insira um ciclo de relógio de espera ou desperdiçado na tubulação até que a dependência seja resolvida. Felizmente, técnicas como o encaminhamento podem reduzir significativamente os casos em que a paralisação é necessária.
  6. Os programas de auto-modificação podem falhar em executar corretamente em uma arquitetura encanada quando as instruções que estão sendo modificadas estão próximas às instruções que estão sendo executadas. Isto pode ser causado pelo fato de as instruções já estarem na fila de entrada Prefetch, portanto a modificação pode não ter efeito para a próxima execução das instruções. As caches de instruções tornam o problema ainda pior.
  7. Perigos: Quando um programador (ou compilador) escreve um código de montagem, eles geralmente assumem que cada instrução é executada antes da próxima instrução estar sendo executada. Quando esta suposição não é validada por encanamento, faz com que um programa se comporte incorretamente, a situação é conhecida como um perigo. Existem
    várias
    técnicas para resolver os perigos ou trabalhar ao redor, tais como o encaminhamento e o atraso (inserindo uma barraca ou um ciclo de relógio desperdiçado).

Exemplos

Gasoduto genérico

À direita está um gasoduto genérico com quatro etapas:

  1. Buscar
  2. Decodificar
  3. Executar
  4. Escreva de volta

A caixa cinza superior é a lista de instruções esperando para ser executada; a caixa cinza inferior é a lista de instruções que foram concluídas; e a caixa branca do meio é a tubulação.

A execução é a seguinte:

Hora

Execução

0

Quatro instruções estão esperando para serem executadas

1

  • a instrução verde é obtida de memória

2

  • a instrução verde é decodificada
  • a instrução roxa é retirada da memória

3

  • a instrução verde é executada (a operação real é executada)
  • a instrução roxa é decodificada
  • a instrução azul é buscada

4

  • os resultados da instrução verde são escritos de volta ao arquivo de registro ou memória
  • a instrução roxa é executada
  • a instrução azul é decodificada
  • a instrução vermelha é buscada

5

  • a instrução verde é completada
  • a instrução púrpura é escrita de volta
  • a instrução azul é executada
  • a instrução vermelha é decodificada

6

  • A instrução roxa é completada
  • a instrução azul é escrita de volta
  • a instrução vermelha é executada

7

  • a instrução azul é completada
  • a instrução vermelha é escrita de volta

8

  • a instrução vermelha é completada

9

Todas as instruções são executadas

Bolha

Quando ocorre um "soluço" (interrupção) na execução, é criada uma "bolha" na tubulação na qual nada de útil acontece. No ciclo 2, a busca da instrução roxa é atrasada e o estágio de decodificação no ciclo 3 contém agora uma "bolha". Tudo por trás da instrução roxa também é atrasado, mas tudo na frente da instrução roxa continua com a execução.

Claramente, quando comparado com a execução acima, a bolha produz um tempo total de execução de 8 ticks em vez de 7.

As bolhas são como bancas (atrasos), nas quais nada de útil acontecerá para buscar, decodificar, executar e escrever de volta. É como um código NOP (abreviação de No OPeration).

Exemplo 1

Uma instrução típica para adicionar dois números poderia ser ADD A, B, C, que adiciona os valores encontrados nos locais de memória A e B, e depois coloca o resultado no local de memória C. Em um processador encanado, o controlador do gasoduto dividiria isso em uma série de tarefas semelhantes a:

LOAD A, R1 LOAD B, R2 ADD R1, R2, R3 STORE R3, C LOAD próxima instrução

Os locais 'R1' e 'R2' são registros na CPU. Os valores armazenados em locais de memória rotulados como 'A' e 'B' são carregados (copiados) nestes registros, depois adicionados, e o resultado é armazenado em um local de memória rotulado como 'C'.

Neste exemplo, a tubulação é composta de três etapas: carga longa, execução e armazenamento. Cada uma das etapas são chamadas etapas de gasoduto.

Em um processador não compactado, apenas uma etapa pode estar trabalhando de cada vez, de modo que toda a instrução tem que ser concluída antes que a próxima instrução possa começar. Em um processador encanado, todas as etapas podem estar trabalhando de uma só vez em instruções diferentes. Assim, quando esta instrução estiver no estágio de execução, uma segunda instrução estará no estágio de decodificação e uma terceira instrução estará no estágio de fetch.

Exemplo 2

Para entender melhor o conceito, podemos olhar para um gasoduto teórico de 3 estágios:

Estágio

Descrição

Carga

Ler instrução de memória

Executar

Executar instrução

Loja

Armazenar resultado em memória e/ou registros

e uma listagem de montagem de pseudo-códigos a serem executados:

CARGA #40, A      MOVE A, B ; copiar A em B ADD #20, B      LOJA B, 0x300 ; armazenar B na célula de memória 0x300

É assim que seria executado:

Relógio 1

Carga

Executar

Loja

CARREGAR

 

 

A instrução LOAD é obtida de memória.

Relógio 2

Carga

Executar

Loja

MOVE

CARREGAR

 

A instrução LOAD é executada, enquanto a instrução MOVE é buscada na memória.

Relógio 3

Carga

Executar

Loja

ADD

MOVE

CARREGAR

A instrução LOAD está na etapa de Store, onde seu resultado (o número 40) será armazenado no registro A. Enquanto isso, a instrução MOVE está sendo executada. Como deve mover o conteúdo de A para B, deve aguardar o término da instrução LOAD.

Relógio 4

Carga

Executar

Loja

ARMAZENAGEM

ADD

MOVE

A instrução STORE é carregada, enquanto a instrução MOVE está terminando e a ADD está calculando.

E assim por diante. Note que, às vezes, uma instrução dependerá do resultado de outra (como nosso exemplo MOVE). Quando mais de uma instrução faz referência a um determinado local para um operando, seja lendo-o (como uma entrada) ou escrevendo-o (como uma saída), a execução dessas instruções em uma ordem diferente da ordem original do programa pode levar à situação de perigo (mencionada acima).

Duto genérico de 4 estágios; as caixas coloridas representam instruções independentes uma da outraZoom
Duto genérico de 4 estágios; as caixas coloridas representam instruções independentes uma da outra

Uma bolha no ciclo 3 atrasa a execuçãoZoom
Uma bolha no ciclo 3 atrasa a execução

Páginas relacionadas

  • Pipeline (informática)
  • Computação paralela
  • Paralelismo em nível de instrução

Perguntas e Respostas

P: O que é a tubulação de instrução?


R: Pipelinagem de instruções é uma técnica usada no projeto de microprocessadores, microcontroladores e CPUs modernos para aumentar sua produção de instruções, dividindo o processamento de uma instrução de CPU em uma série de passos independentes com armazenamento no final de cada passo.

P: Como funciona a tubulação?


R: Pipelining funciona decompondo a lógica em peças menores e inserindo flops entre peças de lógica, o que reduz o tempo necessário para que a lógica decodifique valores até gerar saídas válidas dependendo desses valores. Isso permite períodos de relógio mais rápidos.

P: Quais são alguns exemplos de pipelines?


R: Um exemplo de gasoduto é o gasoduto RISC, que é dividido em cinco estágios com um conjunto de "flops" entre cada estágio.

P: Como a tubulação aumenta a produção de instrução?


R: A tubulação aumenta a produção de instrução ao permitir que os módulos da CPU trabalhem em paralelo, o que reduz o tempo ocioso durante um ciclo de instrução e aumenta o tempo total de processamento.

P: Todos os oleodutos estão completamente encanados?


R: Não, nem todos os oleodutos estão completamente encanados; alguns oleodutos têm ciclos de espera que atrasam o progresso no oleoduto.

AlegsaOnline.com - 2020 / 2023 - License CC3