Pipelining
PROF. FELIPE FERREIRA DE OLIVEIRA
Sumário
 Introdução
 Problemas com Pipelining
Introdução
 Pipelining é uma técnica de implementação aonde





múltiplas instruções são executadas simultaneamente.
Aproveita o paralelismo das ações necessárias para
executar uma instrução.
Pipeline é como uma linha de montagem. Etapas
diferentes completam diferentes partes da instrução.
Cada passo é denominado pipe stage ou pipe segment
Throughput é dado por instruções por tempo
O tempo dado para que uma instrução passe para o
próximo passo é dado por x ciclos de processador (x é
normalmente 1, mas pode ser 2.)
Introdução
 A meta de um projetista de pipeline é balancear o tamanho
de cada estágio de pipeline.
 Quando tudo está balanceado, temos um tempo por
instrução com pipeline de
 Implicando que o ganho é igual ao número de estágios de
pipe. Porém, isso é uma situação ideal. Na prática, depende
da dependência entre dados e do tratamento do
processador.
Introdução
 Dois pontos de vista
 Processador demora múltiplos ciclos de clock por
instrução, então teremos uma diminuição de CPI
 Processador usa um ciclo de clock por instrução, então o
pipeline diminui o tempo do ciclo de clock
 Diferentemente de outras técnicas de paralelismo,
ela não é visível ao programador.
Introdução
 Uma arquitetura RISC é caracterizada por poucas
propriedades norteadoras, o que facilita a
implementação.



Todas as operações aplicadas a dados localizam-se em
registros.
As únicas operações que interagem com a memória é load e
store
Existem poucas instruções com todas de tamanho único
Introdução
 No nosso estudo, trabalharemos com o MIPS de 64
bits. 32 registradores. Possui 3 classes de instruções.

Instruções ULA


Instruções load-store


Os operandos localizam-se em um ou dois registradores. O
resultado é colocado em outro registrador. As instruções básicas
são soma(DADD), subtração(DSUB) e lógicas(AND, OR)
Um registrador contém a base e outro o offset. Base+offset contém
o endereço do dado na memória.
Desvios e Jumps
Introdução
 Antes de entrarmos em pipeline, vamos entender o
funcionamento sem o uso do pipeline. No exemplo a
seguir, todas as intruções demoram no máximo 5
ciclos de clock. A partir daí, implementaremos
pipeline para vermos o ganho do desempenho dado
em CPI.
Introdução
 Os cinco ciclos de clock para execução de uma instrução são:
1.
Ciclo de instrução de busca: manda o contador do programa (PC)
2.
3.
4.
5.
para a memória e busca a instrução. Soma mais 4 ao PC (cada
instrução possui 4 bytes)
Ciclo de decodificação: decodifica a instrução e atualiza os
registradores, analisando se será necessário algum desvio.
Ciclo de Execução: a ALU gera um endereço de memória somando
uma base com offset OU executa instrução ALU registradorregistrador determinado no campo de opcode do registrador OU
executa instrução ALU registrador-imediato operando o
registrador e dado residente na memória
Ciclo de Acesso a Memória: escreve (write) ou lê (read) dados da
memória.
Ciclo Write/back: Escreve o resultado no registrador, o dado
vindo da memória ou da ALU
Introdução
 No nosso exemplo, um desvio leva 2 ciclos,
armazenamento demora 4 ciclos e o resto demora 5
ciclos.
 Supondo que o desvio acontece com uma freqüência
de 12% e armazenamento tem freqüência de 10%,
então teremos um CPI de 4.54.
 Agora, vamos imaginar um pipeline para a execução
acima. Portanto, a cada ciclo de clock, uma nova
instrução começa a ser executada. E em todos os
momentos todos os estágios do pipe estão
trabalhando em uma execução. Figura a seguir.
Introdução
Introdução
 O caso acima é o ideal, mas não real. Podem ocorrer
conflitos que impedem a ilustração anterior, tais
como:



Realizar instruções com os mesmos dados
Uma única ALU não pode determinar um endereço e efetuar
operações matemáticas simultaneamente.
Alguns passos utilizam os mesmos elementos
 O que fazer para otimizar?
 Separação de memória: instruções e dados. Caches separados.
 Passo ID e WB acessam o registrador. Necessita-se de duas
leituras e uma escrita em cada ciclo. No primeiro semiciclo se
faz a escrita e no segundo semiciclo se faz a leitura.
Introdução
 Para se iniciar uma nova instrução em cada clock
precisa-se incrementar o PC que deve ser feito
durante a fase IF. Mas e se, durante a fase seguinte
(ID), for constatado que se trata de um desvio?

Essa peculiaridade deve ser tratada pelo sistema
 Para melhor administração (evitar conflitos), é
inserido ainda um registrador de pipeline
intermediário entre cada ciclo de clock que, muitas
vezes, é omitido nos esquemas. Também garante
armazenamento temporário de dados quando não se
vai usá-los seqüencialmente
Introdução
 Exemplos:
 Numa função store, se lê o dado do registrador na fase ID, mas
