organização e arquitetura de computadoresljsenger/2006/orgearq/org5.pdf · •algoritmo de booth...
TRANSCRIPT
OrganizaOrganizaçção e Arquitetura ão e Arquitetura de computadoresde computadores
Prof. Dr. Luciano José Senger
Aritmética computacional
RepresentaRepresentaçção de valoresão de valores
• Os valores expressos em números inteiros e fracionários necessitam ser representados de forma eficiente em sistemas computacionais, através de palavras binárias
• No hardware, os números são finitos, pois devem ser mapeados em palavras de tamanho fixo
• Além disso, o hardware necessita trabalhar com número com sinal (negativos e positivos) – Solução: usar 1 bit (sinal magnitude).
• Primeira tentativa: o bit mais significativos (MSB) é usado para sinal.– Problema: duas representações para o zero
– Solução mais usada: complemento a 2
– Notação em excesso (números em ponto flutuante)
• Faixa de valores em complemento de 2 para 3 bits
• Interface Hardware/Software
– Endereços: sempre positivos
– Em C: “int” e “unsigned int”
RepresentaRepresentaçção de valoresão de valores
0
-4
2-2
1
3-3
-1
111
101 011
001
010110
100
000
RepresentaRepresentaçção de valoresão de valores
• Como o computador trabalha com bits, todos os valores precisam ser convertidos para uma representação interna que seja eficiente na economia dos bits e na realização de operações sobre os valores
• Questão: Que tipo de variável que pode conter 1.000.000.000 (dec) ocupa mais espaço na memória?
– int em C
– String em C
– String em java (que usa Unicode)
AdiAdiççãoão
• Somador ripple carry (propagação de vai-um)
– O processo de somar as entradas de cada bit é rápido
– O problema é que o a propagação do excedente (carry) leva um tempo longo para atravessar o circuito: números maiores levam mais tempo para serem somados.
AdiAdiçção de alto desempenhoão de alto desempenho
• Carry lookahead adder (somador com previsão de excedente)
AdiAdiçção de alto desempenhoão de alto desempenho
• Carry lookahead adder (somador com previsão de excedente)
AdiAdiçção de alto desempenhoão de alto desempenho
• Carry lookahead adder (somador com previsão de excedente)
AdiAdiçção de alto desempenhoão de alto desempenho
• Hardware para adição e subtração
OverflowOverflow
• Detecção de overflow
• Ocorre sempre que o resultado de uma operação não pode ser representado no hardware disponível.
<0<0>=0A-B
>=0>=0<0A-B
>=0<0<0A+B
<0>=0>= 0A+B
ResultadoOperando BOperando AOperação
• Se um número for negativo, e o outro positivo, não ocorreráoverflow.
OverflowOverflow
• Interface hardware/software– O MIPS detecta um overflow como uma exceção,
também chamada de interrupção em muitos computadores
• Uma exceção ou interrupção corresponde basicamente a uma chamada de procedimento não planejada
• O endereço da instrução que gerou o overflow é salvo em registrador especial, e o computador desvia a execução para um endereço pré-definido, para invocar a rotina apropriada para essa exceção
• O MIPS inclui um registrador, chamado de contador de programa de exceção (EPC) para conter o endereço da instrução que causou a exceção. A instrução move from systemcontrol (mfc0) é usada para copiar o EPC para um registrador de uso geral, de modo que o software do MIPS tem a opção de retornar à instrução problemática por meio de uma instrução jump register
AdiAdiççãoão
• Interface hardware/software
– Na ocorrência de overflow a máquina precisa decidir
como tratá-lo.
– Linguagem C: não toma conhecimento do overflows,
assim o overflow deve ser tratado pelo programador.
– Outras linguagens, como ADA e FORTRAN, tratam o
overflow
– Na arquitetura IA-32, o registrador de flags notifica se o
resultado de uma operação aritmética gerou ou não um
overflow; cabe ao software utilizar essa informação para
o tratamento do overflow
MultiplicaMultiplicaççãoão
• Multiplicação
– A multiplicação, ao contrário da soma e da subtração, é
uma operação complexa
– Realizada através da soma dos produtos parciais para
cada dígito do multiplicador
– A soma deve ser realizada observando que cada
produto parcial tem uma posição (deslocamento) na
soma que deve ser respeitada
– A multiplicação de números inteiros binários de n bits
resulta em um produto com até 2n bits de tamanho
MultiplicaMultiplicaççãoão
1011 Multiplicando (11 decimal)
x 1101 Multiplicador (13 decimal)
1011 produtos parciais
0000 Nota: se o bit do multiplicador
1011 for igual a 1, copia-se o
1011 multiplicando, senão 0
10001111 produto (143 decimal)
Nota: o resultado é expresso através de um
número que tem o dobro do tamanho dos
termos (p.e. se os termos têm 4 bits, o
resultado deve ser expresso em 8 bits)
MultiplicaMultiplicaççãoão
• Hardware de multiplicação
MultiplicaMultiplicaççãoão
• Exemplo: Multiplicar 1011 por 1101
MultiplicaMultiplicaççãoão
• Diagrama de fluxo de dados para a multiplicação
MultiplicaMultiplicaçção mais rão mais ráápidapida
• Replicação de somadores
– Não importa se o multiplicando
deve ser somado ou não, isso é
conhecido no início da
multiplicação analisando cada
um dos 32 bits do multiplicador
– Multiplicações mais rápidas são
possíveis basicamente fornecendo
um somador de 32 bits para cada
bit do multiplicador: uma entrada
é o AND do multiplicando pelo
bit do multiplicador e a outra é a
saída do somador anterior
MultiplicaMultiplicaçção mais rão mais ráápidapida
• Replicação de somadores
MultiplicaMultiplicaççãoão
• Números negativos
– a técnica/hardware anterior não funciona para números
negativos, expressos em complemento de 2
– Primeira solução
• Converter o número negativo para um número positivo
• Multiplicar como descrito previamente
• Se os sinais dos termos iniciais forem diferentes, efetuar a
representação do resultado através de um número negativo
– Segunda solução
• Algoritmo de Booth
MultiplicaMultiplicaççãoão
• Diagrama de fluxo de dados para a multiplicação (Booth)
MultiplicaMultiplicaççãoão
• Algoritmo de Booth– O multiplicador e o multiplicando são armazenados nos registradores Q e
M
– Existe um registrador de 1 bit, posicionado logicamente à direita do bit menos significativo (Q0) do registrador Q e designado como Q-1
– A e Q-1 são inicializados com zero
– A lógica de controle examina os bits do multiplicador, um de cada vez
– Quando o bit é examinado, observa-se o bit a sua direita: se esses dois bits forem iguais (1-1 ou 0-0), então todos os bits dos registradores A, Q e Q-1são deslocados 1 bit para a direita; se eles forem diferentes, omultiplicando será somado ou subtraído do registrador A, dependendo se os dois bits são 0-1 ou 1-0, respectivamente
– Após a operação de adição ou subtração, ocorre o deslocamento de um bit para a direita, que é feito de tal maneira que o bit mais a esquerda de A, denominado de An-1, é deslocado para An-2, mas também permanece em An-1
– Tal forma de deslocamento é necessária para preservar o sinal do número armazenado em A e Q; esses deslocamento é conhecido como deslocamento aritmético, porque preserva o bit de sinal
MultiplicaMultiplicaççãoão
• Exemplo: Multiplicar 0111 por 0011
MultiplicaMultiplicaççãoão
• Algoritmo de Booth
MultiplicaMultiplicaççãoão DivisãoDivisão
• Algoritmo de divisão
– Mais complexo que o algoritmo de multiplicação
001111
1011
00001101
10010011
1011
001110
1011
1011
100
Quociente
Dividendo
Resto
Resto
Divisor
DivisãoDivisão
início
Teste doResto
2a. Desloque o Quociente 1 bit à esquerdaQ0 = 1
3. Desloque o Divisor 1 bit à direita
33 repetições?
Fim
Resto < 0Resto>=0
não
sim
1. Resto = Resto - Divisor
2b. Resto = Resto + Divisor Desloque o Quociente um 1 bit à esquerda
Q0 = 0
Ponto flutuantePonto flutuante
• Números reais não inteiros seguem a representação em ponto flutuante
• Na notação em ponto flutuante, os números seguem uma notação científica normalizada:
• Ocorrência de overflow e underflow
• Precisão simples (float)
s expoente mantissa
32 bits
1 8 23
ESFN 2)1( ××−=
Ponto flutuantePonto flutuante
• Formato duplo (double)
– Esses formatos estão de acordo com o padrão IEEE 754, encontradoem praticamente todos os computadores desde 1980
– Para colocar mais bits no significando, o IEEE 754 deixa explícito o bit 1 inicial nos números binários.
– Logo, o número tem 24 bits de largura na precisão simples e 53 bits na precisão dupla
– O valor de expoente 0 (reservado) indica o número zero
s expoente mantissa
64 bits
1 11 52
ESMantissaN 2)1()1( ×+−=
Ponto flutuantePonto flutuante
• Codificação do padrão IEEE 754 para os números em ponto flutuante– Para facilitar a comparação entre valores, o bit de expoente é representado
no início da palavra; além disso, a representação em excesso de 127 para a precisão simples:
– -1: -1+127 = 126
– 1: 1+127 = 128
– O bias para o expoente é igual a 1023
not a number (NaN)nonzero2047nonzero255
± infinity0± 20470± 255
± floating point numberanything± 1-2046anything± 1-254
± denormalized numbernonzero0nonzero0
zero (0)0000
F (52)E (11)F (23)E (8)
Objeto representadoPrecisão duplaPrecisão simples
)(2)1()1(
PesoESMantissaN
−
×+×−=
Ponto FlutuantePonto Flutuante
NaNNaN
+∞∞∞∞-∞∞∞∞ -0 +0+Denorm +Normalized-Denorm-Normalized
• Faixas de representação
• Description exp frac Numeric Value
• Zero 00…00 00…00 0.0
• Smallest Pos. Denorm. 00…00 00…01 2– {23,52} X 2– {126,1022}
– Single ≈ 1.4 X 10–45
– Double ≈≈≈≈ 4.9 X 10–324
• Largest Denormalized 00…00 11…11 (1.0 – εεεε) X 2– {126,1022}
– Single ≈ 1.18 X 10–38
– Double ≈≈≈≈ 2.2 X 10–308
• Smallest Pos. Normalized 00…01 00…00 1.0 X 2– {126,1022}
– Just larger than largest denormalized
• One 01…11 00…00 1.0
• Largest Normalized 11…10 11…11 (2.0 – εεεε) X 2{127,1023}
– Single ≈ 3.4 X 1038
– Double ≈≈≈≈ 1.8 X 10308
Ponto FlutuantePonto Flutuanteexp E value
0 0000 000 n/a 0
0 0000 001 -6 1/512
0 0000 010 -6 2/512
…
0 0000 110 -6 6/512
0 0000 111 -6 7/512
0 0001 000 -6 8/512
0 0001 001 -6 9/512
…
0 0110 110 -1 28/32
0 0110 111 -1 30/32
0 0111 000 0 1
0 0111 001 0 36/32
0 0111 010 0 40/32
…
0 1110 110 7 224
0 1110 111 7 240
0 1111 000 n/a inf
closest to zero
largest denorm
smallest norm
closest to 1 below
closest to 1 above
largest norm
Denormalized
numbers
Normalized
numbers
Padrão IEEE 754Padrão IEEE 754
• Exemplos:1. Representar o número 0,7510 em ponto flutuante e precisão
simples.2. Representar o número -0,7510 em ponto flutuante e dupla
precisão.
• Convertendo para binário:– 0,75 x 2 = 1,5 → 1– 0,5 x 2 = 1,0 → 1– -0,7510 = -0,112 = -0,11 x 20 = -1,1 x 2-1
• Em precisão simples:
• Resultado:
)(2)1()1(
PesoESMantissaN
−
×+×−=
Ponto FlutuantePonto Flutuante
• Converter a palavra abaixo em ponto flutuante para número:
• Resposta
AdiAdiçção e Multiplicaão e Multiplicaçção em Ponto Flutuanteão em Ponto Flutuante Ponto FlutuantePonto Flutuante
• Na arquitetura MIPS:– Adição simples e dupla: add.s e add.d
– Subtração simples e dupla: sub.s e sub.d
– Multiplicação simples e dupla: mult.s e mult.d
• Aritmética de precisão– Ao contrário dos números inteiros, os números em ponto flutuante
são aproximações dos valores reais
– O arredondamento exige bits adicionais
– O IEEE 754 mantém 2 bits extras à direita para adições intermediárias, chamados guarda e arredondamento
– Exemplo: soma 2,56 x 10^0 + 2,34 x 10^2, supondo 3 dígitos decimais significativos
• 2,3400 + 0,0256 = 2,3656
• Arredondamento: 2,37
• Sem dígitos de guarda e arredondamento:
• 2,34 + 0,02 = 2,36
Vida Real: ponto flutuante do IAVida Real: ponto flutuante do IA--3232
• IA-32
– Início: de ponto flutuante 1987
– Arquitetura de pilha: operandos são colocados na pilha e removidos para o processamento
– 80 bits são reservados para números em ponto flutuante (formato estendido); não utilizado pelas linguagens de programação tradicionais
s exp frac
063647879
ConsideraConsideraçções finaisões finais
• Considerações• Replicação de somadores: melhor desempenho
• Algoritmo de Booth– Trata números negativos diretamente
– Blocos de 1s e 0s são ignorados, sendo feita, em média, apenas uma adição ou subtração por bloco
• Multiplicação e divisão– Menos freqüentes
• Ponto flutuante– Aritmética complexa
– Registradores específicos
• Falácia:– a adição em ponto flutuante é associativa; ou seja, x+(y+z)=(x+y)+z.
ReferênciasReferências
• Patterson e Hennessy, cap. 3
• Stalings, cap. 8
• Murdocca, cap. 3
• Wikipedia:
– http://en.wikipedia.org/wiki/IEEE_floating-
point_standard