1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder...

62
1 Aritmética Aceleração da adição

Transcript of 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder...

Page 1: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

1

Aritmética

Aceleração da adição

Page 2: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

2

Adição básica (Ripple-carry)

Um circuito full adder (dado em AC1)

AB

Cin

Cout

S

Soma os bits A e B com o transporte anterior (Cin), dando o resultado da soma (S) e o transporte que sai (Cout)

Page 3: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

3

Adição básica (Ripple-carry)

Adicionador Ripple-carry de n bits

FA

A0 B0

S0

FA

A1 B1

FA

A2 B2

FA

A3 B3

C1 C2C0

C3

S1 S2 S3

C4

Problema: Os transportes (Ci’s) têm que se propagar entre os full adders

Admitindo que cada full adder impõe um atraso, o tempo necessário para ser feita a soma será proporcional a n

Page 4: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

4

Adição básica (Ripple-carry)

Outra maneira de ver

AB

Cin

Cout

S

PFA

PFA – Partial Full Adder

Page 5: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

5

Adição básica (Ripple-carry)

Outra maneira de ver

ABG

BAP

Em que:

Propagação de carry

Geração de carry

PFA

A B

S

P G Cout

Cin

Page 6: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

6

Adição básica (Ripple-carry)

Para um ripple adder de 4 bits

P’s e G’s podem ser calculados em paralelo (ao mesmo tempo)

As somas (os S’s) têm que esperar que chegue o Ci respectivo

PFA

A0 B0

S0

P0 G0

PFA

A1 B1

S1PFA

A2 B2

S2PFA

A3 B3

S3

P1 G1C1 C2

C0

P2 G2 P3 G3

C4C3

Page 7: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

7

Adição básica (Ripple-carry)

Para um ripple adder de 4 bits

PFA

A0 B0

S0

P0 G0

PFA

A1 B1

S1PFA

A2 B2

S2PFA

A3 B3

S3

P1 G1C1 C2

C0

P2 G2 P3 G3

C4C3

Caminho crítico – corresponde ao pior caso na propagação dos sinais

Tipicamente é o que atravessa mais portas lógicas

Page 8: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

8

Acelerar a adição

Genericamente tem-se:

0012012122

0001122

11122

2223

CPPPGPPGPG

CPGPGPG

CPGPG

CPGC

001011

00011

1112

CPPGPG

CPGPG

CPGC

0001 CPGC

iii

iii

iiii

BAP

BAG

CPGC

1

...C 4

Page 9: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

9

Acelerar a adição

Com base nessas equações obtém-se:

PFA

A0 B0

S0

P0 G0

PFA

A1 B1

S1PFA

A2 B2

S2PFA

A3 B3

S3

P1 G1C1

C2

C0

P2 G2 P3 G3

C4

C3

Page 10: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

10

Adicionador Carry Lookahead

Este tipo de adicionador designa-se por carry lookahead adder (CLA) Repare no atraso associado à propagação do carry

neste caso corresponde ao de 2 portas lógicas

E se quisesse construir um CLA de 8 bits ? Problema com o desenho anterior:

para calcular carrys de ordem elevada (e.g. C7) precisaria de portas lógicas com muitas entradas...

...difícil de implementar na prática

Uma abordagem mais realista seria usar portas com 2 entradas

Page 11: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

11

Adicionador Carry Lookahead

PFA

A0 B0

PFA

A1 B1

PFA

A2 B2

PFA

A3 B3

S0 S1 S2 S3

G01P01

G03P03

G23P23

P0 G0 P1 G1 P2 G2 P3 G3

C0

C1

C2

C3

C4

Page 12: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

12

Adicionador Carry Lookahead

PFA

A0 B0

PFA

A1 B1

PFA

A2 B2

PFA

A3 B3

S0 S1 S2 S3

G01P01

G03P03

G23P23

P0 G0 P1 G1 P2 G2 P3 G3

C0

C1

C2

C3

C4

O caminho crítico está representado a vermelho

Page 13: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

13

Adicionador Carry Lookahead

PFA

A0 B0

PFA

A1 B1

PFA

A2 B2

PFA

A3 B3

S0 S1 S2 S3 PFA

A4 B4

PFA

A5 B5

PFA

A6 B6

PFA

A7 B7

S4 S5 S6 S7C0

C8

Page 14: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

14

