39
Pipeline

Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Embed Size (px)

Citation preview

Page 1: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Pipeline

Page 2: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Visão Geral de Pipelining

Instruções MIPS têm mesmo tamanhoMais fácil buscar instruções no primeiro estágio e

decodificar no segundo estágio IA-32

Instruções variam de 1 byte a 17 bytes Instruções traduzidas em microoperações Pentium-4 usa pipeline de microoperações

MIPS tem poucos formatos de instruçãoRegistrador origem na mesma posiçãoSegundo estágio pode ler banco de registradores ao

mesmo tempo em que hardware está determinando que tipo de instrução foi lida

Page 3: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Hazards: situação em que próxima instrução não pode ser executada no ciclo de clock seguinte. Três tipos:Hazards estruturaisHazards de dadosHazards de controle

Page 4: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Hazards EstruturaisHardware não pode admitir a combinação de

instruções que queremos executar no mesmo ciclo de clock

Hazards de DadosPipeline precisa ser interrompido porque os dados

para executar a instrução ainda não estão disponíveis Ex.: add $s0, $t0, $t1

sub $t2, $s0, $t3 add não escreve resultado até o quinto estágio

Acontecem com muita frequência

Page 5: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

SoluçãoNão precisamos esperar instrução terminarHardware adicionado para ter o item que falta

antes do previsto: forwarding ou bypassing200 400 600 800 10000Tempo

IF ID EX MEM WBadd $s0, $t0, $t1

IF: Busca instrução, ID: decodifica/lê registrador, EX: execução, MEM: memóriaWB: Escreve resultado. Sombreado lado direito: Leitura, esquerdo: escrita. Sem Sombreado: não usado

Page 6: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

200 400 600 800 10000Tempo

IF ID EX MEM WBadd $s0, $t0, $t1

Ordem de execução doprograma (em instruções)

IF ID EX MEM WBsub $t2, $s0, $t3

Page 7: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Forwarding só válido se estágio destino estiver mais adiante no tempo

Não pode impedir todos os stalls no pipelineEx: load de $s0 ao invés de add

Page 8: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

200 400 600 800 10000Tempo

IF ID EX WBlw $s0, 20($t1)

Ordem de execução doprograma (em instruções)

IF ID EX MEM WBsub $t2, $s0, $t3

MEM

Bolha Bolha Bolha Bolha Bolha

Page 9: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Hazard de Controle (ou desvio): necessidade de tomar decisão baseado nos resultados de uma instrução enquanto outras então sendo executadasEx: operação de desvio

Três opções

Page 10: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Primeira Opção: Causar stall no pipelineimediatamente após buscarmos um desvioEsperar até que o pipeline determine resultado do

desvioEndereço então disponível para determinar próxima

instrução Supondo hardware extra para testar

registradores, calcular endereço do destino e atualizar PC no segundo estágio...

Page 11: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Busca instrução ALU Acesso

à dadosReg Reg

Busca instrução ALU Acesso

à dadosReg Reg

Busca instrução ALU Acesso

à dadosReg Reg

200 400 600 800 1000 1200 14000

Ordem de execução doprograma (em instruções)

Tempo

200

200

add $4, $5, $6

beq $1, $2, 40

Bolha Bolha Bolha Bolha Bolha

400or $7, $8, $9

Page 12: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Segunda Opção: Previsão para tratar desviosTécnica simples: prever que os desvios não

serão tomados

Page 13: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Versão mais sofisticada: alguns desvios previstos como tomados e outros como não tomados Ex.: Assumir que loop sempre volta para trás

Duas versões anteriores estáticas / estereotipadas Previsores dinâmicos

Escolhas dependem do comportamento de cada desvio Podem ser alteradas durante a vida de um programa Mantém histórico, usando comportamento passado para prever

futuro Previsão pode ser superior a 90%

Page 14: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Quando pipeline erra, controle terá de garantir que as instruções após o desvio errado não tenham efeitoPipeline reiniciado a partir do endereço de

desvio apropriadoPipelines mais longos aumentam o problema

(aumentam o custo do erro de previsão)

Page 15: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Terceira opção: Desvio adiadoSempre executa a próxima instrução

sequencial, com desvio ocorrendo após esse atraso de uma instrução

Instrução não afetada pelo desvio add $4, $5, $6

beq $1, $2, 40Útil quando desvios são curtos

Page 16: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards

Harzards estruturais: Unidade de ponto flutuante Harzard de controle: Programas de inteiros

Mais desvios, além de desvios menos previsíveis Harzard de dados: inteiros e ponto flutuante

