Você está na página 1de 19

Aprofundando o aprendizado 6-14-1

Aprofundando o aprendizado
Compreendendo pipelines por meio de desenhos
6.7 [5] <§6.2> Na página 298, mostramos um exemplo com a seguinte seqüência de código:

lw $10, 20($1)
sub $11, $2, $3

As Figuras 6.19 e 6.20 mostraram os diagramas de pipeline com múltiplos ciclos de clock para
essa seqüência de duas instruções, executando por 6 ciclos de clock. As Figuras de 6.14.1 a 6.14.3
mostram os diagramas de pipeline de ciclo único de clock correspondentes para essas duas instru-
ções. Observe que a ordem das instruções difere entre esses dois tipos de diagramas: a instrução mais
nova está na parte inferior direita do diagrama de pipeline com múltiplos ciclos de clock e está à es-
querda no diagrama de pipeline com ciclo único de clock.
Nos três exercícios a seguir, use a seguinte seqüência de código:
add $4, $2, $3
sw $5, 4($2)

Para a seqüência de código anterior, desenhe o diagrama de pipeline com múltiplos ciclos de
clock usando o formato mostrado na Figura 6.19.
6.8 [5] <§6.2> Para a seqüência de código no Exercício 6.6, desenhe o diagrama de pipeline com
múltiplos ciclos de clock usando o formato mostrado na Figura 6.20.
6.9 [15] <§6.2> Para a seqüência de código anterior, mostre o pipeline por 6 ciclos de clock usando
os diagramas de ciclo único de clock, como nas Figuras de 6.14.1 a 6.14.3. A Figura 6.14.4 possui
um diagrama de pipeline com ciclo único de clock em branco, que pode ser reproduzido para facilitar
sua tarefa!
6-14-2 Aprofundando o aprendizado ELSEVIER

lw $10, 20($1)
Busca de instrução
instrução
0
M
u
x
1

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


Add
Add
4 Add
result
Shift
left 2
Read

Instruction
uction
PC Endereço register 1 Read

Instr
Read data 1 Zero
Memória de register 2 ALU ALU
Read 0 Read
instrução Write
Wr ite Endereço 1
data 2 M result
register u data M
x Memória de u
Write
Write dados x
data Registradores 1 0
Wr
Write
ite
data
16 Exten- 32
são de
sinal

Clock 1

sub $11, $2, $3 lw $10, 20($1)


instrução
Busca de instrução Decodificação
0
de instrução
instrução
M
u
x
1

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


Add
Add
4 Add
result
Shift
left 2
Read
Instruction

register 1 Read
PC Endereço
Read data 1
Zero
Memória de register 2
Read 0 ALU ALU
instrução Write
Write Address Read 1
data 2 M result
register u data M
Memória de u
x x
Write
Write 1 dados
data Registradores Wr
Write
ite 0
data
16 Exten- 32
são de
sinal

Clock 2

FIGURA 6.14.1 Diagramas de pipeline com ciclo único para os ciclos de clock 1 (diagrama superior) e 2
(diagrama inferior). Esse estilo de representação de pipeline é um instantâneo de cada instrução executando durante
1 ciclo de clock. Nosso exemplo tem tudo menos duas instruções, de modo que no máximo dois estágios são identificados
em cada ciclo de clock; normalmente, todos os cinco estágios estão ocupados. As partes destacadas do caminho de dados
estão ativas nesse ciclo de clock. O load é buscado no ciclo de clock 1 e decodificado no ciclo de clock 2, com o subtract
buscado no segundo ciclo de clock. Para tornar as figuras mais fáceis de entender, os outros estágios do pipeline estão vazi-
os, mas normalmente existe uma instrução em cada estágio do pipeline.
Aprofundando o aprendizado 6-14-3

sub $11, $2, $3 lw $10, 20($1)


Decodificação Execução
Execução
0
de instrução
instrução
M
u
x
1

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


Add
Add
4 Add
result
Shift
left 2
Read
Instruction

PC Endereço register 1 Ler


Read dados 1
Zero
Memória de register 2
Ler 0 ALU ALU
instrução Write
Wr ite Endereço Ler 1
dados 2 M result
register u
dados M
x Memória de u
Escrever Registradores
Escrev dados x
dados 1 0
Escrever
dados
16 Exten- 32
são de
sinal

Clock 3

sub $11, $2, $3 lw $10, 20($1)


Execução
Execução Memória
Memória
0
M
u
x
1

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


Add
Add
Add
4 result
Shift
left 2
Read
Instruction
uction

register 1 Ler
PC Endereço
Read dados 1
Instr