Adicionador Carry Lookahead

Comparação entre os adicionadores:(supondo que apenas são utilizadas portas lógicas com 2 entradas)

Nº de bitsRipple-carry CLA

Tempo Nº de portas Tempo Nº de portas

4 9tPD 20 7tPD 29

8 17tPD 40 11tPD 61

16 33tPD 80 15tPD 125

32 65tPD 160 19tPD 253

64 129tPD 320 23tPD 509

128 257tPD 640 27tPD 1021

Page 15: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

15

Outros adicionadores

Carry select adder A ideia consiste em preparar somas parciais para

ambas as hipóteses de carry in O carry out do bloco anterior irá seleccionar qual dos

2 resultados é válido

Carry skip adder Composto por vários blocos onde são calculados os

P’s, mas não os G’s Os P’s são utilizados para propagar o carry ao bloco

seguinte

Page 16: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

16

Outros adicionadores

Carry select adder (8 bits)

4-bitadder

S0...S3 S4...S7

Sel.

A0...A3

0 14-bit

adder

Mux

4-bitadder

A4...A7B0...B3 B4...B7

Sel

Cout Cin Cin

0 1

Cin0

Page 17: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

17

Outros adicionadores

Carry skip adder (16 bits)

C16C0

4-bitadder

S0..S3

A0..A3 B0..B3

Ci Co

4-bitadder

S4..S7

A4..A7 B4..B7

Ci Co

4-bitadder

S8..S11

A8..A11 B8..B11

Ci Co

4-bitadder

S12..S15

A12..A15 B12..B15

Ci Co

P4,7 P8,11

Page 18: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

18

Síntese

Evolução do tempo necessário para fazer uma soma de dois números representados com n bits

Adicionador Tempo

Ripple O(n)

Carry lookahead O(log2 n)

Carry skip O(√n)

Carry select O(√n)

n – número de bits

O(x) – significa “evolui proporcionalmente com a grandeza x”

Page 19: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

19

Síntese

Adicionadores (tempos)

0

50

100

150

200

250

300

0 32 64 96 128

Número de bits

Tem

po (

x t P

D)

Ripple

CLA

Select

Skip

Page 20: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

20

Adicionadores (número de portas)

0

500

1000

1500

2000

0 32 64 96 128

Número de bits

Núm

ero

de p

orta

s ló

gica

s

Ripple

CLA

Select

Skip

Síntese

Page 21: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

21

Pipelines

Page 22: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

22

Introdução

Arquitectura com unidade de controlo uniciclo

PC

Descodificador de Endereços

Descodificador de Instruções

Controlo de saltos

Memória de programa

Memória de dados

Datapath

Unidade de controlo

Leitura/Escrita

Palavra de Controlo

Bits de estado (flags)

Load / INC

Tipo de salto

Page 23: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

23

Introdução

A mesma ideia, posta de uma forma diferente...

PC

Bancode

registos ALU

Controlo de saltos

MUX

Inc

MUX

MUX

Const

End. salto

Tipo salto

Memória de dados

Memória de

instruções

Page 24: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

24

Introdução

PC

Bancode

registos ALU

Controlo de saltos

MUX

Inc

MUX

MUX

Const

End. salto

Tipo salto

Memória de dados

Memória de

instruções

Fetch Descodificação Execução Acesso à memória

Write back

Page 25: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

25

Descodificação

ID

Fetch

IF

Execução

EXE

Memória

MEM

Write-back

WB

Introdução

Por cada instrução tem-se a sequência

Fetch (IF) – ler a instrução localizada no endereço dado por PC Descodificação (ID) – obter o opcode e operandos; ler os

registos fonte Execução (EXE) – operações na ALU e controlo dos saltos Memória (MEM) – aceder à memória para escrever ou ler dados Write-back (WB) – escrever o resultado no registo de destino

Page 26: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

26

Funcionamento em pipeline Estrutura de um pipeline

IDIF EXE MEM WBIDIF EXE MEM WBIDIF EXE MEM WB

Clock

Separam-se as várias etapas por registos (buffers)

E sincronizam-se esses registos com um sinal de relógio comum…

Obtém-se um pipeline

Page 27: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

27

Funcionamento em pipeline

Com mais detalhe...

PC

Bancode

registos ALU

Controlo de saltos

MUX

Inc

MUX

MUX

Const

