MIPS avançado
Escalação Dinâmica
MIPS64 com instruções de inteiros
e de pontos flutuantes
Instruções de ponto flutuante
LS
LD
SS
SD
ADDD
DIVD
MULD
SUBD
F5, 0(R1) – load FP simples (32 bits)
F6, 0(R1) - load FP duplo (64 bits)
F6, 0(R1) – store FP simples
F6, 0(R1) – store FP duplo
F6, F10, F8 – adição de F10 e F8 com resultado em F6
F0, F2, F4 - divisão de F2 por F4 com resultado em F0
F6, F10, F8 – multiplicação de F10 com F8 com resultado em F6
F6, F10, F8 – subtração de F10 com F8 com resultado em F6
Registradores do MIPS64
32 registradores de uso geral de 64 bits, R0,...,R31, registradores inteiros.
32 registradores de ponto flutuante, F0, ..., F31, que podem ter dados de precisão
simples (32 bits) e dados de precisão dupla (64 bits).
Observação: no livro, LS = L.S, LD= L.D, ADDD = ADD.D, etc.
Situações de dependência que levam a:
RAW – Read After Write – ler depois de escrever
WAR – Write After Read – escrever depois de ler
WAW – Write After Write – escrever depois de escrever
quando se pensa em execução fora de ordem.
Exemplos:
DIVD F0, F2, F4
ADDD F6, F0, F8
SD
F6, 0(R1)
SUBD F8,F10, F14
MULD F6, F10, F8
RAW - Dependência entre DIVD e ADDD – no uso de F0
WAR - Antidependência entre ADDD e SUBD - no uso de F8
WAW - Dependência de saída entre ADDD e MULD
( ADDD pode terminar depois de MULD)
Escalaçao Dinâmica
usando scoreboard (placar)
semelhante ao
usado no CDC6600
A função do scoreboard é
controlar a execução de
instruções, e todos os fluxos
de dados entre os
registradores e as unidades
funcionais
scoreboard
Escalação Dinâmica: Estrutura do MIPS com Placar
(scoreboard)
Duas unidades de
Multiplicação FP
Uma unidade de
Divisão FP
Uma unidade de
Adição FP
Uma unidade de
inteiros
1 .Estágio de Emissão
• Se uma unidade funcional estiver livre e nenhuma instrução ativa
tem o mesmo registrador destino, o scoreboard emite a instrução
para a unidade funcional e atualiza a estrutura de dados interna.
Esse passo substitui uma porção do passo ID(Instruction Decode)
no MIPS pipeline.
– Assegurando que nenhuma instrução ativa tem o mesmo registrador
destino, garante-se que WAW seja resolvido.
– Se um conflito estrutural ou WAW existe, então, a emissão da instrução
pára e nenhuma instrução posterior é emitida até que o conflito seja
resolvido.
– Quando o estágio de emissão pára, causa o preenchimento do buffer
entre IF(Instruction Fetch) e o estágio de emissão. Se o buffer é de
única entrada, IF pára imediatamente. Se o buffer é uma fila com
múltiplas instruções, IF pára após a fila ficar cheia.
2. Leitura de operandos
• O scoreboard monitora a disponibilidade dos operandos fonte. Um
operando fonte é disponível se nenhuma instrução anterior ativa irá
sobrescrevê-lo.
• Quando os operandos fonte são disponíveis, o scoreboard diz à
unidade funcional para realizar a leitura dos operandos nos
registradores e iniciar a execução.
– O scoreboard resolve assim RAW dinamicamente nesse passo,
e instruções podem ser enviados para execução fora de ordem.
• Este passo junto com o anterior (emissão) completa a função do
passo ID no pipeline MIPS simples.
3. Execução
• A unidade funcional inicia a execução ao receber os operandos.
• Quando o resultado estiver pronto, a unidade notifica o scoreboard
que a execução foi realizada.
• Este passo substitui o EX no pipeline MIPS e toma vários ciclos no
caso da unidade de ponto flutuante.
4. Escrita do resultado (finalização)
•
Uma vez que o scoreboard é avisado de que a execução foi realizada, o
scoreboard verifica se existe violação de WAR e pára a finalização da
instrução caso necessário.
•
O perigo de violação de WAR existe num caso como:
DIVD F0, F2, F4
ADDD F10, F0, F8
SUBD F8, F8, F14
onde ADDD depende de F8, que será alterado por SUBD.
– Nesse caso, o scoreboard irá parar SUBD no seu estágio de finalização até que
ADDD faça a leitura dos seus operandos.
•
Se o perigo de violação de WAR não existe, ou for eliminado, o scoreboard
diz à unidade funcional para escrever o resultado no registrador de destino.
•
Esse passo substitui o WB no pipeline MIPS.
PARTES DO SCOREBOARD
1- Status da Instrução
Indica em qual dos quatro passos a instrução se encontra.
Instrução
emissão
LD F6,34(R2)
v
LD F2,45(R3)
v
MULD F0,F2,F4
v
SUBD F8,F6,F2
v
DIVD F10,F0,F6
v
ADDD F6,F8,F2
v
leitura
v
v
Ex.completa
v
v
Result.escrito
v
Partes do Scoreboard
2. Status da unidade funcional
Indica o estado da unidade funcional. Existem nove campos para cada
unidade funcional:
•
•
•
•
•
•
Busy – indica se a unidade está ocupada
Op – operação a realizar na unidade (P.ex: add, sub)
Fi – registrador de destino
Fj, Fk – número dos registradores fonte
Qj, Qk – unidades funcionais produzindo os valores para fontes Fj, Fk.
Rj, Rk – flags indicando que Fj, Fk estão prontos.
Exemplo de Status da unidade funcional
dest
Unid.
Func.
Busy op
Int
Mult1
Mult2
Add
Divide
yes
yes
no
yes
yes
fontes
Fi
Fj
Fk
load
mult
F2
F0
R3
F2
F4
sub
div
F8
F6
F10 F0
F2
F6
un.func.
Flags de pronto
Qj
Rj
Rk
No
No
yes
Qk
int
int
Mult1
yes no
No yes
Partes do Scoreboard
3. Status dos registradores
• Indica qual unidade funcional escreve em cada registrador,
se uma instrução ativa tem o registrador como destino.
• O campo fica em branco quando não existe nenhuma
instrução pendente que escreva no registrador.
Regs.
F0
F2
Unid. Mult1 int
Func.
F4
F6
F8
Add
F10
Divide
F12
..... F30
Tempo de execução
LD –
1 ciclo
SUBD –
2 ciclos
MULTD - 10 ciclos
DIVD –
40 ciclos
ADDD –
2 ciclos
Exemplo
Instruction status
Instruction
Read
j
k
LD
F6
34+
R2
LD
F2
45+
R3
MULTD F0
F2
F4
SUBD F8
F6
F2
DIVD
F0
F6
F8
F2
F10
ADDD F6
Issue
operands complete Result
Functional unit status
Time
Name
Busy
Integer
No
Mult1
No
Mult2
No
Add
No
Divide
No
ExecutionWrite
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
F2
F4
F6
F8
F10
F12
...
F30
Register result status
Clock
F0
FU
ciclo 1
Instruction status
Instruction
j
Read
k
LD
F6
34+
R2
LD
F2
45+
R3
MULTD F0
F2
F4
SUBD F8
F6
F2
DIVD
F0
F6
F8
F2
F10
ADDD F6
Issue
operands complete Result
1
Functional unit status
Time Name
Execution Write
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Fj
Fk
Qj
Qk
Rj
Rk
Busy
Op
Fi
Integer
Yes
Load
F6
Mult1
No
Mult2
No
Add
No
Divide
No
F2
F4
R2
Yes
Register result status
Clock
1
F0
FU
F6
Integer
F8
F10
F12
...
F30
ciclo 2
Instruction status
Instruction
j
Read
k
LD
F6
34+
R2
LD
F2
45+
R3
MULTD F0
F2
F4
SUBD F8
F6
F2
DIVD
F0
F6
F8
F2
F10
ADDD F6
Issue
operands complete Result
1
2
Functional unit status
Time Name
Execution Write
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Fj
Fk
Qj
Qk
Rj
Rk
Busy
Op
Fi
Integer
Yes
Load
F6
Mult1
No
Mult2
No
Add
No
Divide
No
F2
F4
R2
Yes
Register result status
Clock
2
F0
FU
• Issue 2nd LD?
F6
F8
Integer
(não, conflito estrutural)
F10
F12
...
F30
ciclo 3
Instruction status
Instruction
j
Read
k
LD
F6
34+
R2
LD
F2
45+
R3
MULTD F0
F2
F4
SUBD F8
F6
F2
DIVD
F0
F6
F8
F2
F10
ADDD F6
Issue
operands complete Result
1
2
Functional unit status
Time Name
Execution Write
3
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Fj
Fk
Qj
Qk
Rj
Rk
Busy
Op
Fi
Integer
Yes
Load
F6
Mult1
No
Mult2
No
Add
No
Divide
No
F2
F4
R2
Yes
Register result status
Clock
3
•
F0
FU
Issue MULT?
F6
F8
F10
Integer
(não, emissão fora de ordem)
F12
...
F30
ciclo 4
Instruction status
Instruction
j
Read
k
LD
F6
34+
R2
LD
F2
45+
R3
MULTD F0
F2
F4
SUBD F8
F6
F2
DIVD
F0
F6
F8
F2
F10
ADDD F6
Issue
operands complete Result
1
2
Functional unit status
Time Name
Execution Write
3
4
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Fj
Fk
Qj
Qk
Rj
Rk
Busy
Op
Fi
Integer
Yes
Load
F6
Mult1
No
Mult2
No
Add
No
Divide
No
F2
F4
R2
Yes
Register result status
Clock
4
F0
FU
F6
Integer
F8
F10
F12
...
F30
ciclo 5
Clock
Instruction j
k
LD
F6 34+ R2
LD
F2 45+ R3
MULTDF0 F2 F4
SUBD F8 F6 F2
DIVD F10 F0 F6
ADDD F6 F8 F2
Functional unit status
Time Name
Integer
Mult1
Mult2
Add
Divide
Register result status
Clock
5
FU
Read Execution
Write
Issue operandscomplete
Result
1
2
3
4
5
Busy Op
Yes Load
No
No
No
No
F0
dest
Fi
F2
F2
F4
Integer
S1
Fj
S2
Fk
R3
FU for j FU for k Fj?
Qj
Qk
Rj
Fk?
Rk
Yes
F6
F8
F10
F30
F12
...
ciclo 6
Instruction status
Instruction
j
k
LD
F6 34+ R2
LD
F2 45+ R3
MULTDF0 F2 F4
SUBD F8 F6 F2
DIVD F10 F0 F6
ADDD F6 F8 F2
Functional unit status
Time Name
Integer
Mult1
Mult2
Add
Divide
Register result status
Clock
6
FU
Read
ExecutionWrite
Issue operandscompleteResult
1
2
3
4
5
6
6
Busy
Yes
Yes
No
No
No
Op
Load
Mult
dest
Fi
F2
F0
F0
F2
F4
Mult1 Integer
S1
Fj
FU for j FU for k Fj?
Qj
Qk
Rj
F2
S2
Fk
R3
F4
F6
F8
F10
Integer
F12
No
Fk?
Rk
Yes
Yes
...
F30
ciclo 7
Instruction status
Instruction j
k Issue
LD F6 34+ R2
1
LD F2 45+ R3
5
MULTD
F0 F2 F4
6
SUBDF8 F6 F2
7
DIVD F10 F0 F6
ADDDF6 F8 F2
Functional unit status
TimeName
Busy
Integer Yes
Mult1
Yes
Mult2
No
Add
Yes
Divide
No
Register result status
Clock
7
•
Read Execution
Write
operands
complete
Result
2
3
4
6
7
Op
Load
Mult
dest
Fi
F2
F0
S1
Fj
FU for jFU for kFj?
Qj
Qk
Rj
F2
S2
Fk
R3
F4
No
Fk?
Rk
Yes
Yes
Sub
F8
F6
F2
Integer Yes
No
F4
F6 F8 F10 F12 ...
F0 F2
FU
Mult1Integer
Read multiply operands?
Integer
Add
(F2 não disponível)
F30
ciclo 8
Instruction status
Instruction j
k Issue
LD F6 34+ R2
1
LD F2 45+ R3
5
MULTD
F0 F2 F4
6
SUBDF8 F6 F2
7
DIVD F10 F0 F6
8
ADDDF6 F8 F2
Functional unit status
TimeName
Busy
Integer No
Mult1
Yes
Mult2
No
Add
Yes
Divide
Yes
Register result status
Clock
8
FU
Read Execution
Write
operands
complete
Result
2
3
4
6
7
8
Op
dest
Fi
S1
Fj
S2
Fk
FU for jFU for kFj?
Qj
Qk
Rj
Fk?
Rk
Mult
F0
F2
F4
Yes
Yes
Sub
Div
F8
F10
F6
F0
F2
F6
Yes
No
Yes
Yes
F0 F2
F4
F6 F8 F10 F12 ...
Mult1
Mult1
Add Divide
F30
ciclo 9
Instruction status
Instruction j
k Issue
LD
F6 34+ R2
1
LD
F2 45+ R3
5
MULTD
F0 F2 F4
6
SUBDF8 F6 F2
7
DIVD F10 F0 F6
8
ADDDF6 F8 F2
Functional unit status
TimeName
Busy
Integer No
10 Mult1
Yes
Mult2
No
2 Add
Yes
Divide
Yes
Register result status
Read Execution
Write
operands
complete
Result
2
3
4
6
7
8
9
9
Clock
9
•
•
F0
FU
Op
dest
Fi
S1
Fj
S2
Fk
FU for jFU for kFj?
Qj
Qk
Rj
Fk?
Rk
Mult
F0
F2
F4
Yes
Yes
Sub
Div
F8
F10
F6
F0
F2
F6
Yes
No
Yes
Yes
F2
F4
F6 F8 F10 F12
...
F30
Mult1
Mult1
Add Divide
Read operands for MULT & SUBD? (sim)
(não, unidade Add ocupada)
Issue ADDD?
ciclo 11
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
SUBD F8
F6
F2
7
9
DIVD
F0
F6
8
F8
F2
F10
ADDD F6
Functional unit status
Time Name
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Mult
F0
F2
F4
Yes
Yes
Yes
Sub
F8
F6
F2
Yes
Yes
Yes
Div
F10
F0
F6
Mult1
No
Yes
F0
F2
F4
F6
F8
F10
...
F30
Add
Divide
Busy
Integer
11
No
8 Mult1
Yes
Mult2
No
0 Add
Divide
Register result status
Clock
11
FU
Mult1
F12
•
ciclo 12
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
SUBD F8
F6
F2
7
9
11
12
DIVD
F0
F6
8
F8
F2
F10
ADDD F6
Functional unit status
Time Name
Busy
Integer
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Mult
F0
F2
F4
Yes
Yes
No
Yes
...
F30
No
7 Mult1
Yes
Mult2
No
Add
No
Divide
Yes
Div
F10
F0
F6
Mult1
F0
F2
F4
F6
F8
F10
Register result status
Clock
12
FU
Mult1
Read operands for DIVD?
Divide
(F0 não disponível)
F12
ciclo 13
Read
Instruction status
Instruction
j
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
SUBD F8
F6
F2
7
9
11
12
F0
F6
8
F8
F2
13
DIVD
F10
ADDD F6
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Mult
F0
F2
F4
Yes
Yes
Yes
Yes
No
Yes
...
F30
Functional unit status
Busy
Time Name
No
Integer
Yes
6 Mult1
Mult2
No
Add
Yes
Add
F6
F8
F2
Divide
Yes
Div
F10
F0
F6
Mult1
F0
F2
F4
F6
F8
F10
Register result status
Clock
13
FU
Mult1
Add
Divide
F12
ciclo 14
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
SUBD F8
F6
F2
7
9
11
12
DIVD
F0
F6
8
F8
F2
13
F10
ADDD F6
14
Functional unit status
Time Name
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Mult
F0
F2
F4
Yes
Yes
Yes
Add
F6
F8
F2
Yes
Yes
Yes
Div
F10
F0
F6
Mult1
No
Yes
F0
F2
F4
F6
F8
F10
...
F30
Busy
Integer
No
5 Mult1
Yes
Mult2
No
2 Add
Divide
Register result status
Clock
14
FU
Mult1
Add
Divide
F12
ciclo 15
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
SUBD F8
F6
F2
7
9
11
12
DIVD
F0
F6
8
F8
F2
13
F10
ADDD F6
14
Functional unit status
Time Name
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Mult
F0
F2
F4
Yes
Yes
Yes
Add
F6
F8
F2
Yes
Yes
Yes
Div
F10
F0
F6
Mult1
No
Yes
F0
F2
F4
F6
F8
F10
...
F30
Busy
Integer
No
4 Mult1
Yes
Mult2
No
1 Add
Divide
Register result status
Clock
15
FU
Mult1
Add
Divide
F12
ciclo 16
Read
Instruction status
Instruction
j
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
SUBD F8
F6
F2
7
9
11
12
F0
F6
8
F8
F2
13
14
16
DIVD
F10
ADDD F6
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Mult
F0
F2
F4
Yes
Yes
Yes
Add
F6
F8
F2
Yes
Yes
Yes
Div
F10
F0
F6
Mult1
No
Yes
F0
F2
F4
F6
F8
F10
...
F30
Functional unit status
Busy
Time Name
No
Integer
Yes
3 Mult1
No
Mult2
0 Add
Divide
Register result status
Clock
16
FU
Mult1
Add
Divide
F12
ciclo 17
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
SUBD F8
F6
F2
7
9
11
12
DIVD
F0
F6
8
F8
F2
13
14
16
F10
ADDD F6
Functional unit status
Time Name
Busy
Integer
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Mult
F0
F2
F4
Yes
Yes
Yes
Yes
No
Yes
...
F30
No
2 Mult1
Yes
Mult2
No
Add
Yes
Add
F6
F8
F2
Divide
Yes
Div
F10
F0
F6
Mult1
F0
F2
F4
F6
F8
F10
Register result status
Clock
17
•
FU
Mult1
Write result of ADDD?
Add
F12
Divide
(não, WAR de F6 para read em DIVD)
ciclo 18
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
SUBD F8
F6
F2
7
9
11
12
DIVD
F0
F6
8
F8
F2
13
14
16
F10
ADDD F6
Functional unit status
Time Name
Busy
Integer
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Mult
F0
F2
F4
Yes
Yes
Yes
Yes
No
Yes
...
F30
No
1 Mult1
Yes
Mult2
No
Add
Yes
Add
F6
F8
F2
Divide
Yes
Div
F10
F0
F6
Mult1
F0
F2
F4
F6
F8
F10
Register result status
Clock
18
FU
Mult1
Add
Divide
F12
ciclo 19
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
19
SUBD F8
F6
F2
7
9
11
DIVD
F0
F6
8
F8
F2
13
14
16
F10
ADDD F6
Functional unit status
Time Name
Busy
Integer
12
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Mult
F0
F2
F4
Yes
Yes
Yes
Yes
No
Yes
...
F30
No
0 Mult1
Yes
Mult2
No
Add
Yes
Add
F6
F8
F2
Divide
Yes
Div
F10
F0
F6
Mult1
F0
F2
F4
F6
F8
F10
Register result status
Clock
19
FU
Mult1
Add
Divide
F12
ciclo 20
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
19
20
SUBD F8
F6
F2
7
9
11
12
DIVD
F0
F6
8
F8
F2
13
14
16
F10
ADDD F6
Functional unit status
Time Name
Busy
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Integer
No
Mult1
No
Mult2
No
Add
Yes
Add
F6
F8
F2
Yes
Yes
Divide
Yes
Div
F10
F0
F6
Yes
Yes
F0
F2
F4
F6
F8
...
F30
Register result status
Clock
20
FU
Add
F10
Divide
F12
ciclo 21
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
19
20
SUBD F8
F6
F2
7
9
11
12
DIVD
F0
F6
8
21
F8
F2
13
14
F10
ADDD F6
Functional unit status
Time Name
Busy
16
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Integer
No
Mult1
No
Mult2
No
Add
Yes
Add
F6
F8
F2
Yes
Yes
Divide
Yes
Div
F10
F0
F6
Yes
Yes
F0
F2
F4
F6
F8
...
F30
Register result status
Clock
21
FU
Add
F10
Divide
F12
ciclo 22
Instruction status
Instruction
j
Read
k
Issue
Execution Write
operands complete Result
LD
F6
34+
R2
1
2
3
4
LD
F2
45+
R3
5
6
7
8
MULTD F0
F2
F4
6
9
19
20
SUBD F8
F6
F2
7
9
11
12
DIVD
F0
F6
8
21
F8
F2
13
14
16
22
F10
ADDD F6
Functional unit status
Time Name
dest
S1
S2
FU for j
FU for k
Fj?
Fk?
Op
Fi
Fj
Fk
Qj
Qk
Rj
Rk
Yes
Div
F10
F0
F6
Yes
Yes
F0
F2
F4
F6
F8
...
F30
Busy
Integer
No
Mult1
No
Mult2
No
Add
No
40 Divide
Register result status
Clock
22
FU
F10
Divide
F12
ciclo 61
Instruction status
Instruction j
k Issue
LD
F6 34+ R2
1
LD
F2 45+ R3
5
MULTD
F0 F2 F4
6
SUBDF8 F6 F2
7
DIVD F10 F0 F6
8
ADDDF6 F8 F2
13
Functional unit status
TimeName
Busy
Integer No
Mult1
No
Mult2
No
Add
No
0 Divide
Yes
Register result status
Read Execution
Write
operands
complete
Result
2
3
4
6
7
8
9
19
20
9
11
12
21
61
14
16
22
dest
S1 S2
Op
Fi
Fj
Fk
Div
F10
F0
Clock
F2
F4
F6 F8 F10 F12
61
F0
FU
FU for jFU for kFj?
Qj
Qk
Rj
Fk?
Rk
Yes
Yes
...
F30
F6
Divide
ciclo 62
Instruction status
Read Execution
Write
Instruction j
k Issue operands
complete
Result
LD F6 34+ R2
1
2
3
4
LD F2 45+ R3
5
6
7
8
MULTD
F0 F2 F4
6
9
19
20
SUBDF8 F6 F2
7
9
11
12
DIVD F10 F0 F6
8
21
61
62
ADDDF6 F8 F2
13
14
16
22
Functional unit status
dest S1 S2
TimeName
Busy Op
Fi
Fj Fk
Integer No
Mult1
No
Mult2
No
Add
No
0 Divide
No
Register result status
Clock
62
F0 F2
FU
F4
FU for jFU for kFj?
Qj
Qk
Rj
F6 F8 F10 F12 ...
Fk?
Rk
F30
Resumo
• Idéias chaves do scoreboard
– Estágio ID verifica o conflito estrutural
– Emissão em ordem, respeitando WAW
– Espera dos operandos fora de ordem,
respeitando RAW
– Execução e término fora de ordem
– Escrita do resultado fora de ordem,
respeitando WAR
Download

Score-board