Inteiros Escalonamento de instruções mais complexo Acesso menos regular e maior uso de ponteiros

Ponto flutuante Menor frequência de desvios Padrão de acesso mais regular

Page 17: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Caminho de Dados Usando Pipeline Para passar algo de um estágio anterior do

pipeline para um posterior, informação precisa ser colocada em um registradorCaso contrário, informação é perdida quando próxima

instrução entrar nesse estágio Cada componente lógico do caminho de dados

só pode ser usado dentro de um único ciclo do pipelineCaso contrário, hazard estrutural

Page 18: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Controle de um Pipeline

PC

Add

Endereçode Leitura

Instrução

Memória deinstruções

4

Registradorde Leitura 1

Registradorde Leitura 2

Registradorpara escrita

Dadospara escrita

Dados de leitura 1

Dados de leitura 2

Registradores

Extensãode sinal

16 32

MUX

MUX

Add

ALUZero

Resultado da ALU

Deslo-camento

de 2 àEsq.

Memória dedados

Endereço

Dadospara Escrita

Dadosde leitura

MUX

0

1

0

1

IF/ID ID/EX EX/MEM MEM/WB

0

1

Branch

OrigPC

OrigALU

EscreveReg

EscreveMem

LeMem

MemParaReg

0

1

RegDst

ControleDa ALU

OpALUMUX

6

Instrução[20:16]

Instrução[15:11]

Instrução[15:0]

Page 19: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Controle de um Pipeline

Controle

IF/ID

Instrução

ID/EX EX/MEM MEM/WB

WB

M

EXWB

M WB

Page 20: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards de dados e forwarding

RegistradoresMUX

ALUMemória

dedados

ID/EX EX/MEM MEM/WB

MUX

MUX

MUX

Unidadede Forward

RdRtRtRs

EX/MEM.RegistradorRd

MEM/WB.RegistradorRd

ForwardA

ForwardB

Page 21: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

RegistradoresMUX

ALUMemória

dedados

ID/EXEX/MEM MEM/WB

MUX

MUX

MUX

Unidadede Forward

RdRtRtRs

EX/MEM.RegistradorRd

MEM/WB.RegistradorRd

ForwardA

ForwardB

IF/ID

Memóriade

InstruçõesPC

Controle

Page 22: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards de Dados e Stalls

Leitura ainda pode causar um hazard:Uma instrução tenta ler um registrador após

uma instrução load que escreve no mesmo registrador

Precisamos de uma unidade de detecção de hazardOpera durante estágio ID, inserindo stall entre

load e seu uso

Page 23: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Tempo (em ciclos de clock)

Ordem de execução doprograma (em instruções)

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WBlw $2, 20($1)

and $4, $2, $5

or $8, $2, $6

add $9, $4, $2

slt $1, $6, $7

Page 24: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazards de Dados e Stalls

Se instrução sofre stall, precisamos evitar também que próxima instrução avanceNão atualizar PC e IF/ID

Instrução no estágio IF continuará a ser lida usando o mesmo PC

Registradores no estágio ID continuarão a ser lidos usando os mesmos valores

Inserir nops Colocar 0 em todos os sinais de controle Serão filtrados: nenhum valor modificado se todos os sinais

iguais a zero

Page 25: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Tempo (em ciclos de clock)

Ordem de execução doprograma (em instruções)

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WBlw $2, 20($1)

and $4, $2, $5

or $8, $2, $6

add $9, $4, $2

and $4, $2, $5

Page 26: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazard de Desvio

Uma instrução precisa ser buscada a cada ciclo para sustentar o pipeline

A decisão do desvio não ocorre até o estágio MEM

Conforme visto, este atraso sobre a decisão de que instrução buscar é chamado de hazard de desvio ou controle

Page 27: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazard de Desvio

Reg

Reg

CC 1

Time (in clock cycles)

40 beq $1, $3, 7

Program execution order (in instructions)

IM Reg

IM DM

IM DM

IM DM

DM

DM Reg

Reg Reg

Reg

Reg

RegIM

44 and $12, $2, $5

48 or $13, $6, $2

52 add $14, $2, $2

72 lw $4, 50($7)

CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9

Reg

Ordem de execução doprograma (em instruções)

Tempo (em ciclos de clock)

Page 28: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazard de Desvio

Considere que o desvio não foi tomado Podemos considerar que desvio não será tomado Caso seja tomado, precisamos descartar instruções buscadas e

decodificadas Execução continua no destino do desvio

Se desvio tomado na metade das vezes e descartar instruções for barato Otimização reduz pela metade custo do hazard de desvio