End. salto

Tipo salto

Memória de dados

Memória de

instruções

Page 28: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

28

Funcionamento em pipeline

Ideia semelhante a uma linha de montagem: Por cada impulso de relógio é realizada uma etapa de

uma instrução Se o pipeline tem N etapas, então N instruções

podem estar simultaneamente dentro do pipeline Uma instrução em cada etapa

IDIF EXE MEM WB

Clock

Inst. iInst. i+1Inst. i+2Inst. i+3Inst. i+4

Page 29: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

29

Funcionamento em pipeline

Ilustração do funcionamento

IDIF EXE MEM WB

Clock

Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…

Programa a correr

Page 30: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

30

Funcionamento em pipeline

Ilustração do funcionamento

IDIF EXE MEM WB

Clock

Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…

Programa a correr

Inst. 1

Page 31: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

31

Funcionamento em pipeline

Ilustração do funcionamento

IDIF EXE MEM WB

Clock

Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…

Programa a correr

Inst. 2 Inst. 1

Page 32: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

32

Funcionamento em pipeline

Ilustração do funcionamento

IDIF EXE MEM WB

Clock

Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…

Programa a correr

Inst. 3 Inst. 2 Inst. 1

Page 33: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

33

Funcionamento em pipeline

Ilustração do funcionamento

IDIF EXE MEM WB

Clock

Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…

Programa a correr

Inst. 3 Inst. 2 Inst. 1Inst. 4

Page 34: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

34

Funcionamento em pipeline

Ilustração do funcionamento

IDIF EXE MEM WB

Clock

Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…

Programa a correr

Inst. 3 Inst. 2 Inst. 1Inst. 4Inst. 5

Page 35: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

35

Funcionamento em pipeline

Ilustração do funcionamento

IDIF EXE MEM WB

Clock

Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…

Programa a correr

Inst. 3 Inst. 2Inst. 4Inst. 5Inst. 6

Page 36: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

36

Funcionamento em pipeline

Outra maneira de ver..

1º 2º 3º 4º 5º 6º 7º 8º 9º 10º 11º

inst 1 IF ID EXE MEM WB

inst 2 IF ID EXE MEM WB

inst 3 IF ID EXE MEM WB

inst 4 IF ID EXE MEM WB

inst 5 IF ID EXE MEM WB

inst 6 IF ID EXE MEM WB

... ... .... .... ... ...

Ciclos de relógio

Por exemplo, no 5º ciclo de relógio, a instrução 1 está na fase WB, a instrução 2 na fase MEM, a instrução 3 na fase EXE, a inst. 4 está na fase ID e a inst. 5 na fase IF.

Page 37: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

37

Desempenho ideal

Em condições ideais O pipeline está “equilibrado”

todas as etapas demoram o mesmo tempo

O pipeline encontra-se sempre cheio tem-se sempre uma instrução em cada etapa

Ganho (ideal) face a uma versão sem pipeline:

etapas

oldetapanew N

TTT

Page 38: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

38

Conflitos

Mas num pipeline nem tudo são rosas... Existem situações em que

Instruções em fases diferentes tentam aceder ao mesmo recurso (e.g. à memória)

O resultado de uma instrução depende de outra que ainda não terminou a execução

Essas situações designam-se por conflitos (ou pipeline hazards)

A existência de conflitos reduzem significativamente o ganho de um pipeline...

Page 39: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

39

Conflitos

Tipos de conflitos Conflitos de dados

ocorrem quando existem dependências de dados entre instruções que se encontram dentro do pipeline

Conflitos estruturais ocorrem quando duas instruções em fases diferentes tentam aceder ao mesmo recurso

Conflitos de controloocorrem em instruções de salto, quando o salto depende de um resultado que ainda não foi calculado

Page 40: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

40

Conflitos de dados

Conflito RAW (Read after Write) Para ilustrar a ocorrência destes conflitos vamos considerar que

temos duas instruções: instrução 1 e instrução 2 A instrução 2 vai ser executada depois da instrução 1

Vamos supor que a instrução 2 lê dados que são o resultado da instrução 1 – existe uma dependência entre as instruções

O conflito ocorre se a instrução 2 tentar ler os dados antes da instrução 1 os ter escrito

A instrução 2 iria ler um valor desactualizado...

Exemplo:...

inst. 1: ADD R0, R1, R2 # R0 ← R1 + R2

