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