Como descartar instruções? Alteramos valor de controles para zero Fazer flush nas instruções nos estágios IF, ID e EX do pipeline

quando instrução de desvio atinge MEM

Page 29: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Hazard de Desvio

Técnica: pesquisar o endereço da instrução para ver se desvio foi tomado da última vezCaso tenha sido, busca-se instruções a partir do

mesmo lugar da última vez Tabela de histórico de desvios (ou buffer de previsão

de desvios) usado na implementação Pequena memória indexada pela parte menos significativa

do endereço da instrução de desvio Contém um bit dizendo se desvio foi tomado recentemente

ou não

Page 30: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Exceções

Outra forma de hazard Controle deve ser transferido para rotina de

exceção imediatamente após instrução Entrada adicional (80000180HEX) no multiplexador que

fornece novo PC Necessário flush nas instruções que vêm após

instrução que causou exceção Estágio ID: fazemos OR com o sinal de stall da

unidade de detecção de hazard Estágio EX: novo sinal, EX.Flush

Page 31: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Exceções

Suponha que add $1, $2, $1 cause overflow

Se não pararmos execução no meio da instrução, programador não verá valor $1 que ajudou a causar exceçãoSinal EX.Flush pode ser usado para impedir

escrita do resultado no estágio WB

Page 32: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Exceções Cinco instruções ativas em qualquer ciclo de

clockDesafio: associar exceção à instrução correta Estágio do pipeline ajuda: instrução desconhecida

(ID), chamada ao SO (EX), ... Várias exceções podem ocorrer no mesmo ciclo

de clock Priorizar exceções Instrução mais antiga interrompida Flexibilidade para solicitações de E/S e defeitos de

hardware Não estão associados a instrução específica

Page 33: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Exceções

Dificuldade de associar exceção correta à instrução correta levou projetistas a relaxarem esse requisito em casos não críticos Interrupções (ou exceções) imprecisas SO determina que instrução causou o problema

Interrupções (ou exceções) precisas: associadas as instruções corretas

Page 34: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Pipelining Avançado

Pipelining explora paralelismo em potencial entre instruções Paralelismo em nível de instrução

Dois métodos para aumentar quantidade de paralelismo Aumentar profundidade do pipelining

Sobrepondo mais instruções Ciclo de clock encurtado

Replicar componentes (despacho múltiplo) Iniciar várias instruções em cada estágio do pipeline Permite que CPI seja menor que 1 => IPC (instrução por

ciclo)

Page 35: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Especulação

Técnica que permite que o compilador ou processador adivinhem as propriedades de uma instrução, para removê-la como uma dependência na execução de outras instruções Ex: buscamos, emitimos e executamos instruções,

como se previsão de desvio estivesse sempre correta Como pode estar errada, temos de verificar se a

escolha foi certaCaso tenha sido errada, temos de retroceder os

efeitos

Page 36: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Especulação Pode ser feita por compilador ou hardware Recuperação diferente

Compilador Adiciona instruções para verificar precisão da especulação Rotina de reparo chamada quando especulação incorreta

Hardware Resultados especulativos armazenados em buffer Se resultados corretos, resultados escritos em registradores ou na

memória Especular pode introduzir exceções que antes não

estavam presentes Load com endereço inválido quando especulação incorreta

Page 37: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

O Pipeline do Pentium 4 Vimos que P4 traduzia instruções IA-32 em

microoperações Microoperações executadas por pipeline especulativo e

escalonado dinamicamente Três microoperações por ciclo de clock Extensas filas

Até 126 microoperações pendentes PF inclui unidade separada para moves de pf Loads/Stores subdivididos em duas partes: cálculo do

endereço e referência real a memória ALUs de inteiros operam com o dobro da frequência de

clock

Page 38: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

O Pipeline do Pentium 4

Cache de trace mantém sequência pré-codificada de microinstruções

Unidade de PF também trata operações multimídia (MMX e SSE2)

Page 39: Pipeline - · PDF fileMais fácil buscar instruções no primeiro estágio e ... Ex: load de $s0 ao invés de add. Hazards Tempo 0 200 400 600 800 1000 lw $s0, 20($t1) IF ID EX WB

Despacho e renomeação de registradores

Previsão de desvios

Banco deRegistradores

Inteiro Inteiro Load Store

Unidade de commit

InstruçãoComplexa PF

Cache de Dados

Pré-busca edecodificaçãode instruções

Cache de trace

Fila de microoperações

Fila de operações com inteiros e ponto flutuante Fila de operação de memória