Zero
Memória de register 2
Ler 0 ALU ALU
instrução Write
Write Endereço Ler 1
dados 2 M result
register u dados M
x Memória de u
Escrever
Escrev dados x
Registradores 1 0
dados Escre
Escrevver
dados
16 Exten- 32
são de
sinal

Clock 4

FIGURA 6.14.2 Diagramas de pipeline com ciclo único para os ciclos de clock 3 (diagrama superior) e 4
(diagrama inferior). No terceiro ciclo de clock do diagrama superior, lw entra no estágio EX. Ao mesmo tempo, sub
entra em ID. No quarto ciclo de clock (caminho de dados inferior), lw move-se para o estágio MEM, lendo a memória por
meio do endereço encontrado em EX/MEM no início do ciclo de clock 4. Ao mesmo tempo, a ALU subtrai e depois coloca
a diferença no EX/MEM ao final do ciclo de clock.
6-14-4 Aprofundando o aprendizado ELSEVIER

sub $11, $2, $3 lw $10, 20($1)


Memória
Memór ia Escrita de volta
Escrita volta
0
M
u
x
1

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


Add
Add
4 Add
result
Shift
left 2
Read

Instruction
PC Endereço register 1 Ler
Read dados 1
Zero
Memória de register 2
Ler 0 ALU ALU
instrução Write Endereço Ler 1
dados 2 M result
register u
dados M
x Memória de u
Escrever Registradores dados x
dados 1 0
Escrevver
Escre
dados
16 Exten- 32
são de
sinal

Clock 5

sub $11, $2, $3


Escr
Escrita
ita de volta
volta
0
M
u
x
1

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


Add
Add
Add
4 result
Shift
left 2
Read
Instruction
uction

register 1 Ler
PC Endereço
Read dados 1
Instr

Zero
Memória de register 2
Ler 0 ALU ALU
instrução Write Endereço Ler 0
dados 2 M result
register u dados M
x Memória de u
Escrever dados x
Registradores 1 1
dados Escre
Escrevver
dados
16 Exten- 32
são de
sinal

Clock 6

FIGURA 6.14.3 Diagramas de pipeline de ciclo único para os ciclos de clock 5 (diagrama superior)
e 6 (diagrama inferior). No ciclo de clock 5, lw completa escrevendo os dados de MEM/WB no registrador 10, e
sub envia a diferença em EX/MEM para MEM/WB. No próximo ciclo de clock, sub escreve o valor de MEM/WB no regis-
trador 11.
Aprofundando o aprendizado 6-14-5

0
M
u
x
1

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


Add
Add
Add
4 result
Shift
left 2
Instruction Read
register 1 Ler
PC Endereço
Read dados 1
Zero
Memória de register 2
Ler 0 ALU ALU
instrução Write Endereço Ler 0
dados 2 M result
register dados M
u u
x Memória de
Escrever dados x
1 1
dados Registradores Escrever
dados
16 Exten- 32
são de
sinal

Clock

FIGURA 6.14.4 Um diagrama de pipeline com ciclo único de clock para uso na ilustração da execução do
pipeline.

Rotulando diagramas de pipeline com controle


6.15 [20] <§6.3> Para entender como funciona o controle do pipeline, vamos considerar cinco ins-
truções percorrendo o pipeline:
lw $10, 20($1)
sub $11, $2, $3
and $12, $4, $5
or $13, $6, $7
add $14, $8, $9

Mostre as instruções no pipeline que precedem o lw como before <1>, before <2>, ..., e as instru-
ções após o add como after <1>, after <2>, ... As Figuras de 6.14.5 a 6.14.9 mostram essas instruções
prosseguindo pelos nove ciclos de clock necessários para concluir a execução, destacando o que está
ativo em um estágio e identificando a instrução associada a cada estágio durante um ciclo de clock. A
análise cuidadosa dessas figuras dará idéia de como funcionam os pipelines. Alguns itens que você
pode observar:
! Na Figura 6.14.7, você pode ver a seqüência dos números de registrador destino da esquerda
para a direita na parte inferior dos registradores de pipeline. Os números prosseguem para a di-
reita durante cada ciclo de clock, com o registrador de pipeline MEM/WB fornecendo o núme-
ro do registrador escrito durante o estágio WB.
! Quando um estágio está inativo, os valores das linhas de controle que estão inativas aparecem
como 0 ou X (para “don’t care”).
! Ao contrário do Capítulo 5, no qual a seqüência de controle exigia hardware especial, a seqüên-
cia de controle está embutida na própria estrutura do pipeline. Primeiro, todas as instruções le-
vam o mesmo número de ciclos de clock, de modo que não existe controle especial para a
duração da instrução. Segundo, toda a informação de controle é computada durante a decodifi-
cação da instrução, e depois passada pelos registradores de pipeline.
Usando o mesmo formato da Figura 6.14.5 e começando com o diagrama de pipelining vazio da
Figura 6.14.10, desenhe os diagramas de pipeline para a seqüência anterior, por um total de 4 ciclos
de clock.
6-14-6 Aprofundando o aprendizado ELSEVIER

