organização e arquitetura de computadoresljsenger/2006/orgearq/org5.pdf · •algoritmo de booth...

7
Organiza Organizaç ão e Arquitetura ão e Arquitetura de computadores de computadores Prof. Dr. Luciano José Senger Aritmética computacional Representa Representaçã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” Representa Representação de valores ão de valores 0 -4 2 -2 1 3 -3 -1 111 101 011 001 010 110 100 000 Representa Representaçã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) Adi Adiçã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. Adi Adição de alto desempenho ão de alto desempenho Carry lookahead adder (somador com previsão de excedente)

Upload: others

Post on 30-Apr-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Organização e Arquitetura de computadoresljsenger/2006/orgearq/org5.pdf · •Algoritmo de Booth –Trata números negativos diretamente –Blocos de 1s e 0s são ignorados, sendo

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)

Page 2: Organização e Arquitetura de computadoresljsenger/2006/orgearq/org5.pdf · •Algoritmo de Booth –Trata números negativos diretamente –Blocos de 1s e 0s são ignorados, sendo

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

Page 3: Organização e Arquitetura de computadoresljsenger/2006/orgearq/org5.pdf · •Algoritmo de Booth –Trata números negativos diretamente –Blocos de 1s e 0s são ignorados, sendo

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

Page 4: Organização e Arquitetura de computadoresljsenger/2006/orgearq/org5.pdf · •Algoritmo de Booth –Trata números negativos diretamente –Blocos de 1s e 0s são ignorados, sendo

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

Page 5: Organização e Arquitetura de computadoresljsenger/2006/orgearq/org5.pdf · •Algoritmo de Booth –Trata números negativos diretamente –Blocos de 1s e 0s são ignorados, sendo

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

×+×−=

Page 6: Organização e Arquitetura de computadoresljsenger/2006/orgearq/org5.pdf · •Algoritmo de Booth –Trata números negativos diretamente –Blocos de 1s e 0s são ignorados, sendo

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

Page 7: Organização e Arquitetura de computadoresljsenger/2006/orgearq/org5.pdf · •Algoritmo de Booth –Trata números negativos diretamente –Blocos de 1s e 0s são ignorados, sendo

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