Você está na página 1de 71

Arquitetura de Computadores

Pipeline e MIPS Pipeline


Ivan Saraiva Silva
Pipeline
4 pessoas (A, B, C, D) possuem
sacolas de roupa para lavar, secar e
dobrar
A B C D

Lavar leva 30 minutos

Secar leva 40 minutos

Dobrar leva 20 minutos


Uso “normal” dos recursos
6 7 8 9 10 11 Meia-noite
Tempo

30 40 20 30 40 20 30 40 20 30 40 20
T A
a
r
B
e
f
C
a
s
D

• Lavanderia seqüencial leva 6 horas para terminar


• Se eles conhecessem computação, quanto tempo levaria?
Uso em pipeline dos recursos
6 7 8 9 10 11 Meia-noite
Tempo

30 40 40 40 40 40
T A
a
r
B
e
f
C
a
s
D

• Lavanderia com pipelining leva 3,5 horas


A B C D

2m 2m 2m 3m
Rodas Chassis Motor Porta
Conceito de Pipeline
• Pipeline permite a sobreposição temporal de
diversas fases de execução de instruções.
• Em outras palavras, o hardware processa
mais de uma instrução de cada vez, sem
esperar que uma instrução termine antes de
começar a seguinte
Conceito de Pipeline
• Pipeline não melhora a latência de uma
única tarefa, mas melhora a vazão de todo
trabalho.
• Tempo de execução de uma instrução é o
mesmo, com ou sem pipelining.
• Ganho começa a existir a partir da segunda
instrução.
Desempenho com e sem Pipeline
• Supondo um programa com
– N instruções
– K ciclos por instrução ou K estágios no pipeline
– Ciclos e estágios de tempo T
• Tempo de execução sem pipelining:
N
N×K×T
K K

• Tempo de execução com pipelining: N


K × T + (N-1) × T T
Desempenho com e sem Pipeline
• Supondo um programa com
– N instruções
– K ciclos por instrução ou K estágios no pipeline
– Ciclos e estágios de tempo T
• Tempo de execução sem pipelining:
N
N×K×T
K K

• Tempo de execução com pipelining: N


K × T + (N-1) × T T
Pipeline - Desempenho
• Ganho de desempenho:
NKT 1
=
KT + ( N - 1)T 1 + N - 1
N NK

• No limite (Número de instruções N → ∞):


Ganho → K (número de estágios)
Pipeline - Desempenho
• Ganho de desempenho:
NKT 1
=
KT + ( N - 1)T 1 + N - 1
N NK

• No limite (Número de instruções N → ∞):


Ganho → K (número de estágios)
MIPS Pipeline
Pipeline MIPS
• Tradicionalmente, as instruções do MIPS
são executadas em 5 etapas:
– Busca da instrução na memória
– Leitura dos registradores, enquanto a instrução
é decodificada
– Execução de uma operação ou cálculo de um
endereço
– Acesso a um operando na memória
– Escrita do resultado em um registrador
Projeto do Bloco Pipeline
Representação do Pipeline MIPS
BI DI EX MEM ER

• BI: busca de instrução (memória de


instruções)
• DI: decodificação da instrução e leitura do
banco de registradores (banco de
registradores sendo lido)
• EX: estágio de execução da instrução (ULA)
• MEM: acesso à memória (memória de dados)
• ER: escrita do resultado no banco de
registradores (banco de registradores sendo
escrito)
Projeto do Bloco Pipeline
Registradores do Pipeline
Projeto do Bloco Pipeline
Delimitam os estágios e guardam informações
Projeto do Bloco Pipeline
Instruções fluem uma após a
outra (a cada ciclo) da
esquerda para a direita
Projeto do Bloco Pipeline
Instruções fluem uma após a
outra (a cada ciclo) da
esquerda para a direita
Execução Pipeline : Caso LW
• Estágio 1: Busca de Instruções
Execução Pipeline : Caso LW
• Estágio 2: Decodificação Busca de operandos
Execução Pipeline : Caso LW
• Estágio 3: Execução – Cálculo de endereço
Execução Pipeline : Caso LW
• Estágio 4: Acesso à memória
Execução Pipeline : Caso LW
• Estágio 5: Salva Resultado
Execução Pipeline : Caso LW
NÃO FUNCIONA:
Instruções diferentes no
• Estágio 5: Salva Resultado
estágio 2 e 5
Execução Pipeline : Caso LW
• Informação do registrador destino deve
acompanhar a istrução
Projeto do Bloco Pipeline