ID : EX: MEM: WB :
IF: lw $10, 20($1) before<1> before<2> before<3> before<4>

0 IF/ID ID/E X EX/MEM MEM/WB


M 00 00
u WB
x
1 000 000 00
Control
Control M WB
0 0 0
0000 00 0
EX M WB 0
0 0

Add
Add

RegWrite
ite
Add
4 result

RegWr
Shift Branch
Branch

MemWrite
ite
left2

MemWr

MemtoReg
Read ALUSr c

Instruction
uction
register 1 Ler
PC Endereço
Read dados 1

Instr
register 2 Zero
Memória de Ler
it e
Writ
Wr 0 ALU ALU Ler
instrução dados 2 Endereço 1
register M result dados
u M
Escrever
Escrev Memória de u
Registradores x x
dados 1 dados
Escrevver
Escre 0
dados
Instructio n
Instructio
[15 – 0] Exten- Controle
são de ALU MemRead
Instructio n
Instructio sinal
[20 – 16]
0 ALUOp
Instructio n
Instructio M
u
[15 – 11] x
Clock 1 1
RegDst

IF : ID: EX: MEM: WB :


sub $11, $2, $3 lw $10, 20($1) before<1> before<2> before<3>

0 IF/ID ID/E X EX/ME M MEM/WB


M 11 00
u WB
x
1 lw Control
Control
010
M
000
WB
00
0 0 0
0001 00 0
EX M WB 0
0 0

Add
Add
Add
RegWrite
ite

4 result
RegWr

Shift Branch
Branch

MemWrite
ite
left2

MemWr
ALUSr c

MemtoReg
Instruction

1 Read
PC Endereço register 1 Ler $1
X Read dados 1
Memória de Zero
register 2 $X ALU ALU Endereço Ler
Ler 0 1
instrução Writ
Wr ite result dados
register dados 2 M M
u Memória de u
Escre
Escrevver Registradores x dados x
dados 1 0
Escrev
Escrever
dados
Instructio n
Exten-
20 [15 –0] 20 Controle
são de ALU
MemRead
Instructio n sinal
10 [20 –16] 10 0 ALUOp
Instructio n M
u
X [15 –11] X x
1
Clock 2 RegDs t

FIGURA 6.14.5 Ciclos de clock 1 e 2. A frase “before <i>” significa a i-ésima instrução antes de lw. A instrução lw
no caminho de dados superior está no estágio IF. Ao final do ciclo de clock, a instrução lw está nos registradores de pipeline
IF/ID. No segundo ciclo de clock, visto no caminho de dados inferior, o lw passa para o estágio ID, e sub entra no estágio
IF. Observe que os valores dos campos de instrução e os registradores de origem selecionados aparecem no estágio ID.
Logo, o registrador $1 e a constante 20, os operandos de lw, são escritos no registrador de pipeline ID/EX. O número 10, re-
presentando o número do registrador destino de lw, também é colocado em ID/EX. Os bits 15-11 são 0, mas usamos X para
mostrar que um campo não desempenha uma função em determinada instrução. O topo do registrador de pipeline ID/EX
mostra os valores de controle para lw a serem usados nos estágios restantes. Esses valores de controle podem ser lidos a
partir da linha lw da tabela na Figura 6.25.
Aprofundando o aprendizado 6-14-7

IF: ID: EX: MEM: WB :


and $12, $4, $5 sub $11, $2, $3 lw $10 , . . . before<1> before<2>

0 IF/ID ID/E X EX/ME M MEM/WB


M 00 11
u WB
x
1 000 010 00
Control
Control M WB
0 0 0
0000 00 0
EX M WB 0
1 0

Add

RegWrite
ite
Add
4 Add

RegWr
result
Branch
Branch

MemWrite
ite
Shift

MemWr
left 2

MemtoReg
Read ALUSr c
Instrução

2 register 1
PC Endereço Ler $2 $1
Read
3 register 2
dados 1
Memória de Zero
Write
Wr ite Ler $3 0 ALU ALU Ler
instrução dados 2 Endereço 1
register M result dados
u M
Escre
EscrevverRegistradores Memória de u
x x
dados 1 dados
Escrevver
Escre 0
dados
Instruction
[15 –0] Exten-
X X 20 Controle
Controle
são de ALU
MemRead
Instruction sinal
X [20 –16] X 10
0 ALUOp
Instruction M
u
11 [15 –11] 11 x
Clock 3 1
RegDst

