1
?1 9 9 8 Morgan Kaufmann Publishers
Capítulo 4
This material may not be copied or distributed for commercial pu rposes without express written permission of the copyright holder.
Permission is granted to copy and distribute this material for e ducational purposes only, provided that the complete bibliographic citation and following credit line is included: "Copyright 1998 Morgan Kaufmann Publishers." Permission is granted to alter and distribute this material provided that the following credit line is included: "Adapted from Computer Organization and Design: The Hardware/Software Interface, 2nd EditionDavid A. Patterson, John L. HennessyMorgan Kaufmann, 2nd ed., 1997, ISBN 1558604286 Copyright 1998 Morgan Kaufmann Publishers."
Lecture slides created by Michael Wahl in English
Tradução: Christian Lyra Gomes Revisão: Wagner M. N. Zola
2
?1 9 9 8 Morgan Kaufmann Publishers
Aritmética
• Por onde já passamos:
– Desempenho (segundos, ciclos, instruções) – Abstrações:
Arquitetura de Conjunto de Instruções Linguagem Assemblye Linguagem de Máquina
• O que está a frente:
– Implementar a Arquitetura
32
32
32 operação
resultado a
b ULA
• Bits são apenas bits (não tem um significado inerente)
— convenções definem a relação entre bits e números
• Números binários (base 2)
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001...
decimal: 0...2n-1
• Claro que isso fica mais complicado:
números são finitos (overflow) frações e números reais números negativos
ex., não existe instrução subi no MIPS; addi pode adicionar um número negativo
• Como nós podemos representar números negativos?
Qual padrão de bits irá representar que número?
Números
4
?1 9 9 8 Morgan Kaufmann Publishers
• Sinal de Magnitude: Complemento de 1 Complemento de 2 000 = +0 000 = +0 000 = +0 001 = +1 001 = +1 001 = +1 010 = +2 010 = +2 010 = +2 011 = +3 011 = +3 011 = +3 100 = -0 100 = -3 100 = -4 101 = -1 101 = -2 101 = -3 110 = -2 110 = -1 110 = -2 111 = -3 111 = -0 111 = -1
• Pontos: balanço, número de zeros, facilidade de operações
• Qual deles é melhor? Por que?
Representações possíveis
5
?1 9 9 8 Morgan Kaufmann Publishers
• Números de 32 bits com sinal:
0000 0000 0000 0000 0000 0000 0000 0000 two= 0
ten 0000 0000 0000 0000 0000 0000 0000 0001
two= + 1 ten 0000 0000 0000 0000 0000 0000 0000 0010
two= + 2 ... ten
0111 1111 1111 1111 1111 1111 1111 1110
two= + 2,147,483,646 ten 0111 1111 1111 1111 1111 1111 1111 1111
two= + 2,147,483,647 ten 1000 0000 0000 0000 0000 0000 0000 0000
two= –2,147,483,648 ten 1000 0000 0000 0000 0000 0000 0000 0001
two= –2,147,483,647 ten 1000 0000 0000 0000 0000 0000 0000 0010
two= –2,147,483,646 ten ...
1111 1111 1111 1111 1111 1111 1111 1101 two= –3
ten 1111 1111 1111 1111 1111 1111 1111 1110
two= –2 ten 1111 1111 1111 1111 1111 1111 1111 1111
two= –1 ten
maxint minint
MIPS
• Negar um número em complemento de dois: inverter todos e bits e adicionar 1
– lembre-se: “negar” e “inverter” são bem diferentes!
• Convertendo números com n bits em números com mais de n bits:
– imediatos de 16 bits do MIPS 16 bit são convertidos em 32 bits para as operações aritméticas
– copie o bit mais significante (o bit do sinal) nos outros bits 0010 -> 0000 0010
1010 -> 1111 1010 – ”extensão de sinal" (lbu vs. lb)
Operações com Complemento de Dois
7
?1 9 9 8 Morgan Kaufmann Publishers
• Como na escola primária (vai/empresta 1s)
0111 0111 0110
+ 0110 - 0110 - 0101
• Operações em complemento de dois fácil – subtração usando adição de números negativos
0111 + 1010
• Overflow (resultado muito grande para uma palavra de computador finita):
– ex., adicionando 2 números de n bits não resulta em outro número de n bits
0111
+ 0001 note que o termo overflow pode ser enganoso, 1000 ele não significa um carry (vai-um) “ overflowed”
Adição & Subtração
8
?1 9 9 8 Morgan Kaufmann Publishers
• Não há overflow quando se adiciona um número positivo e um negativo
• Não há overflow quando os sinais são iguais na subtração
• Overflow ocorre quando o valor afeta o sinal:
– overflow quando adicionando dois positivos resulta num negativo
– ou, adicionando dois negativos resulta num positivo – ou, subtraindo um negativo de um positivo resulta num negativo – ou, subtraindo um positivo de um negativo e o resultado é
positivo
• Considere as operações A + B, and A – B – Pode ocorrer overflow se B for 0 ? – Pode ocorrer overflow se A for 0 ?
Detectando Overflow
• Uma exceção ocorre (interrupção)
– controle salta para um endereço de exceção pré-definido – Endereço onde foi interrompido é armazenado para uma possível
reinicio
• Detalhes baseados no sistema de software/linguagem – exemplo: controle de vôo vs lição de casa
• Nem sempre se quer detectar overflow
— novas instruções MIPS:addu, addiu, subu nota: addiucontinua estendendo o sinal!
nota:sltu,sltiupara comparações sem sinal
Efeitos do Overflow
10
?1 9 9 8 Morgan Kaufmann Publishers
• Problema: Considere uma função lógica com 3 entradas: A, B, e C.
Saída D é verdadeira se pelo menos uma entrada for verdadeira Saída E é verdadeira se exatamente duas entradas forem verdadeiras
Saída F é verdadeira somente se as 3 entradas forem verdadeiras
• Mostre a tabela verdade para essas 3 funções.
• Mostre as equações Booleanas para essas 3 funções.
• Mostre uma implementação usando apenas inversores, portas E e portas OU.
Revisão: Álgebra Booleana & portas lógicas (Gates)
11
?1 9 9 8 Morgan Kaufmann Publishers
• Vamos construir uma ULA que suporte as instruçõesandie ori – nós iremos construir apenas uma ULA de 1 bit e usar 32 delas
• Possível implementação (soma-dos-produtos):
b a
operação
resultado
op a b res
Uma ULA (Unidade Lógica Aritmética)
• Seleciona uma das entras para ser a saída, baseado numa entrada de controle
• Vamos construir nossa ULA usando um MUX:
S
A C B
0 1
Revisão: O Multiplexador
nota: Nós chamamos isso de um mux de 2 entradas mesmo que ele tenha 3 entradas!
13
?1 9 9 8 Morgan Kaufmann Publishers
• Não é fácil decidir qual é a melhor maneira de se construir alguma coisa
– Não se deseja muitas entradas para um única porta – Não se deseja ter que atravessar muitos portas
– para nossos propósitos, facilidade de compreensão é importante
• Vamos olhar a ULA de 1 bit para adição:
• Como nós podemos construir uma ULA de 1 bit para adição, E e OU?
• Como nós podemos construir uma ULA de 32 bits?
Diferente Implementações
cout= a b + a cin+ b cin sum = a xor b xor cin
Su m Ca rryIn
Ca rryO ut a
b
14
?1 9 9 8 Morgan Kaufmann Publishers
Construindo uma ULA de 32 bits
b 0
2 R es ul t Op era ti on
a
1 Carr yIn
Ca rryO ut
Re s ul t3 1 a 3 1
b 3 1
Re s ul t0 Ca rry In
a 0 b 0
Re s ul t1 a 1
b 1
Re s ul t2 a 2
b 2
Op e rati o n
AL U0 Ca rry In
Ca rry Ou t
AL U1 Ca rry In
Ca rry Ou t
AL U2 Ca rry In
Ca rry Ou t
AL U3 1 Ca rry In
• Abordagem Complemento de 2: apenas negamos b e adicionamos.
• Como nós negamos?
• Uma solução muito inteligente:
E a subtração (a – b) ?
0
2 Re su l t Op e ra tio n
a
1 Ca rryIn
Ca rry Ou t 0 1 Bi n ve rt
b
16
?1 9 9 8 Morgan Kaufmann Publishers
• Precisa suportar a instrução atribui-se-menor -que (set-o n-less-than - slt)
– lembre-se: slt é uma instrução aritmética – produz 1 se rs < rt, e 0 caso contrário – usa subtração: (a-b) < 0 implica que a < b
• Precisa suporta o teste de igualdade (beq $t5, $t6, $t7) – usa subtração: (a-b) = 0 implica que a = b
Ajustando a ULA ao MIPS
Suportando slt
• Podemos descobrir a idéia?
0
3 Resul t Operation
a
1 CarryIn
Carry Out 0 1 B inv ert
b 2
Les s
0
3 Res ult Oper ati on
a
1 Car ryIn
0 1 Bi nvert
b 2
Les s
Set
Ov erflow
detec tion Overfl ow
a.
b.
Se t a3 1
0
ALU 0 Re su lt0
C arry In
a0
Re su lt1 a1
0
Re su lt2 a2
0
O pe ra tio n
b3 1 b0
b1
b2
Re su lt3 1 Ov erfl o w Bi nv e rt
C arry In Le s s C arry In
C arry Ou t
ALU 1 Le s s C arry In
C arry Ou t
ALU 2 Le s s C arry In
C arry Ou t
ALU 31 L es s C arry In
19
?1 9 9 8 Morgan Kaufmann Publishers
Teste de igualdade
• Observe as linhas de controle:
000 = and 001 = or 010 = add 110 = subtract 111 = slt
•Nota: zero retorna 1 quando o resultado é zero!
Se t a 31
0 Re su l t0 a0
Re su l t1 a1 0
Re su l t2 a2 0
Op era ti o n
b 31 b0
b1
b2
Re s ul t3 1
O ve rflo w Bn eg a te
Ze ro AL U0
L es s Ca rryIn
Ca rryO ut
AL U1 L es s Ca rryIn
Ca rryO ut
AL U2 L es s Ca rryIn
Ca rryO ut
AL U3 1 L es s Ca rryIn
20
?1 9 9 8 Morgan Kaufmann Publishers
Conclusão
• Nós podemos construir uma ULA para suportar o conjunto de instru ções do MIPS
– idéia chave: usar o multiplexador para selecionar a saída que nós queremos – nós podemos executar a subtração de maneira eficiente com o comp lemento
de 2
– nós podemos replicar a ULA de 1 bit para produzir a ULA de 32 bits
• Pontos importantes sobre o hardware
– todas as portas lógicas estão sempre funcionando – a velocidade de uma porta é afetada pelo número de entradas – a velocidade de um circuito é afetada pelo número de portas em série
(no “caminho crítico” ou o “nível de lógica mais profundo”)
• Nosso foco primário: compreensão, no entanto,
– Mudanças inteligentes na organização podem melhorar o desempenho (similar a usar melhores algoritmos no software)
– Nós iremos olhar dois exemplos de adição e multiplicação
• Uma ULA de 32 bits é rápida como uma ULA de 1 bit?
• Existe mais de uma maneira de se fazer a adição?
– dois extremos: propagação de vai-1 e soma de produtos
Você pode ver a propagação? Como você pode se livrar dela?
c1= b0c0+ a0c0 + a0b0 c2= b1c1+ a1c1 + a1b1c2= c3= b2c2+ a2c2 + a2b2 c3= c4= b3c3+ a3c3 + a3b3 c4=
Não é praticável! Por que?
*N.T.: ripple carry adder
Problema: somador com propagação de vai-1* é lento
22
?1 9 9 8 Morgan Kaufmann Publishers
• Uma aproximação no meio dos nossos dois extremos
• Motivação:
– Se nós não sabemos o valor do vem-1, o que podemos fazer?
– Quando nós podemos sempre gerar o vai-1? gi= aibi – Quando nós podemos propagar o vai-1? pi= ai + bi
• Nós nos livramos da propagação?
c1= g0+ p0c0 c2= g1+ p1c1 c2= c3= g2+ p2c2 c3= c4= g3+ p3c3 c4=
Praticável! Por que?
*N.T.: Carry-lookahead adder
Somador com antecipação do vai-1*
23
?1 9 9 8 Morgan Kaufmann Publishers
• Não podemos construir somadores com 16 bits desse jeito... (muito grande)
• Podemos usar o somadores com propagação de vai -1 com somadores com antecipação de vai-1 de 4 bits
• Melhor: use o princípio AV-1 de novo!
Use o princípio para construir somadores maiores
Ca rry In
Re su l t0--3 AL U0
Ca rry In
Re su l t4--7 AL U1
Ca rry In
Re su l t8--1 1 AL U2
Ca rry In
Ca rryO u t Re su l t12 --1 5 AL U3
Ca rry In C1
C2
C3
C4 P0 G0
P1 G1
P2 G2
P3 G3
p i g i
p i + 1 g i + 1 c i + 1
c i + 2
c i + 3
c i + 4 p i + 2 g i + 2
p i + 3 g i + 3 a 0 b 0 a 1 b 1 a 2 b 2 a 3 b 3
a 4 b 4 a 5 b 5 a 6 b 6 a 7 b 7
a 8 b 8 a 9 b 9 a 10 b 10 a 11 b 11
a 12 b 12 a 13 b 13 a 14 b 14 a 15 b 15
Ca rry -lo o ka h ea d u ni t
• Mais complicado do que a adição
– Conseguida através de deslocamento e adição
• Mais tempo e mais área
• Vamos olhar 3 versões baseadas no algoritmo da escola primária 0010 (multiplicando)
__x_1011 (multiplicador)
• Números negativos: converter e multiplicar
– existem técnicas melhores, mas nós não veremos elas
Multiplicação
25
?1 9 9 8 Morgan Kaufmann Publishers
Multiplicação: Implementação
Do ne 1 . Tes t M ul tip l i er0
1 a .A dd mu l tip l i ca n d to pro d u ct a nd p la c e th e res u lt i n Pro d u ct re gi s ter
2 .Sh i ft th e Mu l tip l ic a nd re gi s ter l e ft1 b it
3 . Shi ft th e Mu l tip l ie r re g is ter ri g h t1 b it
3 2n d rep e titi o n?
Sta rt
Mu l tip l ie r0 =0 Mu l tip l ie r0 =1
No : < 3 2 re p eti ti on s
Ye s: 32 re p eti tio n s 6 4 -bi t AL U
C on tro l te st Mu l tip l ie r
Sh ift ri gh t
Pro d uc t Wri te M u lti p li ca n d
Sh ift l eft 6 4 b i ts
64 b i ts
3 2 b i ts
26
?1 9 9 8 Morgan Kaufmann Publishers
Segunda Versão
Mu l tip l ie r Sh ift ri gh t
Wri te 3 2 b i ts
6 4 bi ts
3 2 b i ts
Sh ift ri gh t M ul ti pl i ca n d
3 2 -b it AL U
Pro d uc t C on tro l te st
D on e 1 . Te s t Mu l tip l ie r0
1a . Ad d m u lti p li c an d to th e l e ft h a lf o f th e p ro du c t a n d p l a ce the re su l t in th e l e ft h a lf o f th e Pro du c t re g is te r
2 . Sh i ft th e Prod u c t re g is te r ri g h t 1 b it
3 . Sh i ft th e Mu l tip l ie r re gi s te r ri gh t 1 bi t
32 n d re p e titi on ? Start
M u lti p li e r0 = 0 M u lti p li e r0 = 1
No : < 3 2 re pe ti tio ns
Ye s : 3 2 rep e titi o ns
Versão Final
C on tro l te s t Wri te 3 2 b i ts
6 4 bi ts Sh ift ri gh t Pro d uc t M ul ti pl i ca n d
3 2 -b it AL U
D on e 1 . Te s t Pro du c t0
1a . Ad d m u lti p li c an d to th e l e ft h a lf o f th e p ro du c t a n d p l a ce the re su l t in th e l e ft h a lf o f th e Pro du c t re g is te r
2 . Sh i ft th e Prod u c t re g is te r ri g h t 1 b it
32 n d re p e titi on ? Start
Pro d u ct0 = 0 Pro du c t0 = 1
No : < 3 2 re pe ti tio ns
Ye s : 3 2 rep e titi o ns
28
?1 9 9 8 Morgan Kaufmann Publishers
Ponto Flutuante (uma breve olhada)
• Nós precisamos uma meio para representar – números com frações, ex., 3.1416 – números muito pequenos, ex., .000000001 – números muito grandes, ex., 3.15576 ?109
• Representação:
– sinal, expoente, significand : (–1)sinal???significand???2expoente – mais bits para o significand dá mais precisão
– mais bits no expoente aumenta o intervalo
• Padrão de ponto flutuante IEEE 754:
– precisão simples: 8 bits expoente, 23 bit significand – precisão dupla: 11 bit expoente, 52 bit significand
29
?1 9 9 8 Morgan Kaufmann Publishers
Padrão de Ponto Flutuante IEEE 754
• O bit “1” inicial do signifcand é implícito
• Expoente é “ajustado” para facilitar a ordenação – todos 0s é o menor expoente e todos os 1s é o maior – ajuste de 127 para precisão simples e de 1023 para precisão
dupla
– sumário: (–1)sinal?????significand) ???2expoente – ajuste
• Exemplo:
– decimal: -.75 = -3/4 = -3/22 – binário: -.11 = -1.1 x 2-1
– ponto flutuante: expoente = 126 = 01111110
– IEEE precisão simples: 10111111010000000000000000000000
Complexidade s do Ponto Flutuante
• As operações são um tanto mais complicadas (veja o texto)
• Além do overflow podemos ter também o “underflow”
• Precisão pode ser um grande problema
– IEEE 754 guarda dois bits extras, guarda e “redondo” (round ) – quatro modos de arredondamento
– positivos divididos por zero resultam em “infinito”
– zero dividido por zero resulta em “não é um número”
– outras complexidades
• Implementar o padrão pode ser trabalhoso
• Não usar o padrão pode ser ainda pior
– veja o texto para a descrição do bug do 80x86 e do Pentium !
31
?1 9 9 8 Morgan Kaufmann Publishers
Sumário do Capítulo 4
• Aritmética de computadores é restrita por uma precisão limitada
• Padrões de Bits não tem nenhum significado inerente mas existem padrões
– Complemento de 2 – Ponto flutuante IEEE 754
• Instruções de computador determinam o “significado” dos padrões de bits
• Desempenho e precisão são importantes pois existem muitas complexidades em máquinas reais (ex., algoritmos e implementações).
• Nós estamos prontos para seguir adiante (e implementar o processador)
Você pode querer uma revisão (Seção 4.12 é uma boa leitura!)