Multiplexador
incluído no
caminho de dados
Pipeline da Unidade de
Decodificação
• Controle: Gerado noestágio 2 (decodificação),
acompanha a instrução
Projeto do Bloco Pipeline
and $0, $2, $1
Projeto do Bloco Pipeline

sub $2, $1, $3


$2

$1 - $3
$2 and $1
$1
Execução Pipeline
Execução Pipeline
• Vamos visualizar a execução do seguinte
trecho no MIPS pipeline
lw $10, 20($1)
sub $11, $2, $3
and $12, $4, $5
or $13, $6 $7
add $14, $8, $9
Conflitos de execução
Pipeline MIPS - Conflitos
• Conflitos
– “Situações de execução no pipeline em que a
instrução seguinte não pode ser executada no
próximo ciclo de relógio”
• Tipos de Conflitos:
– De dados
– De controle
Pipeline MIPS - Conflitos
• Conflito de dados
– A execução de uma instrução depende de um
dado de instrução anterior e o dado ainda não
está disponível
– Pior caso na instrução de LOAD (lw)
lw $2, 20($1) add $2, $20, $1
and $4, $2, $5 sub $4, $2, $5
Dependência de dados
• Considerando o código abaixo, escrito para o
MIPS
sub $s2, $s1, $s3 # registrador $s2 é escrito pela instrução sub
and $s0, $s2, $s1 # primeiro operando ($s2) depende de sub
or $s4, $s1, $s2 # segundo operando ($s2) depende de sub
add $s3, $s2, $s2 # primeiro e segundo operandos ($s2)
# dependem de sub
sw $s1, 100($s2) # base ($s2) depende de sub

• Vamos estudar as dependências de dados


existentes.
Dependências de dados
Valor de $2
No tempo $s2 =10 $s2 =10 $s2 =10 $s2 =-20 $s2 =-20 $s2 =-20 $s2 =-20

sub $2, $1, $3 BI DI EX MEM ER

and $0, $2, $1 BI DI EX MEM ER

or $4, $1, $2 BI DI EX MEM ER

add $3, $2, $2 BI DI EX MEM ER

sw $1, 100($2) BI DI EX MEM ER


Dependências de dados
Valor de $2
No tempo $2 =10 $2 =10 $2 =10 $2 =-20 $2 =-20 $2 =-20 $2 =-20

sub $2, $1, $3 BI DI EX MEM ER

and $0, $2, $1 BI DI EX MEM ER

or $4, $1, $2 BI DI EX MEM ER

add $3, $2, $2 BI DI EX MEM ER

sw $1, 100($2) BI DI EX MEM ER


O dado é gerado aqui

Dependências de dados
Valor de $2 O dado é usado no
No tempo $2 =10 $2 =10 $2 =10 $2 =-20 $2 =-20 $2 =-20 $2 =-20
aqui

sub $2, $1, $3 BI DI EX MEM ER


O dado está aqui
and $0, $2, $1 BI DI EX MEM ER

or $4, $1, $2 BI DI EX MEM ER

add $3, $2, $2 BI DI EX MEM ER

Para ser usado


sw $1, 100($2) aqui BI DI EX MEM ER
$1, $2 $2 and $1 $1 - $3

and $0, $2, $1


sub $2, $1, $3

sub $2, $1, $3


add $3, $2, $2

or $4, $1, $2
and $0, $2, $1

or $4, $1, $2

add $3, $2, $2 BI DI EX MEM ER

sw $1, 100($2) BI/DI DI/EX EX/MEM MEM/ER


sub $2, $1, $3
and $2, $2, $1
Projeto do Bloco Pipeline
or $4, $1, $2