IF: or $13, $6, $7 ID: and $12, $4, $5 EX: sub $11 , . . . MEM: lw $10 , . . . WB: before<1>

0 IF/ID ID/E X EX/ME M MEM/WB


M 10 10
u WB
x
1 and 000 000 11
Control
Control M WB
1 0 0
1100 10 1
EX M WB 0
0 0

Add
Add
RegWrite
ite

4 Add
RegWr

result
Branch
Branch
MemWrite
ite

Shift
left 2
MemWr

ALUSr c
MemtoReg
Instrução

4 Read
PC Endereço register 1 Ler $4 $2
5 Read dados 1 Zero
Memória de register 2 $5 $3 ALU ALU
Ler 0 Endereço Ler
instrução Write result 1
register dados 2 M dados M
u Memória de u
Escrever x x
dados
dados Registradores 1
Escrev
Escrever 0
dados
Instruction
X [15 –0] Exten- X Controle
Controle
são de MemRead
ALU
Instruction sinal
X [20 –16] X 0 ALUOp
Instruction M 10
u
12 [15 –11] 12 11 x
1
Clock 4 RegDst

FIGURA 6.14.6 Ciclos de clock 3 e 4. No diagrama superior, lw entra no estágio EX no terceiro ciclo de clock, so-
mando $1 e 20 para formar o endereço no registrador de pipeline EX/MEM. (A instrução lw é escrita como lw $10,... ao al-
cançar EX, pois a identidade dos operandos da instrução não é necessária para EX ou para os estágios subseqüentes. Nessa
versão do pipeline, as ações de EX, MEM e WB dependem apenas da instrução e seu registrador destino ou seu endereço
de destino.) Ao mesmo tempo, sub entra em ID, lendo os registradores $2 e $3, e a instrução and inicia IF. No quarto ciclo
de clock (caminho de dados inferior), lw se move para o estágio MEM, lendo a memória por meio do valor em EX/MEM
como endereço. No mesmo ciclo de clock, a ALU subtrai $3 de $2 e coloca a diferença em EX/MEM, and lê os registrado-
res $4 e $5 durante ID, e a instrução or entra em IF. Os dois diagramas mostram os sinais de controle sendo criados no está-
gio ID e removidos conforme são utilizados nos estágios de pipe subseqüentes.
6-14-8 Aprofundando o aprendizado ELSEVIER

IF: ID: EX: MEM: WB :


add $14, $8, $9 or $13, $6, $7 and $12 , . . . sub $11 , . . . lw $10, . . .

0 IF/ID ID/E X EX/MEM MEM/WB


M 10 10
u WB
x
1 or 000 000 10
Control
Control M WB
1 0 1
1100 10 0
EX M WB 1
0 0

Add

RegWrite
ite
Add
4 Add

RegWr
result
Branch
Branch

MemWrite
ite
Shift
left 2

MemWr

MemtoReg
Read ALUSr c

Instrução
6 register 1
PC Endereço Ler $6 $4
Read dados 1
7 register 2 Zero
Memória de Ler $7 $5
10 Write 0 ALU ALU Endereço Ler
instrução dados 2 1
register M result dados
u M
Escrever Memória de u
Registradores x x
dados 1 dados
Escrevver
Escre 0
dados
Instruction
[15–0] Exten- Controle
Controle
X X
são de ALU MemRead
Instruction sinal
X [20–16] X
0 ALUOp
Instruction M 11 10
u
13 [15–11] 13 12 x
Clock 5 1
RegDst

IF: ID: EX: MEM: WB :


after<1> add $14, $8, $9 or $13 , . . . and $12 , . . . sub $11, . . .

0 IF/ID ID/E X EX/MEM MEM/WB


M 10 10
u WB
x
1 add 000 000 10
Control
Control M WB
1 0 1
1100 10 0
EX M WB 0
0 0

Add
Add
RegWrite
ite

4 Add
result
RegWr

Branch
Branch

MemWrite
ite
Shift
left 2

MemWr
ALUSr c

MemtoReg
Instrução

8 Read
PC Endereço register 1 $8 $6
Ler
9 Read dados 1 Zero
Memória de register 2 $9 $7 ALUALU Endereço Ler
11 Ler 0 1
instrução Write result dados
register dados 2 M M
u Memória de u
Escrever Registradores x dados x
dados 1 0
Escre
Escrevver
dados
Instruction
Exten-
X [15–0] X Controle
Controle
são de ALU
MemRead
Instruction sinal
X [20–16] X 0 ALUOp
Instruction M 12 11
u
[15–11] 14 13 x 12
1
Clock 6 RegDst