apenas o usa durante a fase MEM. Logo, passa direto por dois
registradores de pipeline
 O resultado de uma instrução ALU é calculada durante a fase
EX, mas só é armazenada em WB. Logo o dado passa direto
por dois registradores de pipeline
 Nomenclatura dos registradores de pipeline
 IF/ID, ID/EX, EX/MEM e MEM/WB
Introdução
 ANÁLISE DE PROBLEMAS CENTRAIS NO
PIPELINING
 Pipeline aumenta o número de instruções completas por
tempo, mas não aumenta o tempo de uma única
instrução. Pode ocorrer até mesmo o aumento de tempo
de execução de uma única instrução, mas o ganho total
sempre será maior.
 Limitações da Tecnologia:



O fato de não aumentar o tempo de execução de uma única
instrução.
Questão do desequilíbrio dos pipes. Existência de pipes gargalos.
Latência do Pipeline
Instrudução
Problemas no Pipeline
 Podem ocorrer problemas que impedem a execução
do fluxo de instruções. Isso acarreta diminuição no
speedup. Existem 3 tipos:



Problemas estruturais: devido conflito de recursos quando
o hardware não consegue resolver simultaneamente todas as
instruções sobrepostas simultaneamente.
Problemas de dados: quando uma instrução depende do
resultado de outra que ainda está sendo executada.
Problemas de controle: quando um desvio é executado ou
outras instruções que alteram o PC.
Problemas no Pipeline
 Quando ocorre problemas, torna-se necessário parar
o pipeline.
 Para evitar problemas, pode-se adiar determinados
processos e retardar outros.
 Ao ser necessário uma parada em determinado
processo, os processos que encontram-se a frente
continuam normalmente, porém os que ficam atrás
também param. Durante uma parada nenhum novo
processo é inserido.
Problemas no Pipeline
 ANÁLISE DE PERFORMANCE COM PARADAS
 Logicamente, que as paradas causam decremento no
desempenho. Observemos as equações abaixo, considerando
um CPI pipelined ideal.
Problemas no Pipeline
 PROBLEMAS ESTRUTURAIS
 Quando um processador usa pipeline, a execução
sobreposta de instruções requer pipelining de
unidades funcionais e duplicação de recursos para
permitir que todos os possíveis combinações de
instruções no pipeline. Se alguma combinação de
instruções não pode ser acomodado por causa de
conflitos de recursos, está caracterizado um
problema estrutural.
Problemas no Pipeline
 PROBLEMAS ESTRUTURAIS
 Ocorre quando uma unidade funcional não está totalmente na
estrutura pipeline
 Os recursos não foram duplicados de forma a garantir todas as
combinações de instruções.
 Toda vez que eles ocorrem, ocorre a parada, aumentado o CPI
(CPI = 1 no caso ideal)
 Exemplos:
uma única porta de escrita em registrador.
 Alguns processadores com pipeline compartilham uma mesma
memória para dados e instruções. Isso garante um ciclo de clock
de parada. Ver figuras a seguir

Problemas no Pipeline
Problemas no Pipeline
Problemas no Pipeline
 Exemplo
 Supondo o CPI pipelined ideal de 1 e que as operações de
referência a memória são 40% do total. Um processador com
problema estrutural tem um tempo de processamento 1,05
maior do que um sem problema estrutural. Qual o ganho do
sistema sem problema?
Problemas no Pipeline
 PROBLEMAS ESTRUTURAIS
 Solução
Separar dados em duas memórias distintas: dados e instruções
 Separar memória cache: dados e instruções
 Uso de buffers que armazenam instruções temporariamente


Lógico que o desempenho de um sistema sem problemas
estruturais é superior, porém os custos de duplicação de
recursos muitas vezes não compensa o ganho. Depende da
aplicação.
Problemas no Pipeline
 PROBLEMAS DE DADOS
 Problemas de dados ocorrem quando o pipeline
muda a ordem de leitura / escrita dos operandos em
relação ao que seria quando não-pipeline.
Problemas no Pipeline
 PROBLEMAS DE DADOS
 Minimizando paradas devido problemas de dados
através de encaminhamento



O resultado da ALU armazenado nos registradores de pipeline
EX/MEM e MEM/WB são usados como entradas da ALU das
próximas instruções.
Se o hardware com encaminhamento perceber que a instrução
anterior irá escrever nos registradores que serão lidos na atual
instrução, o controle lógico seleciona o registrador de pipeline
da instrução anterior como entrada de sua ALU.
O encaminhamento deve ocorrer para até dois passos
anteriores
Problemas no Pipeline
 Outro exemplo
 Soma
 Load Double Word
 Store Double Word
Problemas no Pipeline
 Infelizmente, existem alguns casos em que uma
parada é inevitável.
 No caso acima o dado (R1) só é disponibilizado no
quarto ciclo de clock.
Problemas no Pipeline
 Portanto, temos que ter uma parada obrigatória até
que o dado seja buscado na memória
Download

Pipelining