inst. 2: SUB R5, R0, R4 # R5 ← R0 – R4

...

Page 41: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

41

Conflitos de dados

Conflito RAW (cont.)

k k+1 k+2 k+3 k+4 k+5 k+6 k+7

... ... ... ... ...

ADD R0, R1, R2 IF ID EXE MEM WB

SUB R5, R0, R4 IF ID EXE MEM WB

... ... ... ... ... ...

CONFLITO !

A instrução SUB está a utilizar o valor de R0 antes de tempo, pois a instrução ADD ainda não escreveu o resultado (Write-back)...

Page 42: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

42

Conflitos de dados

Resolução básica de conflitos Detecta-se o conflito

Introduzem-se bolhas no pipeline Uma bolha é basicamente uma palavra de controlo que

manda “não fazer nada” (nop) Cada bolha faz com que seja desperdiçado um ciclo de

relógio

Contudo existem alternativas mais eficientes para resolver cada tipo de conflito

Inserir bolhas, só mesmo se não houver uma alternativa...

Page 43: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

43

Conflitos de dados

Para o caso anterior, resolve-se o conflito introduzindo 2 bolhas após detectado o conflito O conflito pode ser detectado quando é feita a descodificação do SUB Depois atrasa-se o SUB dois ciclos, de forma a dar tempo para fazer o

WB do ADD

k k+1 k+2 k+3 k+4 k+5 k+6 k+7

... ... ... ... ...

ADD R0, R1, R2 IF ID EXE MEM WB

SUB R5, R0, R4 IF ID B B EXE MEM WB

… ... ... ... ... ...

Conflito resolvido

Conflito detectado

Page 44: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

44

IDIF EXE MEM WB

Clock

Conflitos de dados

Outra maneira de ver o problema:

SUB R5,R0,R4 ADD R0,R1,R2 …

Page 45: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

45

IDIF EXE MEM WB

Clock

Conflitos de dados

Outra maneira de ver o problema:

SUB R5,R0,R4 ADD R0,R1,R2 ……

Page 46: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

46

IDIF EXE MEM WB

Clock

Conflitos de dados

Outra maneira de ver o problema:

SUB R5,R0,R4 ADD R0,R1,R2 ……BB

Page 47: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

47

IDIF EXE MEM WB

Clock

Conflitos de dados

Outra maneira de ver o problema:

SUB R5,R0,R4 ADD R0,R1,R2…BB BB

Page 48: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

48

IDIF EXE MEM WB

Clock

Conflitos de dados

Outra maneira de ver o problema:

SUB R5,R0,R4… BB BB…

Page 49: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

49

Conflitos de dados

Resolução mais eficiente de conflitos RAW Utiliza-se uma técnica chamada forwarding A ideia consiste em disponibilizar resultados nas

entradas da unidade funcional (fase EXE)… …ainda antes de ser feito o write-back Quando são detectados conflitos, utilizam-se esses

resultados em vez do que foi lido dos registos

Page 50: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

50

MUX

ALU

MUXMemória

de dados

Conflitos de dados

Utilização de forwarding

MUX

MUX

ALU

MUXMemória

de dados

Page 51: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

51

Conflitos de dados

Outros conflitos de dados Conflito WAW (Write after Write)

Ambas as instruções são de escrita e o resultado vai ser escrito no mesmo local

O conflito ocorre quando se a instrução 2 tentar escrever antes da instrução 1

Conflito WAR (Write after Read) A instrução 1 lê dados do local onde a instrução 2 escreve O conflito ocorre se a instrução 2 tentar escrever antes da

instrução 1 ler

Ocorrem em pipelines mais complexos, com várias fases onde podem ser feitas leituras e escritas e nos registos

Page 52: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

52

Conflitos estruturais

Duas (ou mais) instruções tentam aceder simultaneamente ao mesmo recurso Situação típica:

Quando se usa uma única memória para dados e programa, não se pode fazer o fetch (IF) ao mesmo tempo que uma instrução acede à memória para ler/escrever dados

Situações menos típicas Tentar escrever no mesmo registo em simultâneo (só ocorre em

processadores com mais do que uma fase de write-back) Tentar ler ou escrever dados em simultâneo na mesma memória (só

ocorre em processadores com mais do que uma fase de acesso à memória)

Page 53: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

53

Conflitos estruturais