FIGURA 6.14.7 Ciclos de clock 5 e 6. Com add, a instrução final neste exemplo, entrando em IF no caminho superi-
or, todas as instruções estão ocupadas. Escrevendo os dados de MEM/WB no registrador 10, lw termina; os dados e o nú-
mero do registrador estão em MEM/WB. No mesmo ciclo de clock, sub envia a diferença em EX/MEM para MEM/WB, e
o restante das instruções se move para a frente. No ciclo de clock seguinte, sub seleciona o valor em MEM/WB para escre-
ver no registrador número 11, novamente encontrado em MEM/WB. As instruções restantes brincam de siga-o-líder: a
ALU calcula o OR de $6 e $7 para a instrução or no estágio EX, e os registradores $8 e $9 são lidos no estágio ID para a ins-
trução add. As instruções após add aparecem como inativas, só para enfatizar o que ocorre para as cinco instruções no
exemplo. A frase “after<i>” significa a i-ésima instrução após add.
Aprofundando o aprendizado 6-14-9

IF: ID: EX: MEM: WB :


after<2> after<1> add $14 , . . . or $13 , . . . and $12, . . .

0 IF/ID ID/E X EX/MEM MEM/WB


M 10 10
u WB
x
1 000 000 10
Control
Control M WB
1 0 1
1100 10 0
EX M WB 0
0 0

Add

RegWrite
ite
Add
4 Add

RegWr
result
Branch
Branch

MemWrite
ite
Shift
left 2

MemWr

MemtoReg
Read ALUSrc
Instrução

register 1 Ler
PC Endereço $8
Read dados 1
register 2 Zero
Memória de Ler $9
Write 0 ALU ALU Ler
instrução 12 dados 2 Endereço 0
register M result dados
u M
Escrever Memória de u
x
dados Registradores 1 dados x
Escrevver
Escre 1
dados
Instruction
Instruction
[15–0] Exten- Con-
são de trole
trole MemRead
uction sinal
Instruction
Instr ALU
[20–16]
0 ALUOp
Instruction
Instruction M 13 12
u
[15–11] 14 x
Clock 7 1
RegDst

IF: ID: EX: MEM: WB :


after<3> after<2> after<1> and $14 , . . . or $13, . . .

0 IF/ID ID/E X EX/MEM MEM/WB


M 00 00
u WB
x
1 000 000 10
Control
Control M WB
0 0 1
0000 00 0
EX M WB 0
0 0

Add
Add
RegWrite
ite

4 Add
result
RegWr

Branch
Branch
MemWrite
ite

Shift
left 2
MemWr

ALUSrc
MemtoReg
Instrução

Read
PC Endereço register 1 Ler
Read dados 1 Zero
Memória de register 2 ALU ALU
13 Ler 0 Endereço Ler
instrução Writ e result 1
register dados 2 M dados M
u Memória de u
Escrever Registradores x dados x
dados 1 0
Escrever
Escrev
dados
Instruction
Instruction
[15–0] Exten-
Controle
Controle
são de MemRead
ALU
uction sinal
Instruction
Instr
[20–16]
0 ALUOp
Instruction
Instruction M 14 13
u
[15–11] x
1
Clock 8 RegDst

FIGURA 6.14.8 Ciclos de clock 7 e 8. No caminho de dados superior, a instrução add expõe o que há por trás, so-
mando os valores correspondentes aos registradores $8 e $9 durante o estágio EX. O resultado da instrução or é passado de
EX/MEM para MEM/WB no estágio MEM, e o estágio WB escreve o resultado da instrução and em MEM/WB para o re-
gistrador $12. Observe que os sinais de controle estão inativos (em 0) no estágio ID, pois nenhuma instrução está sendo
executada. No ciclo de clock seguinte (desenho inferior), o estágio WB escreve o resultado no registrador $13, completan-
do assim o or, e o estágio MEM passa a soma do add em EX/MEM para MEM/WB. As instruções após o add aparecem
como inativas por questões pedagógicas.
6-14-10 Aprofundando o aprendizado ELSEVIER

IF: ID: EX: MEM: WB:


after<4> after<3> after<2> after<1> add $14, . . .

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


M 00 10
u WB
x
1 000 000 10
Control
Control M WB
0 0 1
0000 00 0
EX M WB 0
0 0

Add

RegWrite
ite
Add
4 Add

RegWr
result
Branch
Branch

MemWrite
ite
Shift

MemWr
left 2

MemtoReg
ALUSrcc
ALUSr

Instrução
ução
Read
PC Endereço register 1
Ler