add $3, $2, $2

sw $1, 100($2)
$1

$2

$1 - $3
$1
$2
$2
$4 $2 $2

Detecta e seleciona fonte


Registrados destino Tarefa
• Como detectar o conflito de dados
– Dica: veja o formato das instruções (tipoa R e I)

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits


op rs rt rd shamt funct
Formato tipo R (Operações entre registradores)

6 bits 5 bits 5 bits 16 bits


op rs rt constante ou endereço
Formato tipo I (Endereçamento imediato)
Detectando o Conflito
• MEM para EX
• Para o operando A da ULA (ALUupper)
– EX/MEM.RegWrite = 1
– EX/MEM.RegisterRd ≠ 0
– EX/MEM.RegisterRd = (ID/EX.RegisterRs OR
ID/EX.RegisterRt)
• Para o operando B da ULA (ALUlower)
– EX/MEM.RegWrite = 1
– EX/MEM.RegisterRd ≠ 0
– EX/MEM.RegisterRd = ID/EX.RegisterRt
Detectando o Conflito
• WB para EX
• Para o operando A da ULA (ALUupper)
– MEM/WB.RegWrite = 1
– MEM/WB.RegisterRd ≠ 0
– MEM/WB.RegisterRd = (ID/EX.RegisterRs OR
ID/EX.RegisterRt)
• Para o operando B da ULA (ALUlower)
– MEM/WB.RegWrite = 1
– MEM/WB.RegisterRd ≠ 0
– MEM/WB.RegisterRd = ID/EX.RegisterRt
ID/EX EX/MEM MEM/WR

MEM
Conflito de Dados com LOAD

And $4, $2, $5

lw $2, 20($1)
O dado é usado no

NOP
mesmo ciclo em
que é
gerado
que é gerado
$1, $2 $2 and $1
M[4 + $3]
add $3, $2, $2

and $0, $2, $1


or $4, $1, $2

Lw $2, 4($3)
Bolha
BI DI EX MEM ER
M[4 + $3]
BI/DI DI/EX EX/MEM MEM/ER

Lw $2, 4($3)
Aqui está a instrução Isto é um LW
Seguinte ao LW Lw $2, 4($3)
Conflito de Dados com LOAD

Solução: Parar o pipeline


por um ciclo
Impede alteração da
Detecta o conflito
próxima instrução
Projeto do Bloco Pipeline
Injeta um ciclo de
bolha

And $4, $2, $5

BOLHA OU NOP
M[PC+8]

lw $2, 20($1)
Projeto do Bloco Pipeline
ID/EX.MemRead
indica que um lw será
executado
Pipeline MIPS - Conflitos
• Conflito de controle
– Saltos condicionais (beq) são decididos no
estágio MEM.
– Até lá duas instruções foram buscadas e a
execução iniciadas
– A solução envolve a antecipação da
comparação de registradores e do calculo do
endereço de salto
Pipeline MIPS - Conflitos
instri+3 instri+2 instri+1 beq $2,$3,7
Projeto do Bloco Pipeline
ID.Flush Insere uma bolha (todos os dados
da instrução buscada são “resetados”
Projeto do Bloco Pipeline
Projeto do Bloco Pipeline
• Reduzindo o atraso na
decisão de salto
condicional
– O cálculo do endereço
efetivo de salto é
antecipado para o
estágio 2
(decodificação)
– A comparação dos
registradores também é
feita neste estágio
Execução beq
Execução beq
Bloco Básico

beq
beq $2, $0, 20
addi $2, $2, -1

lw $8, 20($1)

beq

beq
Projeto de Bloco Pipeline
• Resolvido?
– NÃO : Os registradores a serem comparados
por um beq poder estar sendo modificados por
instruções que precedem o beq
– Conflito de dados

addi $2, $2, -1 lw $8, 20($1)

beq $2, $0, 20 beq $4, $8, 6


beq $2,$0,20 bubble addi $2,$2,-1
Projeto do Bloco Pipeline
beq $4,$8,6 bubble bubble lw $8,20($1)

Você também pode gostar