Exemplo de um conflito estrutural

k k+1 k+2 k+3 k+4 k+5 k+6 k+7

... ... ... ... ...

LOAD R1, a IF ID EXE MEM WB

ADD R3,R4,R5 IF ID EXE MEM WB

SUB R6,R6,R7 IF ID EXE MEM WB

XOR R1,R4,R5 IF ID EXE MEM WB

...

Não pode ser feito o fetch ao mesmo tempo que se acede à memória para ler dados (o LOAD)...

CONFLITO !

Page 54: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

54

Conflitos estruturais

Resolução do conflito Introdução de uma bolha antes do fetch...

k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8

... ... ... ... ...

LOAD R1, a IF ID EXE MEM WB

ADD R3,R4,R5 IF ID EXE MEM WB

SUB R6,R6,R7 IF ID EXE MEM WB

XOR R1,R4,R5 B IF ID EXE MEM WB

... ... ... ... ...

Conflito resolvido

Page 55: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

55

Conflitos estruturais

Resoluções mais eficientes Memórias de dados e de instruções separadas

Tipicamente este esquema é implementado usando uma memória cache para dados e outra para instruções

Instruction pre-fetching É feito antecipadamente o fetch de várias instruções, que

ficam guardadas numa memória interna (buffer de instruções) Quando o buffer fica vazio vão-se buscar mais instruções à

memória.

Page 56: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

56

Conflitos de controlo

Ocorrem quando aparecem saltos Saltos incondicionais

O processador só fica a saber que é uma instrução de salto na fase ID (descodificação)...

... mas nessa altura a instrução na posição que se segue à de salto já se encontra na fase IF (fetch)

Saltos condicionais Para além do que acontece com os saltos incondicionais, não

se sabe antecipadamente se vai ou não ocorrer o salto Tipicamente só se sabe a ocorrência (ou não) do salto após a

verificação da condição do salto (tipicamente associada à fase EXE)

Page 57: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

57

PC

Bancode

registos ALU

Controlo de saltos

MUX

Inc

MUX

MUX

Const

End. salto

Tipo salto

Memória de dados

Memória de

instruções

Conflitos de controlo

Só aqui se sabe que é um salto...

Nos saltos condicionais, só aqui se sabe se o salto vai ser tomado ou não...

Page 58: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

58

Conflitos de controlo

Exemplo (salto incondicional)

...

LBL1: ADD R1, R4, R5

...

STORE a, R1

JUMP LBL1

LBL2: LOAD R1, a

...

Page 59: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

59

Conflitos de controlo

Ilustração do problema (salto incondicional):

k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9

... ... ... ... ...

JUMP LBL1 IF ID EXE MEM WB

LOAD R1, a IF B B B B

ADD R1, R4, R5 IF ID EXE MEM WB

... ... ... ... ...

Perde-se 1 ciclo, pois é feito um fetch inútil da instrução que se segue à de salto

Page 60: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

60

Conflitos de controlo

Exemplo (salto condicional)

...

DEC R1, R1

JZER END

ADD R0, R1, R2

STORE a, R0

...

END: LOAD R1, a

...

Umas vezes há salto, outras não...

Page 61: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

61

Conflitos de controlo

supondo que o salto ocorre:

k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9

... ... ... ... ...

DEC R1, R1 IF ID EXE MEM WB

JZER END IF ID EXE MEM WB

ADD R0, R1, R2 IF ID B B B

STORE a, R4 IF B B B B

LOAD R1, a IF ID EXE MEM WB ...

Perdem-se 2 ciclos, pois só se irá actualizar o valor de PC depois do salto concluir a fase EXE (só aí se sabe que o salto se vai verificar ou não)...

Page 62: 1 Aritmética Aceleração da adição. 2 Adição básica (Ripple-carry) Um circuito full adder (dado em AC1) Soma os bits A e B com o transporte anterior (C.

62

Conflitos de controlo

Minorar a introdução de bolhas:Previsão de saltos (branch prediction) Previsão estática

Assume-se que o salto é sempre tomado (predict-taken) Ou se assume que o salto nunca é tomado (predict-not-taken)

Previsão dinâmica A previsão depende do que se passou em saltos anteriores Muito usada actualmente

Nos casos em que a previsão está errada vão-se perder ciclos de processamento

A anular o efeito das instruções que entretanto entraram