Instr
Read dados 1
Zero
Memória de register 2 ALU ALU
instrução 14 Write
Ler 0 Endereço Ler 1
dados 2 M result dados
register M
u Memória de u
Escrever x dados x
Registradores
dados 1 0
Escrevver
Escre
dados
Instruction
Instruction
[15–0] Exten- Controle
Controle
são de MemRead
ALU
Instruction sinal
Instruction
[20–16]
0 ALUOp
Instruction
Instruction M 14
u
[15–11] x
1
Clock 9 RegDst

FIGURA 6.14.9 Ciclo de clock 9. O estágio WB escreve a soma que se encontra em MEM/WB no registrador $14,
completando o add e a seqüência de cinco instruções. As instruções após add aparecem como inativas por questões pe-
dagógicas.

IF: ID: EX: MEM: WB:

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


M 00 10
u WB
x
1 000 000 00
Contr
Control
ol M WB
0 0 0
0000 00 0
EX M WB 0
0 0

Add
RegWrite
ite

Add
4 Add
Add
RegWr

result
Branch
Branch
MemWrite
ite

Shift
MemWr

left 2
MemtoReg

ALUSrc
Instrução
ução

Read
PC Endereço register 1 Ler
Instr

Read dados 1 Zero


Memória de register 2 ALU ALU
instrução Ler 0 Endereço Ler
Write
Wr ite result 1
dados 2 M dados M
register u Memória de u
Escrever Registradores
Escrev x dados x
dados 1 0
Escrever
Escrev
dados
Instruction
Instruction
[15–0] Exten- Con-
são de trole
trole MemRead
Instruction sinal
Instruction ALU
[20–16]
0 ALUOp
Instruction
Instruction M
u
[15–11] x
1
Clock RegDst

FIGURA 6.14.10 Um diagrama de pipeline com ciclo único de clock em branco, com controle.
Aprofundando o aprendizado 6-14-11

Ilustrando pipelines com forwarding


6.16 [20] <§6.4> Podemos usar os diagramas de pipeline de ciclo único de clock para mostrar
como funciona o forwarding, e também como o controle ativa os caminhos de forwarding. Considere
a seqüência de código a seguir, em que as dependências foram destacadas:
sub $2, $1, $3
and $4, $2, $5
or $4, $4, $2
add $9, $4, $2

As Figuras 6.14.11 e 6.14.12 mostram os eventos nos ciclos de clock 3-6 da execução dessas ins-
truções. No ciclo de clock 4, a unidade de forwarding vê a escrita da instrução sub do registrador $2
no estágio MEM, enquanto a instrução and no estágio EX está lendo o registrador $2. A unidade de
forwarding seleciona o registrador de pipeline EX/MEM no lugar do registrador de pipeline ID/EX
como entrada superior para a ALU, a fim de obter o valor apropriado para o registrador $2. A instru-
ção or a seguir lê o registrador $4, que é escrito pela instrução and, e o registrador $2, escrito pela ins-
trução sub. Assim, no ciclo de clock 5, a unidade de forwarding seleciona o registrador de pipeline
EX/MEM para a entrada superior da ALU e o registrador de pipeline MEM/WB para a entrada infe-
rior da ALU. A instrução add a seguir lê o registrador $4, o destino da instrução and, e o registrador
$2, que a instrução sub já escreveu. Observe que as duas instruções anteriores escrevem o registrador
$4, de modo que a unidade de forwarding precisa selecionar o registrador imediatamente anterior
(estágio MEM). No ciclo de clock 6, a unidade de forwarding seleciona assim o registrador de pipeli-
ne EX/MEM, contendo o resultado da instrução or, para a entrada superior da ALU, mas usa o valor,
que não é de forwarding, do registrador para a entrada inferior da ALU. Usando o diagrama vazio da
Figura 6.14.13 e o formato da Figura 6.14.11, desenhe os diagramas de pipeline com ciclo único de
clock para os ciclos de 3 a 5 durante a execução desta seqüência:
add $1, $1, $3
add $4, $2, $1
and $5, $4, $1

Ilustrando pipelines com forwarding e stalls


6.24 [20] <§6.5> Podemos usar os diagramas de pipeline com ciclo único de clock para mostrar
como funciona o controle de stalls. As Figuras de 6.14.14 a 6.14.16 mostram o diagrama de ciclo
único para os clocks de 2 a 7 para a seguinte seqüência de código (dependências destacadas).
lw $2, 20($1)
and $4, $2,$5
or $4, $4,$2
add $9, $4,$2

Usando o mesmo formato da Figura 6.14.15, ilustre a execução da seguinte seqüência para os ci-
clos de clock de 3 a 6. Use a Figura 6.14.17 para fazer o exercício.
lw $2, 20($1)
add $4, $5, $2
sub $4, $4, $2
6-14-12 Aprofundando o aprendizado ELSEVIER

