1 Aula 10 – Sumário Aritmética Aceleração da adição Multiplicação binária Pipelines ...
-
Upload
estela-rachel-de-mendonca-gama -
Category
Documents
-
view
217 -
download
3
Transcript of 1 Aula 10 – Sumário Aritmética Aceleração da adição Multiplicação binária Pipelines ...
1
Aula 10 – Sumário
Aritmética Aceleração da adição Multiplicação binária
Pipelines Princípio de funcionamento Conflitos de dados, estruturais e de controlo
2
Aritmética
Aceleração da adição
3
Adição básica (revisão)
Um circuito full adder…
Soma os bits A e B com o transporte anterior (Cin), dando o resultado da soma (S) e o transporte que sai (Cout)
AB
Cin
Cout
S
4
Adicionador Ripple-carry
Desvantagem: Como que cada full adder impõe um atraso, o tempo necessário para
ser feita a soma é proporcional ao nº de bits dos números a somar
Obtém-se ligando em série tantos full-adders quanto o nº de bits dos números que se querem somar.
FA
A0 B0
S0
FA
A1 B1
FA
A2 B2
FA
A3 B3
C1 C2C0
C3
S1 S2 S3
C4
5
AB
Cin
Cout
S
AB
Cin
Cout
S
Adicionador Ripple-carry
Outra maneira de ver
PFA
PFA – Partial Full Adder
6
Adicionador Ripple-carry
Outra maneira de ver
Em que:
Propagação de carry
Geração de carry
PFA
A B
S
P G Cout
Cin
ABGBAP
7
Adicionador Ripple-carry
Para um ripple adder de 4 bits
P’s e G’s são todos calculados ao mesmo tempo (em paralelo), pois só dependem dos A’s e dos B’s.
Os bits da soma (S’s) têm que esperar que chegue o Cin respectivo.
PFA
A0 B0
S0
P0 G0
PFA
A1 B1
S1 PFA
A2 B2
S2 PFA
A3 B3
S3
P1 G1C1 C2
C0
P2 G2 P3 G3
C4C3
8
Adicionador Ripple-carry
Para um ripple adder de 4 bits
Caminho crítico – corresponde ao pior caso na propagação dos sinais.
Tipicamente é o que atravessa mais portas lógicas.
PFA
A0 B0
S0
P0 G0
PFA
A1 B1
S1 PFA
A2 B2
S2 PFA
A3 B3
S3
P1 G1C1 C2
C0
P2 G2 P3 G3
C4C3
9
Acelerar a adição
Vamos usar as seguintes equações:
iii
iii
iiii
BAPBAG
CPGC
1
0001 CPGC
0012012122
0001122
11122
2223
CPPPGPPGPGCPGPGPG
CPGPGCPGC
...C 4
001011
00011
1112
CPPGPGCPGPG
CPGC
10
Acelerar a adição
A partir das equações anteriores obtém-se:
PFA
A0 B0
S0
P0 G0
PFA
A1 B1
S1 PFA
A2 B2
S2 PFA
A3 B3
S3
P1 G1C1
C2
C0
P2 G2 P3 G3
C4
C3
11
Adicionador Carry Lookahead Este tipo de adicionador designa-se por
Carry Lookahead Adder (CLA) Repare no atraso associado à propagação do carry até ao último
PFA – 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 fazer um esquema onde apenas se usassem portas lógicas com 2 entradas
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
13
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
14
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
C8Um CLA de 8 bits
15
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
16
Adicionador Carry Select
A ideia consiste em ir preparando somas parciais para ambas as hipóteses de carry in.
O carry out do bloco anterior irá seleccionar qual dos 2 resultados é válido.
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
17
Adicionador Carry Skip
C16C04-bit
adder
S0..S3
A0..A3 B0..B3
Ci Co4-bit
adder
S4..S7
A4..A7 B4..B7
Ci Co4-bit
adder
S8..S11
A8..A11 B8..B11
Ci Co4-bit
adder
S12..S15
A12..A15 B12..B15
Ci Co
P4,7 P8,11
Composto por vários blocos onde são calculados os P’s.
Estes cálculos permitem propagar o bit de transporte directamente ao bloco seguinte.
Poupa-se tempo de propagação nos blocos que ficam no meio.
18
Comparação entre adicionadores
Adicionador TempoRipple O(n)
Carry lookahead O(log2 n)
Carry skip O(√n)
Carry select O(√n)
O(x) significa “evolução assimptótica proporcional a x”
Tempo de operação
0
50
100
150
200
250
300
0 32 64 96 128
Número de bits
Tem
po (x
t PD)
Ripple
CLA
Select
Skip
Material necessário
0
500
1000
1500
2000
0 32 64 96 128
Número de bitsN
úmer
o de
por
tas
lógi
cas Ripple
CLA
Select
Skip
19
Aritmética
Multiplicação binária
20
Multiplicação binária
Multiplicação (sem sinal) 1101 multiplicando (A)
× 1010 multiplicador (B)
0000
1101
0000
1101
10000010 produto (P)
1101 (13) × 1010 (10) = 10000010 (130)
Quando se multiplicam dois números de n bits (sem sinal), o resultado terá, no máximo, 2n bits.
21
Multiplicação binária
Multiplicação (sem sinal)
A3 A2 A1 A0
× B3 B2 B1 B0
B0A3 B0A2 B0A1 B0A0
B1A3 B1A2 B1A1 B1A0
B2A3 B2A2 B2A1 B2A0
B3A3 B3A2 B3A1 B3A0
P7 P6 P5 P4 P3 P2 P1 P0
ANDs entre os bits de A e os bits de B
22
Multiplicação binária
Utilizando vários adicionadores...A3 A2 A1 A0
× B3 B2 B1 B0
0 B0A3 B0A2 B0A1 B0A0
+ B1A3 B1A2 B1A1 B1A0
cout1 S13 S12 S11 S10
+ B2A3 B2A2 B2A1 B2A0
cout2 S23 S22 S21 S20
+ B3A3 B3A2 B3A1 B3A0
cout3 S33 S32 S31 S30
P7 P6 P5 P4 P3 P2 P1 P0
Somadores
23
B3
A3 A2 A1 A0
B2
A3 A2 A1 A0
B1
A3 A2 A1 A0
B0
A3 A2 A1 A0
0
P7 P6 P5 P4 P3 P2 P1 P0
Cout
Cout
Cout
X Y
S
ADD
X Y
S
ADD
X Y
S
ADD
Multiplicação binária
Pode-se seguir esta estrutura
24
Multiplicação binária
Utilização de vários adicionadores Se os números a multiplicar são compostos por n bits
então são necessários n – 1 adicionadores de n bits cada um
Desvantagens: Excesso de material
por exemplo, para multiplicar dois números de 32 bits seriam necessários 31 somadores de 32 bits
Demasiado consumo de tempo durante um ciclo Num processador, ter um multiplicador deste género pode
aumentar de forma significativa a duração de cada ciclo do sinal de relógio, devido aos tempos de propagação dos somadores
25
Multiplicação binária
Alternativa: usar um único somador e registos O resultado é calculado em n ciclos Material necessário
Um registo para acumular as somas – RP Um registo de deslocamento para a esquerda e outro para a
direita – RA e RB RP e RA são registos de 2n bits para RB, um registo de n bits é suficiente
26
Multiplicação binária
Algoritmo básico (para inteiros sem sinal)
Inicialização:RP ← 0, RA ← A, RB ← B
Ciclo (n iterações)se ( RB0 == 1 ) // bit menos significativo em RB
RP ← RP + RARA ← RA << 1, RB ← RB >> 1
No final, o resultado da multiplicação está em RP
27
Multiplicação binária
Hardware para o algoritmo básico
RB0
RPLoad
ADD
B
RAShift left
RBShift right
Serial out
A
28
Multiplicação binária
Exemplo – multiplicar 1010 por 1001 (i.e. 109)
Inicialização:RP: 0000 0000RA: 0000 1010RB: 1001
Ciclo 1 (RB0 = 1)RP: 0000 1010RA: 0001 0100RB: 0100
Ciclo 2 (RB0 = 0)RP: 0000 1010RA: 0010 1000RB: 0010
Ciclo 3 (RB0 = 0)RP: 0000 1010RA: 0101 0000RB: 0001
Ciclo 4 (RB0 = 1)RP: 0101 1010RA: 1010 0000RB: 0000
O resultado será então:
RP: 01011010 = 21+23+24+26 = 2+8+16+64 = 90
29
Pipelines
30
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
31
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
Introdução
A mesma ideia, posta de uma forma diferente...Fetch Descodificação Execução Acesso à
memóriaWrite back
32
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
Descodificação
ID
Fetch
IF
Execução
EXE
Memória
MEM
Write-back
WB
33
Funcionamento em pipeline
Estrutura de um pipeline Separam-se as várias etapas por registos (buffers) E sincronizam-se esses registos com um sinal de
relógio comum…
IDIF EXE MEM WB
Clock
34
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
Flags
Funcionamento em pipeline
Com mais detalhe...
35
Funcionamento em pipeline
Ideia semelhante a uma linha de montagem: Por cada impulso de relógio é realizada uma etapa de
cada instrução que está dentro do pipeline Se o pipeline tem N etapas, então N instruções
podem estar simultaneamente dentro do pipeline
IDIF EXE MEM WB
Clock
Inst. iInst. i+1Inst. i+2Inst. i+3Inst. i+4
36
IDIF EXE MEM WB
Clock
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
37
IDIF EXE MEM WB
Clock
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 1
38
IDIF EXE MEM WB
Clock
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 1Inst. 2
39
IDIF EXE MEM WB
Clock
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 1Inst. 2Inst. 3
40
IDIF EXE MEM WB
Clock
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 1Inst. 2Inst. 3Inst. 4
41
IDIF EXE MEM WB
Clock
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 2 Inst. 1Inst. 3Inst. 4Inst. 5
42
IDIF EXE MEM WB
Clock
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 3 Inst. 2Inst. 4Inst. 5Inst. 6
43
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.
44
Desempenho em condições ideais
Em condições ideais: O pipeline está bem dividido
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:
45
Conflitos (pipeline hazards)
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
Situações deste género designam-se por conflitos (ou pipeline hazards)
A existência de conflitos afectam o CPI médio, reduzindo o ganho de um pipeline...
46
Tipos de conflitos
Conflitos de dadosocorrem 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
47
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 + R2inst. 2: SUB R5, R0, R4 # R5 ← R0 – R4
...
48
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...
49
Conflitos de dados
Resolução básica de conflitos Detecta-se o conflito Inserem-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
50
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
51
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4 ADD R0,R1,R2 …
52
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4 ADD R0,R1,R2 ……
53
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4 ADD R0,R1,R2 …… B
54
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4 ADD R0,R1,R2… B B
55
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4… B B…
56
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 RAW, utilizam-se
esses resultados em vez do que foi lido dos registos
57
Conflitos de dados
Utilização de forwarding
IDIF EXE MEM WB
Clock
MUX
MUX
ALU
MUXMemória
de dados
Com mais detalhe:
58
Conflitos de dados
Outros conflitos de dados Conflito WAW (Write after Write)
Ambas as instruções escrevem dados no mesmo local O conflito ocorre se a instrução 2 tentar escrever antes da
instrução 1 escrever Conflito WAR (Write after Read)
Uma 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
Só ocorrem em pipelines mais complexos, com várias fases onde são feitas leituras e escritas e nos registos
59
Conflitos estruturais
Duas (ou mais) instruções tentam aceder em simultâneo 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
Outras situações 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)
60
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 !
61
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
62
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.
63
Conflitos de controlo
Ocorrem quando aparecem saltos Saltos incondicionais
O processador só fica a saber que é uma instrução de salto na fase ID...
... mas nessa altura, a instrução que está na posição de memória que se segue à de salto já se encontra na fase IF
Saltos condicionais Para além do que acontece com os saltos incondicionais, só
se sabe vai haver o salto após a verificação da condição de salto (tipicamente associada à fase EXE)
64
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
Flags
Conflitos de controloSó aqui se sabe que é um salto...
Nos saltos condicionais, só depois das flags serem actualizadas é que se sabe se o salto vai ser tomado ou não...
65
Conflitos de controlo
Exemplo (salto incondicional)
...
LBL1: ADD R1, R4, R5
...
STORE a, R1
JUMP LBL1
LBL2: LOAD R1, a
...
66
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
(isto assumindo que o controlo está feito de forma a poder actualizar o valor de PC na altura em que a instrução de salto está em ID)
67
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...
68
Conflitos de controlo
Ilustração do problema (salto condicional):
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 entrar na fase EXE (só aí se sabe que o salto se vai verificar ou não)...
69
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 O estado da previsão de saltos vai mudando à medida que o
programa vai correndo Muito usada em processadores actuais
Em caso de previsão errada, perdem-se ciclos de processamento correspondentes às instruções que entretanto entraram no pipeline