Projecto de Sistemas Digitais

Propaganda
Projecto de Sistemas Digitais
Aritmética em Vírgula Flutuante: Algoritmos
e Arquitecturas
Dezembro de 2007
António José Duarte Araújo
1
Introdução
• A representação em VFL e a norma IEEE 754
– Porquê VFL? Precisão e gama de representação
– Rigidez da norma: embora essencial, não contempla formatos
de representação especificamente concebidos para
determinadas aplicações
• Dificuldades
– Optimização de formatos VFL
– Fluxo de projecto tradicional ao nível RTL não contempla a síntese de
operadores VFL
– Arquitecturas específicas colocam novos desafios
– Faltam metodologias capazes de proporcionarem uma visão
integrada das fases de projecto
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
2
Cálculo em VFL
• Operações aritméticas: +, −, ×, ÷
– Representação: sinal, significando e expoente
– Formato: dimensão ajustada às características da aplicação
• Funções transcendentes: ex, cos x, etc.
– Métodos de aproximação: polinómios, tabelas e processos
iterativos (p. ex. CORDIC)
– Precisão dependente das necessidades da aplicação
• Expressões matemáticas
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
3
1
Conceitos e definições
sinal
expoente
Número de bits
Significando
(“mantissa”)
Sinal
Expoente
Significando
A base β (2) não é representada
AJA, FEUP
4
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
Representação normalizada
Forma de representação em que o MSB do significando é 1
Exemplo:
0,1010•2011 = 0,0101•2100 = 1,0100•2010
forma
normalizada
f=0100
E=010
M=1,f
Vantagens:
• Poupa-se 1 bit no significando
• Coerência de representação
• Facilita a comparação de números VFL (expoentes)
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
5
2
Representação do significando
hidden bit
fracção
unit in the last position
• a parte fraccionária do significando
é por vezes tratada por significando
• m não inclui o 1 implícito
Em binário (β =2) f∈[0,1[, ou seja, M∈[1,2[
... e o 0, como é representado?
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
6
Representação do expoente
Representação em excesso:
Ke = grandeza do expoente real mais negativo (2e-1-1)
(geralmente designa-se por bias)
Para números ordinários E∈]0, 2e-1[
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
7
3
Exemplo de representação
Com (e,m) = (4,3):
Mmin=1,000
bias = 24-1-1=7
Mmax=1,111
ulp = 2-3
Emin=0001 (Ereal=-6)
Emax=1110 (Ereal=7)
0 0010 000 = 1,000x2-5 = 0,03125
0 1110 001 = 1,001x27 = 144
AJA, FEUP
8
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
Gama de representação
Overflow
negativo
- Mmax. β Emax
AJA, FEUP
F-
Underflow
negativo
- Mmin . βEmin
Underflow
positivo
0
F+
Mmin . β E min
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
Overflow
positivo
Mmax. β E max
9
4
Erro de representação
número real
representação em VFL
βE
AJA, FEUP
βE+1
βE+2
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
10
Erro relativo e precisão
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
11
5
Resultado das operações
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
12
Modos de arredondamento
Z(x)
N(x)
∆(x)
∇(x) x
βE
• no sentido de −∞: ∇(x) é o > número representável ≤ x;
• no sentido de +∞: ∆(x) é o < número representável ≥ x;
• por truncamento: Ζ(x)=∇(x) se x>0 ou Ζ(x)= ∆(x) se x<0;
• para o par mais próximo: Ν(x) é o número representável mais
próximo de x; caso x esteja à mesma distância de dois valores
representáveis, então é escolhido o que for par.
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
13
6
Norma IEEE 754: formatos
Formato simples: (e,m) = (8, 23)
b31 b30
S
...
b23
b22
E
...
b0
f
Formato duplo: (e,m) = (11, 52)
b63 b62
S
...
b52
b51
E
...
b0
f
Formatos estendidos:
simples (e,m) = (≥11, ≥ 31)
duplo (e,m) = (≥15, ≥ 63)
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
14
Norma IEEE 754: formatos
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
15
7
Norma IEEE 754: valores especiais
(NaN = Not A Number)
AJA, FEUP
16
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
Norma IEEE 754: valores especiais
Para (e,m) = (4,3):
AJA, FEUP
0
x 0000 000
+∞
0 1111 000
−∞
1 1111 000
NaN
x 1111 xxx
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
x=0∨1
xxx ≠ 0
17
8
Norma IEEE 754: excepções
• Operação inválida: resultado=NaN se operando=NaN,
+∞+(−∞), +∞−(+∞), 0×∞, 0÷0 ou ∞÷∞
• Divisão por zero (x÷0, com x≠0): resultado = +∞ se x>0
ou −∞ se x<0
• Overflow: resultado (+∞ ou −∞ ou maior/menor número
representável) depende da forma de arredondamento
• Underflow: resultado (0 ou menor número representável)
depende da forma de arredondamento
• Resultado inexacto: se ocorre overflow ou se o resultado
de uma operação arredondado não é exacto
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
18
A norma IEEE 754 em aplicações
específicas
• Considerações de representação
– Hidden bit, significando e expoente, valores especiais,
excepções, formas de arredondamento
– Formato interno alargado com bits auxiliares: G (guard bit), R
(round bit) e S (sticky bit)
• Formatos e realizações em hardware
– Rigidez dos formatos não se adequa ao contexto de aplicações
específicas
– Aspectos arquitecturais: simplificações possíveis
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
19
9
Adição/subtracção VFL
• Detecção de operandos com valores especiais; identificação do
operando com maior valor absoluto (comparação dos expoentes e
significandos); sinal e expoente do resultado iguais ao sinal e
expoente do operando com maior valor absoluto
• Alinhamento do significando do operando com menor valor
absoluto (deslocamento dado pela diferença dos expoentes)
• Adição ou subtracção dos significandos, conforme os operandos
tenham sinais iguais ou diferentes, respectivamente
• Normalização: shift right se M∈[2, 4[ ou shift left se M∈[0, 1[
(leading one detection, LOD ou leading one prediction, LOP);
ajuste do expoente; detecção de overflow e underflow
• Arredondamento e ajuste do expoente.
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
20
Adição/subtracção VFL
V1 S1
E1
f1
V2 S2
f2
V1'=max(V1, V2)=(S1', E1', f1')
Detecção de
valores especiais
V2'=min(V1, V2)=(S2', E2', f2')
S1'
Nível 1
E2
S2'
E1'
E2'
f2'
f1'
-
• Parâmetros característicos:
–
–
Alinhamento
Formato dos operandos (s,m,e)
Blocos opcionais (p. ex.
detecção de overflow e
arredondamento)
• Blocos fundamentais:
Nível 2
add/sub
+/-
Nível 3
Ajuste do
expoente
Normalização
Ajuste do
expoente
Arredondamento
–
Somadores/subtractores VFX,
barrel-shifters
Nível 4
Nível 5
Estado
AJA, FEUP
V
S
E
f
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
21
10
Adição VFL: exemplo
Seja (e,m)=(7,10)
Considerando V1 = 24,046875 = 0 1000011 1000000011
V2 = −25,40625 = 1 1000011 1001011010
e V1 + V2 = V = [S,E,M]
Como E1= E2 e f2 > f1, após swap: V1=1 1000011 1001011010
V2=0 1000011 1000000011
S= 1
E = 1000011
M = 1,f1 − 1,f2 = 0,0001010111
Após normalização (significando deslocado 4 bits para a esquerda e
expoente subtraído de 4): M = 1,0101110000 e E = 0111111
V = 1 0111111 0101110000 = − 1,359375
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
22
Multiplicação VFL
• Detecção de operandos com valores especiais; sinal do
resultado é o XOR dos sinais dos operandos
• Multiplicação dos significandos; adição dos expoentes e
subtracção do excesso (bias, Ke) da representação do expoente
(porquê?)
• Normalização: como M1, M2∈[1, 2[ então M∈[1, 4[, o que
poderá implicar um shift right e o consequente incremento do
expoente (deixando de ser necessário fazer LOD, simplificando
a normalização face à mesma operação necessária na adição);
detecção de overflow e underflow
• Arredondamento e ajuste do expoente.
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
23
11
Multiplicação VFL
V1 S1
E1
f1
V2 S2
E2
f2
Detecção de
valores especiais
Nível 1
+
+
Ajuste do
expoente
Normalização
Ajuste do
expoente
Arredondamento
Nível 2
Nível 3
Nível 4
Estado
AJA, FEUP
V
S
E
f
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
24
Divisão VFL
• Detecção de operandos com valores especiais; sinal do
resultado é o XOR dos sinais dos operandos
• Divisão dos significandos; subtracção dos expoentes e adição do
excesso (bias, Ke) da representação do expoente (porquê?)
• Normalização: como M1, M2∈[1, 2[ então M∈]1/2, 2[, o que
poderá implicar um shift left e o consequente decremento do
expoente (deixando de ser necessário fazer LOD, simplificando
a normalização face à mesma operação necessária na adição);
detecção de overflow e underflow
• Arredondamento e ajuste do expoente.
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
25
12
Divisão VFL
V1 S1
E1
f1
V2 S2
E2
f2
Detecção de
valores especiais
Nível 1
Nível 2
Ajuste do
expoente
Normalização
Ajuste do
expoente
Arredondamento
Nível 3
Nível 4
Estado
AJA, FEUP
V
S
E
f
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
26
Resultados das operações VFL
envolvendo valores especiais
x+y
x−y
x×y
x÷y
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
27
13
Cálculo de funções elementares
• Exemplos: sen(x), cosh(x), e(x), log(x), arctg(x)
• As funções elementares, ou transcendentes,
desempenham um importante papel em diversas
áreas onde o peso computacional do cálculo
científico é grande
• Como calcular?
– O processo geral consiste em 3 fases:
• Redução do argumento da função a um intervalo reduzido
• Cálculo da aproximação ao valor da função no intervalo reduzido
• Reconstrução da função para o argumento original
– As fases de redução e reconstrução, mais simples, são
conhecidas para cada função elementar
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
28
Métodos de cálculo
– Aproximações polinomiais (ou por funções
racionais p(x)/q(x))
– Tabelas (e mistos, tabelas+polinómios
aproximantes para valores não tabelados)
– Métodos iterativos (p.ex., shift and add como o
CORDIC)
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
29
14
Aproximações polinomiais
aproximação polinomial
(minimax)
f(x)
s
cn
cn-1
MUX
...
c2
c1
c0
p(x)=cnxn+ cn-1xn-1 +...+ c1x1 + c0
ce
e := e - 1
R
+
f(x)
+
=(...(cnx+cn-1)x+...+c1)x+c0
x
regra de Horner
rst
Unidade de
controlo
clk
done
Recursos principais: somador e multiplicador
AJA, FEUP
30
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
CORDIC
x
CORDIC generalizado para o
sistema:
circular (m=1)
y
z
x
linear (m=0)
y
z
C
O
R
D
I
C
K1.(x.cos z + y.sen z)
x
K1.(y.cos z - x.sen z)
y
0
z
K1.(x2 + y2)1/2
C
O
R
D
I
C
C
O
R
D
I
C
x
x
y + x .z
y
0
z
C
O
R
D
I
C
K-1.(x.cosh z + y.senh z)
x
K-1.(y.cosh z - x.senh z)
y
0
z
0
z + arctan (y/x)
x
C
O
R
D
I
C
0
z + y/x
hiperbólico (m=-1)
x
y
z
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
C
O
R
D
I
C
K-1.(x2 - y2)1/2
0
z + arctanh (y/x)
31
15
Implementação do CORDIC
, com
(valor arbitrário que traduz um)
incremento do ângulo)
x0
x
>>
xn
+/-
>>
relações iterativas:
y0
y
z0
z
yn
+/-
Tabela
zn
+/-
di
Recursos principais: somadores e
registos de deslocamento
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
32
Exemplo de aplicação do CORDIC
Cálculo de cos(π/4) com 10 bits de precisão
Como se trata de uma função trigonométrica circular, m=1 e K=1.64676025, sendo os
valores iniciais
AJA, FEUP
PSDI - Aritmética em Vírgula Flutuante: Algoritmos e Arquitecturas
33
16
Download