FIGURA 6.14.11 Ciclos de clock 3 e 4 da seqüência de instruções no Exercício 6.16. As linhas mais es-
pessas são aquelas ativas em um ciclo de clock, e os números de registradores em itálico e destaque indicam um hazard.
A unidade de forwarding é destacada sombreando-a quando estiver realizando forwarding de dados para a ALU. As ins-
truções antes de sub aparecem como inativas só para enfatizar o que ocorre com as quatro instruções no exemplo. Os no-
mes de operando são usados em EX para o controle do forwarding; assim, eles estão incluídos no rótulo da instrução
para EX. Os nomes de operando não são necessários em MEM ou WB, de modo que ... é utilizado. Compare isso com as
Figuras de 6.14.6 a 6.14.9, mostrando o caminho de dados sem forwarding, onde ID é o último estágio a precisar de in-
formações do operando.
Aprofundando o aprendizado 6-14-13

FIGURA 6.14.12 Ciclos de clock 5 e 6 da seqüência de instruções no Exercício 6.16. A unidade de for-
warding é destacada quando está realizando forwarding de dados para a ALU. As duas instruções após add aparecem como
inativas só para enfatizar o que ocorre para as quatro instruções no exemplo. As linhas em negrito são aquelas ativas em um
ciclo de clock, e os números de registrador em itálico e coloridos indicam um hazard.
6-14-14 Aprofundando o aprendizado ELSEVIER

FIGURA 6.14.13 Diagrama de pipeline em branco com caminhos de dados de forwarding.


Aprofundando o aprendizado 6-14-15

FIGURA 6.14.14 Ciclos de clock 2 e 3 da seqüência de instruções no Exercício 6.24 com um load substi-
tuindo sub. As linhas em negrito são aquelas ativas em um ciclo de clock, os números de registrador em itálico e em des-
taque indicam um hazard, e ... no lugar dos operandos significa que sua identidade é informação não necessária por esse es-
tágio. Os valores significativos das linhas de controle, registradores e números de registradores são rotulados nas figuras. A
instrução and deseja ler o valor criado pela instrução lw no ciclo de clock 3, de modo que a unidade de detecção de hazard
faz um stall nas instruções and e or. Em virtude disto, a unidade de detecção de hazard está destacada.
6-14-16 Aprofundando o aprendizado ELSEVIER

FIGURA 6.14.15 Ciclos de clock 4 e 5 da seqüência de instruções no Exercício 6.24 com um load substi-
tuindo sub. A bolha é inserida no pipeline no ciclo de clock 4, e depois a instrução and tem permissão para prosseguir no
ciclo de clock 5. A unidade de forwarding é destacada no ciclo de clock 5 porque está realizando forwarding de dados de lw
para a ALU. Observe que, no ciclo de clock 4, a unidade de forwarding realiza um forwarding do endereço do lw como se
fosse o conteúdo do registrador $2; isso se torna inofensivo pela inserção da bolha. As linhas mais espessas são aquelas ati-
vas em um ciclo de clock, e os números de registrador em itálico e destaque indicam um hazard.
Aprofundando o aprendizado 6-14-17

FIGURA 6.14.16 Ciclos de clock 6 e 7 da seqüência de instruções no Exercício 6.24 com um load substi-
tuindo sub. Observe que, diferente da Figura 6.14.12, o stall permite que o lw termine, e, por isso, não existe forwarding
de MEM/WB no ciclo de clock 6. O registrador $4 para o add no estágio EX ainda depende do resultado de or no EX/MEM,
de modo que a unidade de forwarding passa o resultado para a ALU. As linhas em negrito mostram as linhas de entrada da
ALU ativas em um ciclo de clock, e os números de registrador em itálico indicam um hazard. As instruções após o add apa-
recem como inativas por questões pedagógicas.
6-14-18 Aprofundando o aprendizado ELSEVIER

FIGURA 6.14.17 Diagrama de pipeline em branco com hardware de stall.

Exercícios diversos
6.5 [5] <§6.1> Como poderíamos modificar o código a seguir para utilizar um delay slot?
Loop: lw $2, 100($3)
addi $3, $3, 4
beq $3, $4, Loop

6.10 [5] <§6.2> Para cada registrador de pipeline na Figura 6.22, rotule cada parte do registrador de
pipeline com o nome do valor carregado no registrador. Determine a extensão de cada campo em
bits. Por exemplo, o registrador de pipeline IF/ID contém dois campos, um deles sendo um campo de
instrução que possui 32 bits de largura.
6.11 [15] <§§3.6, 6.2> Usando a Figura 3.13 como base, descubra uma estrutura de caminho de da-
dos em pipeline razoável para a adição de ponto flutuante, e integre os registradores de ponto flutu-
ante e a memória de dados à sua figura para produzir uma figura semelhante à Figura 6.11, exceto
que seu diagrama também deve conter um pipeline alternativo para instruções de adição de ponto
flutuante. Não se preocupe muito com os atrasos associados a cada uma das funções na Figura 3.13.
Você deverá simplesmente assumir que a soma dos atrasos é muito grande e, por isso, exige que você
use 2 ou 3 ciclos para realizar a adição de ponto flutuante. A adição deverá ser mantida em pipeline,
de modo que uma nova instrução de adição de ponto flutuante possa ser iniciada a cada ciclo, supon-
do que não haja dependências (você pode ignorar as dependências para esse problema).
6.20 [20] <§§6.4, 6.5> Considere uma seqüência de instruções utilizada para uma cópia da memó-
ria para a memória:
lw $2, 100($5)
sw $2, 200($6)

A Seção de “Detalhamento” da página 310 do texto discute essa situação e indica que o hardware
de forwarding adicional pode melhorar seu desempenho. Mostre os acréscimos necessários ao cami-
nho de dados da Figura 6.33 para permitir que um código como esse seja executado sem stalls. Inclua
Aprofundando o aprendizado 6-14-19

equações de forwarding (como aquelas que aparecem nas páginas 306-310) para todos os sinais de
controle para quaisquer multiplexadores novos ou modificados no seu caminho de dados. Finalmen-
te, reescreva a fórmula de stall da página 311 de modo que essa seqüência de código não gere stall.
6.25 [20] <§6.5> A unidade de forwarding poderia ser movida para o estágio de ID e as decisões de
forwarding poderiam ser feitas mais cedo. Os resultados dessas decisões precisariam ser passados
adiante com a instrução e utilizados no estágio EX quando o forwarding real ocorresse. Essa modifi-
cação agilizaria o estágio EX e poderia permitir uma possível melhoria no tempo do ciclo. Realize a
modificação. Ofereça um caminho de dados revisado e uma descrição das mudanças necessárias.
Como o registrador ID/EX mudou? Ofereça novas equações de forwarding para substituir as que
aparecem nas páginas 306-310.
6.26 [15] <§§6.2–6.5> Nos exercícios do Capítulo 5, exploramos as implicações de ter instruções
load e store sem deslocamento. Como essa modificação no conjunto de instruções afetaria uma im-
plementação em pipeline? Descreva as mudanças no caminho de dados e o impacto sobre o desem-
penho. Não se esqueça de incluir uma discussão sobre forwarding na sua resposta.
6.27 [10] <§§6.2–6.5> A ISA 80x86 possui instruções aritméticas que podem acessar a memória
diretamente. Escreva um ou dois parágrafos explicando por que seria difícil incluir essa instrução no
pipeline MIPS descrito neste capítulo. (Dica: você pode ter de incluir um ou mais estágios adicionais
no pipeline.)
6.28 [30] <§6.5, Apêndice C> Usando o Apêndice C e a resposta do Exercício 6.23, projete o hard-
ware para implementar a unidade de forwarding. (Dica: para decidir se os números de registrador são
iguais, tente usar uma porta OR exclusiva. Veja a Seção de “Detalhamento” na página B-36 do
Apêndice B.)
6.31 [10] <§6.6> Uma extensão do conjunto de instruções MIPS possui duas novas instruções,
chamadas movn (move if not zero) e movz (move if zero). Por exemplo, a instrução movn $8, $11,
$4 copia o conteúdo do registrador 11 para o registrador 8, desde que o valor no registrador 4 não seja
zero (caso contrário, ela não faz nada). A instrução movz é semelhante, mas a cópia ocorre somente
se o valor do registrador for zero. Mostre como usar as novas instruções para colocar o que for maior,
o valor do registrador 8 ou o valor do registrador 9, no registrador 10. Se os valores forem iguais, co-
pie qualquer um para o registrador 10. Você pode usar o registrador 1 como um registrador extra para
uso temporário. Não use quaisquer desvios condicionais.
6.32 [10] <§6.6> A solução para o Exercício 6.31 deverá envolver a execução de menos instruções
do que seriam necessárias usando desvios condicionais. No entanto, às vezes, a reescrita do código
para usar movn e movz em vez de desvios condicionais não reduz o número de instruções executa-
das. Apesar disso, mesmo que o uso de movn e movz não reduza o número de instruções executadas,
isso ainda pode tornar o programa mais rápido se estiver sendo executado em um caminho de dados
em pipeline. Explique por quê.

Você também pode gostar