• Nenhum resultado encontrado

Aproximação de funções elementares sem redução de argumento

N/A
N/A
Protected

Academic year: 2021

Share "Aproximação de funções elementares sem redução de argumento"

Copied!
72
0
0

Texto

(1)

F

ACULDADE DE

E

NGENHARIA DA

U

NIVERSIDADE DO

P

ORTO

Aproximação de funções elementares

sem redução de argumento

Filipe Alexandre Brito Meireles

Programa de Mestrado Integrado em Engenharia Electrotécnica e de Computadores Orientador: António José Duarte Araújo

(2)

c

(3)

Resumo

O cálculo de funções matemáticas elementares é feito por aproximações. Existem diversos métodos que permitem aproximar funções e que se aplicam a diferentes requisitos. Entre eles, as aproximações polinomiais permitem aproximar qualquer função contínua recorrendo a polinómios que são as funções mais simples de uma variável. O cálculo de funções por aproximações poli-nomiais compreende três etapas. Redução do argumento a um intervalo mais conveniente, cálculo do polinómio no intervalo reduzido e reconstrução do argumento para o domínio completo da função. Com este trabalho, e recorrendo a este método de aproximação, aplicado a várias funções elementares, investigou-se as vantagens de abdicar das etapas de redução e reconstrução do ar-gumento que muitas vezes se traduzem em sobrecarga de cálculo. Em particular, aplicações em que o cálculo de funções elementares é necessário, podem beneficiar da não realização da redução e reconstrução do argumento quando à priori é conhecida a gama de valores em que se pretende calcular a função. A avaliação desta alternativa é concretizada pela implementação num dispos-itivo reconfigurável do tipo FPGA. A principal linha de acção a explorar, é o impacto produzido na ocupação de área e latência de cálculo, tanto pelo método tradicional como para a alternativa que aqui se propõe. A análise dos resultados obtidos, mostra que em determinadas circunstâncias e para algumas funções é vantajoso abdicar destas etapas traduzindo-se numa optimização das métricas em causa.

(4)
(5)

Abstract

The computation of elementary mathematical functions is performed by approximations. There are several methods that allow us to approximate functions which apply to different requirements. Among them, the polynomial approximation allow us to approximate any continuous function using polynomials that are simpler functions of one variable. The computation of functions by polynomial approximations involves three steps: Range reduction; computation of the polyno-mial in the reduced interval and range reconstruction. The goal of this work is to research the advantages of giving up the steps of range reduction and reconstruction, that many times lead to computational overhead. Applications that need computation of elementary functions may benefit from this method when we know in advance the sub-domain in which we want to compute the function. The evaluation of this alternative is performed in an "FPGA like"configurable device. The success of this method is evaluated by its impact in area occupation and latency of the compu-tation. The results will show us that in certain circumstances and for some functions this method results in an optimization of these metrics.

(6)
(7)

Agradecimentos

Agradeço ao meu orientador António Araújo pelo estímulo, e pelo apoio que tornou possível a concretização deste trabalho.

Ao meu colega Filipe Fernandes pelo apoio, ajuda e caminhada conjunta.

Ao meu Grande irmão Paulo Meireles que embora não estando presente me deu a força e o apoio que eu precisava.

Agradeço em especial à minha namorada Diana Silva por toda a paciência, apoio e confiança em mim e por toda a sua ajuda.

Por fim um agradecimento muito muito especial aos meus pais Teresa Neto e Daniel Neto por todo o apoio e a enorme força que me deram, pela compreensão e todos os sacrifícios que passaram e que tornaram isto possível e sobre tudo pela confiança que depositaram em mim.

(8)
(9)

Conteúdo

Agradecimentos v 1 Introdução 1 1.1 Descrição e Objectivos . . . 1 1.2 Contributos . . . 2 1.3 Estrutura da dissertação . . . 2 2 Funções elementares 5 2.1 Abordagens de cálculo . . . 5 2.2 Aproximações polinomiais . . . 6 2.2.1 Critérios de aproximação . . . 6

2.2.2 Considerações sobre a implementação . . . 9

2.3 Fases de cálculo . . . 10

2.3.1 Redução do argumento . . . 11

2.3.2 Cálculo do polinómio . . . 12

2.3.3 Reconstrução do argumento . . . 12

2.4 Caso de estudo . . . 14

2.5 Cálculo sem redução de argumento . . . 17

2.6 Conclusão . . . 18

3 Implementação 19 3.1 Visão global . . . 19

3.2 Considerações de implementação . . . 20

3.2.1 Largura dos intervalos e precisão de cálculo . . . 22

3.2.2 Formato de representação numérica . . . 23

3.2.3 Segmentação de intervalos . . . 25 3.3 Distribuição de segmentos . . . 29 3.4 Arquitectura . . . 31 3.5 Conclusão . . . 35 4 Resultados 37 4.1 Metodologia . . . 37 4.2 Resultados obtidos . . . 38

4.2.1 Implementação sem segmentação . . . 39

4.2.2 Implementação com segmentação . . . 42

5 Conclusão 51 5.1 Conclusões . . . 51

5.2 Trabalho Futuro . . . 54

(10)

viii CONTEÚDO

(11)

Lista de Figuras

2.1 Evolução do erro de aproximação para vários polinómios aproximantes de grau 2

para a função ex no intervalo [−1, 1] [1] . . . 8

2.2 Evolução do erro de aproximação para vários polinómios aproximantes de grau 2 para a função ex no intervalo [−1, 1] [1] . . . 9

2.3 Círculo trigonométrico . . . 14

2.4 Reconstrução do argumento normalizado para a função cos(x) . . . 15

3.1 Diagrama de implementação. . . 21

3.2 Análise de recursos consumidos pela representação em vírgula fixa e vírgula flu-tuante em função da largura dos operandos [2]. . . 24

3.3 Formas de divisão de segmentos. . . 26

3.4 Segmentação hierárquica aplicada a diferentes funções. . . 27

3.5 Grau do polinómio em função do intervalo de aproximação para a função cos(x) com uma precisão de 12 bits. . . 29

3.6 Arquitectura de implementação do método CRA com segmentação de intervalos. 32 3.7 Arquitectura de implementação do método CRA sem segmentação de intervalos. 33 3.8 Arquitectura de implementação do método SRA com segmentação de intervalos. 33 3.9 Arquitectura de implementação do método SRA sem segmentação de intervalos. . 33

3.10 Arquitectura de implementação da segmentação de intervalos. . . 34

3.11 Diagrama representativo do fluxo de cálculo através de uma máquina de estados. 35 4.1 Área para cos(x) sem segmentação com uma precisão de 8 bits. . . 40

4.2 Latência para cos(x) sem segmentação com uma precisão de 8 bits. . . 40

4.3 Área para cos(x) sem segmentação com uma precisão de 12 bits. . . 40

4.4 Latência para cos(x) sem segmentação com uma precisão de 12 bits. . . 40

4.5 Área para cos(x) sem segmentação com uma precisão de 16 bits. . . 41

4.6 Latência para cos(x) sem segmentação com uma precisão de 16 bits. . . 41

4.7 Área para ex sem segmentação com uma precisão de 8 bits. . . 41

4.8 Latência para exsem segmentação com uma precisão de 8 bits. . . . 41

4.9 Área para ex sem segmentação com uma precisão de 12 bits. . . 42

4.10 Latência para exsem segmentação com uma precisão de 12 bits. . . 42

4.11 Área para ex sem segmentação com uma precisão de 16 bits. . . 42

4.12 Latência para exsem segmentação com uma precisão de 16 bits. . . 42

4.13 Área para cos(x) com segmentação com uma precisão de 8 bits. . . 44

4.14 Latência para cos(x) com segmentação com uma precisão de 8 bits. . . 44

4.15 Área para cos(x) com segmentação com uma precisão de 12 bits. . . 44

4.16 Latência para cos(x) com segmentação com uma precisão de 12 bits. . . 44

4.17 Área para cos(x) com segmentação com uma precisão de 16 bits. . . 45

(12)

x LISTA DE FIGURAS

4.18 Latência para cos(x) com segmentação com uma precisão de 16 bits. . . 45

4.19 Área para excom segmentação com uma precisão de 8 bits. . . 46

4.20 Latência para ex com segmentação com uma precisão de 8 bits. . . 46

4.21 Área para excom segmentação com uma precisão de 12 bits. . . 46

4.22 Latência para ex com segmentação com uma precisão de 12 bits. . . 46

4.23 Área para excom segmentação com uma precisão de 16 bits. . . 47

4.24 Latência para ex com segmentação com uma precisão de 16 bits. . . 47

4.25 Gráfico da função log(x) no intervalo [0, 10]. . . 48

4.26 Gráfico da função√xno intervalo [0, 10]. . . 48

(13)

Lista de Tabelas

2.1 Erro máximo absoluto de vários polinómios aproximantes de grau 2 da função ex no intervalo [−1, 1] [1]. . . 7

2.2 Erro máximo absoluto de vários polinómios aproximantes de grau 2 da função |x| no intervalo [−1, 1] [1]. . . 8

2.3 Metodologia de cálculo da redução do argumento para diferentes funções ele-mentares. . . 11

3.1 Resultados de segmentação linear e hierárquica para várias funções com precisão de aproximação de 8, 16 e 24 bits. . . 26

3.2 Valores resultantes da segmentação de intervalos para a função cos(x). . . 31

3.3 Valores resultantes da segmentação de intervalos para a função ex. . . . 31

4.1 Grau dos polinómios usados na aproximação de cos(x), sem segmentação, para diferentes precisões e intervalos de aproximação. . . 39

4.2 Grau dos polinómios usados na aproximação de exp(x), sem segmentação, para diferentes precisões e intervalos de aproximação. . . 41

4.3 Número de ciclos de relógio necessários para devolver o resultado da aproximação para cada método, SRA e CRA, para diferentes precisões e intervalos de aproxi-mação. . . 43

4.4 Percentagem de ganho da área de implementação e latência de cálculo, da aprox-imação polinomial das funções cos(x) e expara uma precisão de cálculo de 8 bits pelo método SRA face ao método CRA. . . 47

4.5 Percentagem de ganho da área de implementação e latência de cálculo, da aproxi-mação polinomial das funções cos(x) e expara uma precisão de cálculo de 12 bits pelo método SRA face ao método CRA. . . 47

4.6 Percentagem de ganho da área de implementação e latência de cálculo, da aproxi-mação polinomial das funções cos(x) e expara uma precisão de cálculo de 16 bits pelo método SRA face ao método CRA. . . 48

(14)
(15)

Abreviaturas e Símbolos

MSB Most Significant Bit

CRA Com Redução de Argumento SRA Sem Redução de argumento ε erro do resultado

εaprox erro de aproximação

εqt erro de quantificação

FPGA Field Programmable Gate Array

(16)
(17)

Capítulo 1

Introdução

1.1

Descrição e Objectivos

Este trabalho enquadra-se no cálculo de funções matemáticas elementares através de aproxi-mações polinomiais. Este é um dos principais métodos e permite calcular a aproximação de uma determinada função num processo composto por três etapas, são elas: redução do argumento, cál-culo do polinómio no intervalo reduzido e por fim a reconstrução do resultado para o intervalo completo a aproximar. O cálculo de um polinómio aproximante por si só implica saber qual o in-tervalo de aproximação e qual o grau que o caracteriza. Para um determinado inin-tervalo, a escolha do grau do polinómio condiciona o erro resultante da aproximação, na medida em que, quanto maior é o seu grau, menor será o erro de cálculo. No entanto, polinómios com grau muito elevado são indesejáveis porque terão que ser realizadas mais operações para os calcular e assim obter o resultado da aproximação. Para evitar esta sobrecarga de cálculo reduz-se o intervalo de aproxi-mação a um intervalo mais pequeno e o polinómio é calculado para esse sub-intervalo da função, evitando assim a necessidade de recorrer a polinómios de grau elevado. Depois, expande-se o re-sultado com base nas características da função a calcular. Mas a inclusão destas duas etapas induz também alguma sobrecarga de cálculo na medida em que é necessário realizar operações para re-duzir e reconstruir o argumento. Embora este procedimento geral seja considerado vantajoso para a generalidade das situações, o cálculo de uma função em intervalos pequenos do seu domínio e com requisitos de precisão baixos não necessita de polinómios de grau elevado, podendo assim ser desnecessário recorrer a estas duas etapas. Com este trabalho pretende-se avaliar em que cir-cunstâncias é vantajoso abdicar das etapas de redução e reconstrução do argumento conhecendo a gama de valores em que se pretende realizar o cálculo e a respectiva precisão, recorrendo para isso a processos de optimização, tais como a segmentação de intervalos [3]. Este processo traduz-se numa optimização do método de cálculo da aproximação polinomial na medida em que permite o cálculo de polinómios de grau mais reduzido uma vez que a avaliação será feita para intervalos mais pequenos. No entanto, seu impacto será mais significativo no método alternativo que aqui se

(18)

2 Introdução

propõe avaliar, uma vez que este é mais propício a polinómios de grau elevado e a aproximação é feita somente pela etapa que é optimizada por este processo, resultando assim numa optimização do processo completo de cálculo. Por sua vez, o impacto no método tradicional não será tão sig-nificativo uma vez que em contraste, tipicamente não necessita de polinómios de grau elevado e a sua aproximação já é feita num intervalo reduzido. Mais ainda, a segmentação do intervalo apenas vai interferir neste caso numa das etapas, não resultando em nenhuma optimização no cálculo da redução e reconstrução do argumento.

Em particular, o objectivo principal deste trabalho consiste em analisar o impacto resultante da implementação em hardware, nomeadamente a ocupação de área e o atraso de cálculo da imple-mentação em dispositivos reconfiguráveis do tipo FPGA, e a partir dos resultados obtidos definir em que circunstâncias se deve aplicar cada um dos métodos.

1.2

Contributos

As aproximações de funções baseadas em polinómios recorrem a uma metodologia composta por três etapas no sentido de optimizar o processo de cálculo para qualquer intervalo de aprox-imação. No entanto o cálculo de funções elementares em hardware, particularmente no âmbito dos sistemas embutidos, por exemplo em aplicações relacionadas com processamento digital de sinal, requer na maioria das vezes a avaliação de uma determinada função apenas num intervalo específico. Nesse sentido, a principal contribuição desta tese é estabelecer critérios que permitam decidir qual a melhor forma de realizar a aproximação de uma função, com redução de argumento ou sem redução de argumento, partindo da precisão pretendida e da gama de valores do argumento. Como métricas, são usadas a área e a latência das implementações em hardware. Adicionalmente é proposta a utilização de segmentação de intervalos como medida de optimização das técnicas implementadas, principalmente do método alternativo que aqui se pretende expor.

1.3

Estrutura da dissertação

Além deste capítulo introdutório, a dissertação está dividida em mais 4 capítulos.

No capítulo 2 são abordados os métodos de cálculo de funções elementares e em particular todo o processo que diz respeito à avaliação por aproximações polinomiais. É descrito um caso concreto que visa ilustrar a metodologia envolvida bem como algumas considerações de cálculo. São ainda analisadas algumas considerações relativamente ao processo de cálculo proposto.

No capítulo 3 é ilustrado todo o processo relativo à metodologia adoptada no cálculo e im-plementação de aproximações polinomiais. São expostas e analisadas todas as considerações e implicações que envolvem aproximações polinomiais com ou sem redução de argumento no âm-bito da implementação em hardware, bem como algumas soluções de optimização do processo de

(19)

1.3 Estrutura da dissertação 3

cálculo. É feita também uma descrição da arquitectura e descrito o cálculo dos segmentos usados para cada função.

No capítulo 4 é feita a análise dos resultados obtidos através dos métodos implementados, realçando-se as situações em que é vantajoso não realizar a redução do argumento.

Por fim, no capítulo 5 são tiradas todas as conclusões e feitas algumas sugestões de trabalho futuro.

(20)
(21)

Capítulo 2

Funções elementares

Neste capítulo são abordados os aspectos que condicionam o cálculo de funções elementares, e em particular, toda a metodologia de cálculo relativa ás aproximações por polinómios. São ainda incluídas algumas considerações relativas ao cálculo sem redução de argumento.

2.1

Abordagens de cálculo

Na maior parte dos casos as funções elementares não podem ser calculadas de forma exacta, tendo que ser calculada uma aproximação. Existem vários métodos que permitem aproximar funções, destacando-se os seguintes:

• Aproximações polinomiais

• Aproximações baseadas em tabelas

• Aproximações baseadas em tabelas e polinómios • Aproximações shift-and-add

Talvez o mais popular dos métodos de aproximação é o algoritmo CORDIC que pertence a um grupo de aproximações denominado shift-and-add [1]. Este algoritmo tem uma grande importân-cia histórica porque entre outras possibilidades permitiu implementar o cálculo de várias funções elementares em máquinas calculadoras. Este método de cálculo é iterativo e usa apenas oper-ações de deslocamento e adição, possibilitando assim uma implementação com poucos recursos quando comparado com outros métodos. No entanto, apresenta algumas limitações. O processo de cálculo é mais lento face aos outros métodos e aplica-se apenas a um grupo restrito de funções elementares (funções f que necessitam de satisfazer determinadas propriedades algébricas), sendo que os métodos baseados em aproximações polinomiais ou tabelas podem ser usados na avaliação de qualquer função contínua.

(22)

6 Funções elementares

O método baseado em tabelas consiste em tabelar uma função para todos os valores possíveis de entrada. No entanto, apenas é viável para argumentos de largura baixa (tipicamente até 16 bits) pois caso contrário a quantidade de memória necessária para guardar os valores de entrada numa tabela seria impraticável.

Para contornar este problema é usado o método que combina tabelas e aproximações poli-nomiais. As aproximações polinomiais [1] consistem em aproximar uma função contínua f (x) através de um ou mais polinómios de grau n num intervalo finito genérico [a, b], tendo como ob-jectivo minimizar a diferença entre a função a aproximar e a sua aproximação. Os polinómios são funções simples que podem ser avaliadas usando um número finito de operações aritméti-cas nomeadamente adições, multiplicações e subtracções. As aproximações baseadas em tabelas e polinómios são usadas hoje em dia em larga escala pelo seu elevado desempenho [1]. Este método consiste em separar o intervalo de aproximação em sub-intervalos mais pequenos, calcu-lar os polinómios aproximantes em cada sub-intervalo e guardar os coeficientes respectivos a cada segmento numa tabela. Posteriormente é feita a avaliação do polinómio através da consulta desta tabela. Uma vez que é feita a divisão do intervalo em secções, isto trás vantagens na medida em que permite aproximar a função com um conjunto de polinómios de grau baixo. No entanto o uso de tabelas pode resultar em elevados requisitos de memória.

O método baseado apenas em aproximações polinomiais reporta ao século XIX muito antes do aparecimento da electrónica e computação modernas. Esta abordagem consome poucos recursos de memória, mas por outro lado, pode apresentar uma desvantagem face ao uso combinado com tabelas. Para cálculos com precisão elevada em intervalos grandes pode ser necessário o uso de polinómios de grau elevado, tendo implicações no atraso de cálculo e na propagação do erro uma vez que é necessário executar mais operações.

Tradicionalmente o cálculo de funções elementares era realizado por rotinas de software. Com os avanços da tecnologia microelectrónica foram surgindo dispositivos de implementação de cir-cuitos cada vez mais rápidos e com capacidade para suportar circir-cuitos mais complexos. Desta forma, o cálculo de funções elementares começou a ser feito em hardware permitindo alcançar melhor desempenho. Este é fortemente dependente da função a calcular, do método de aproxi-mação utilizado e da precisão desejada.

Neste trabalho vamos focar o estudo com base no cálculo de funções elementares através de aproximações polinomiais.

2.2

Aproximações polinomiais

2.2.1 Critérios de aproximação

As aproximações polinomiais têm como objectivo minimizar a diferença entre uma função f(x) a aproximar e um polinómio aproximante p(x), ou seja, o objectivo é minimizar kp − f k.

(23)

2.2 Aproximações polinomiais 7

Minimizar esta "distância"consiste em minimizar o erro de aproximação. Existem vários critérios que permitem aproximar funções através de polinómios, embora sejam aqui focados os dois prin-cipais. Estes critérios de aproximação são [1]: minimização do erro médio, resultando as least squares approximations, e minimização do erro máximo absoluto, resultando as least maximum approximationsvulgarmente designadas por minimax. As equações2.1e 2.2definem a distância que é minimizada pelos critérios descritos respectivamente,

kp − f k2= s Z b a ω (x)( f (x) − p(x))2dx (2.1) kp − f k= max a≤x≤bω (x) | p(x) − f (x)| (2.2)

onde [a, b] corresponde ao intervalo a aproximar e ω é uma função de "peso"não negativa e con-tínua, que pode ser usada para seleccionar partes de [a, b] onde se deseja que a aproximação seja mais exacta.

No âmbito do objectivo principal proposto para este trabalho e de forma a garantir eficaz-mente que é cumprida uma determinada precisão de cálculo, é conveniente e mais adequado que o polinómio seja calculado de forma a minimizar o erro máximo da aproximação. Para tal serão avaliados os resultados obtidos para os principais métodos de aproximação considerados pelos in-vestigadores no que diz respeito apenas ao erro máximo. Entre outras, as formas polinomiais mais comuns para realizar aproximações são:

• Taylor

• Legendre

• Chebyshev

• Minimax

O método Minimax pertence ao grupo das least maximum approximations e os restantes ao grupo das least squares approximations. Com carácter exemplificativo, na tabela2.1estão repre-sentados os erros máximos resultantes de vários polinómios de segunda ordem para calcular exno intervalo [-1,1].

Taylor Legendre Chebyshev Minimax Erro Máximo 0.218 0.081 0.050 0.045

Tabela 2.1: Erro máximo absoluto de vários polinómios aproximantes de grau 2 da função ex no intervalo [−1, 1] [1].

(24)

8 Funções elementares

Pode-se concluir que o erro máximo resultante da aproximação pelo método de Taylor é sub-stancialmente superior aos outros métodos. Isto acontece porque a expansão de Taylor é adequada apenas a aproximações locais (em torno de um valor) e não deve ser usada para aproximações gerais (num determinado intervalo). Assim sendo este método não se adequa a este trabalho. Resta então a avaliação dos restantes três métodos. A figura 2.1 ilustra para o caso anterior, a evolução do erro em função do intervalo de aproximação.

Figura 2.1: Evolução do erro de aproximação para vários polinómios aproximantes de grau 2 para a função exno intervalo [−1, 1] [1]

Embora o método de Legendre apresente o menor erro médio, interessa a aproximação que devolva o menor erro máximo pelo que voltando aos resultados da tabela2.1, este erro é menor para a aproximação Minimax. Considere-se outro caso em que é aproximada a função |x| pelos mesmos métodos, com polinómios de grau 2 no intervalo [−1, 1]. A figura2.2demonstra o resul-tados das aproximações polinomiais face ao valor real da função nesse intervalo e na tabela 2.2

estão presentes os resultados relativos ao erro máximo de aproximação obtido para cada caso. Legendre Chebyshev Minimax

Erro Máximo 0.1875 0.2122 0.1250

Tabela 2.2: Erro máximo absoluto de vários polinómios aproximantes de grau 2 da função |x| no intervalo [−1, 1] [1].

Mais uma vez, a aproximação Minimax apresenta o menor erro máximo de aproximação. Tendo em conta estes dois exemplos, e numerosos estudos realizados por outros autores [1], [4], mostra-se credível assumir que a aproximação Minimax é o método mais vantajoso e será adoptado ao longo de todo o trabalho. Esta conclusão seria no entanto de esperar na medida em que o

(25)

2.2 Aproximações polinomiais 9

Figura 2.2: Evolução do erro de aproximação para vários polinómios aproximantes de grau 2 para a função exno intervalo [−1, 1] [1]

algoritmo de cálculo deste método de aproximação é adequado de forma a minimizar precisamente o erro máximo absoluto enquanto que os outros métodos pretendem minimizar o erro médio.

2.2.2 Considerações sobre a implementação

O cálculo de aproximações polinomiais pelo processo Minimax é baseado num algoritmo de-scrito por Remez [1] que avalia de forma iterativa esta método para uma função contínua. O cálculo de um polinómio aproximante requer o conhecimento prévio dos seus coeficientes. Para tal foi us-ado o programa Maple que devolve o polinómio segundo este algoritmo com base no grau do polinómio e intervalo de aproximação. Este programa permite a extracção do polinómio de forma simples e rápida podendo devolver, caso seja necessário, o erro de aproximação do polinómio obtido. O exemplo que se segue ilustra a extracção de um polinómio de grau 2 para a função cos(x) no intervalo [−1, 1], recorrendo à sintaxe do Maple.

with(numapprox) Digits := 10

minimax(cos(x), x = -1 .. 1, [2, 0], 1, ’err’) err

Seguindo passo a passo a descrição, em primeiro lugar é necessário indicar que vai ser feita uma aproximação, depois escolhe-se o número de dígitos significativos com que se pretende represen-tar os operandos. Posteriormente indica-se o tipo de aproximação (neste caso minimax), a função a aproximar, o intervalo de aproximação, o grau do polinómio (o segundo termo diz respeito ao grau

(26)

10 Funções elementares

do polinómio do denominador quando se usa a aproximação por funções racionais), a função de "peso"referida anteriormente (neste caso escolheu-se 1 porque não se pretende evidenciar maior exactidão da aproximação numa parte específica do intervalo escolhido) e indica-se que se pre-tende conhecer o erro de aproximação. Por ultimo é invocado o comando que imprime o erro. O polinómio resultante já vem num formato desejado na perspectiva da implementação. Este for-mato é definido pela regra de Horner [1]. Um polinómio de grau n é tipicamente representado na seguinte forma,

p(x) = c0+ c1x+ ... + cn−1xn−1+ cnxn (2.3)

aplicando a regra de Horner [1], esta equação pode ser reescrita como:

p(x) = c0+ x(c1+ x(... + x(cn−1+ cnx))) (2.4)

Analisando ambas as formas do polinómio, facilmente se conclui que a ordenação dos coefi-cientes do polinómio resultante da regra de Horner implica menos operações a serem realizadas, nomeadamente multiplicações. A representação no formato tradicional requer um número de mul-tiplicações da ordem de n2para completar o cálculo do polinómio enquanto que segundo a regra de Horner são necessárias apenas n multiplicações.

2.3

Fases de cálculo

O processo geral de cálculo de funções (por aproximações polinomiais) é constituído por três etapas:

1. Redução do argumento

2. Aproximação da função

3. Reconstrução do argumento

De uma forma geral, o processo de cálculo pode ser descrito da seguinte forma: considere-se uma função elementar f (x) que se pretende avaliar em x ∈ [a, b]. A primeira etapa, redução do argumento, consiste em reduzir o argumento x da função a um xnormmais conveniente pertencente

a um intervalo reduzido [a0, b0]. Posteriormente é calculado o valor do polinómio aproximante em xnorm. Por fim o resultado é expandido para o domínio original da função [a, b]. Nas subsecções

(27)

2.3 Fases de cálculo 11

2.3.1 Redução do argumento

A redução do argumento [1], [5] é a primeira etapa na realização de uma aproximação polino-mial. Considerando uma função elementar:

f : x ∈ [a, b] (2.5)

pretende-se reduzir x a um intervalo mais pequeno

xnorm∈ [a0, b0]

Este novo valor pode ser calculado usando duas formas alternativas para o processo de re-dução:

• Redução Aditiva: xnorm= x − kC

• Redução Multiplicativa: xnorm= x/Ck

Para ambos os casos k corresponde a um inteiro e C a uma constante. A escolha do processo a aplicar depende do tipo de função a aproximar. Da mesma forma, a obtenção do valor de C e de k é adequada ao tipo de função a aproximar bem como ao intervalo de aproximação. Para todas as funções existe um intervalo padrão conveniente [6], [7], por apresentar uma precisão mais elevada face a outros intervalos bem como possibilitar o cálculo recorrendo a polinómios de grau mínimo. Na tabela2.3estão resumidas todas estas considerações para diferentes funções elementares.

Função cos(x) ex log(x) √x

Processo de redução aditivo aditivo multiplicativo multiplicativo Intervalo normalizado típico [−π/4, π/4] [0, log(2)] [0.5, 1] [0.25, 1]

C π /2 log(2) 2 2

k bx/Ce bx/Cc MSB(x) + 1 MSB(x) + 1

Tabela 2.3: Metodologia de cálculo da redução do argumento para diferentes funções elementares.

A constante C é obtida de forma diferente para cada um dos métodos de redução. No caso da redução aditiva, C é dada pela largura do intervalo normalizado, ou seja, para um intervalo genérico [a0, b0], C = |a0| + |b0|. Quando se aplica redução multiplicativa, se por um lado se

pre-tender aproximar a função log(x), o intervalo normalizado é dado pela seguinte expressão:

(28)

12 Funções elementares

se por outro se pretender aproximar√xvem:

xnorm∈ [2M−2, 2M] (2.7)

onde tipicamente o intervalo mais conveniente é obtido para M = 0 [6]. A constante C, para ambas as funções, é potência de dois tal como a base dos termos que compõem os limites dos intervalos. O inteiro k, tem a função de reduzir o argumento x a um intervalo pequeno em torno de zero. As expressões de k presentes na tabela2.3garantem que para qualquer valor de x, xnormpertence ao

intervalo reduzido. Iremos sustentar esta afirmação com o exemplo da secção2.4.

2.3.2 Cálculo do polinómio

Depois de reduzido o argumento ao intervalo padrão da função, o cálculo do valor do polinómio é o próximo passo. Para isso é empregue a metodologia exposta na secção anterior mas neste caso para um intervalo de aproximação igual ao intervalo normalizado.

2.3.3 Reconstrução do argumento

Até então, o resultado produzido na sequência das etapas anteriores é a aproximação polino-mial no intervalo reduzido. É necessário agora expandir este resultado para o domínio completo da função. Este processo segue uma metodologia diferente para cada função, nomeadamente no que diz respeito às funções trigonométricas. Para as restantes funções obtém-se a expressão que permite reduzir o argumento através de algumas manipulações matemáticas simples das equações que traduzem o processo de redução de argumento [8]. Segue-se a dedução destas expressões para as funções elementares presentes na tabela2.3.

• ex xnorm= x − kC exnorm= ex−kC exnorm = e x ekC

Daqui resulta a equação geral

ex= ekC× exnorm (2.8)

e substituindo C por log(2), vem

ex= ek∗log(2)× exnorm

(29)

2.3 Fases de cálculo 13

Uma vez que exnorm representa o valor do polinómio no intervalo normalizado, a expansão do argumento vai então resultar do factor multiplicativo 2k. Este resultado mostra que exé obtido por deslocamentos para a esquerda.

• log(x)

xnorm= x/Ck

log(xnorm) = log(x/Ck)

log(xnorm) = log(x) − log(Ck)

Daqui resulta a equação geral

log(x) = log(xnorm) + k log(C) (2.10)

e substituindo C por 2, vem

log(x) = log(xnorm) + k log(2) (2.11)

onde log(xnorm) é o valor do polinómio aproximante no intervalo normalizado. A expansão

do argumento resulta do factor aditivo k log(2).

• √x xnorm= x/Ck √ xnorm= q x/Ck √ xnorm= √ x/ √ Ck

Daqui resulta a equação geral √

x=√xnorm×

Ck (2.12)

e substituindo C por 2, vem

x=√xnorm×

2k (2.13)

onde√xnormé o valor do polinómio aproximante no intervalo normalizado. A expansão do

argumento resulta do factor multiplicativo√2k. • cos(x)

O processo de reconstrução do argumento na aproximação de funções trigonométricas, é feito com base na equivalência entre quadrantes [9], [10], [5] tal como ilustra a figura2.3

(30)

14 Funções elementares

Figura 2.3: Círculo trigonométrico

Desta forma, o cálculo do polinómio relativo à etapa anterior terá que ser feito para ambas as funções cos(x) e sin(x). Assim sendo, pode concluir-se desde já que a precisão do resultado vai estar limitada pelo erro máximo resultante das aproximações a ambas as funções.

ε = max(εcos(x), εsin(x))

Para valores de xnorm∈0,π4 o quadrante vai ser determinado pelo resultado da expressão

k mod 4 [1] obtendo-se os seguintes resultados:             

k mod 4 = 0 ⇒ cos(x) = cos(xnorm)

k mod 4 = 1 ⇒ cos(x) = − sin(xnorm)

k mod 4 = 2 ⇒ cos(x) = − cos(xnorm)

k mod 4 = 3 ⇒ cos(x) = sin(xnorm)

(2.14)

Se por outro lado xnorm ∈−π4, 0, utilizam-se as relações cos(x) = cos(−x) e sin(x) =

− sin(−x).

A figura2.4, ilustra o processo de reconstrução para xnorm∈0,π4. Para cada sub-intervalo

(a,b,c ou d) da função cos(x) em todo o seu domínio, podemos ver qual a função equivalente nesse intervalo e a sua projecção no círculo trigonométrico.

2.4

Caso de estudo

Nesta secção é descrito um caso concreto de cálculo de uma função elementar através de aproximação polinomial que abrange as três etapas do processo de cálculo de forma a exemplificar a descrição geral feita na secção anterior, servindo também para tecer algumas considerações adicionais. Foi escolhida a função cos(x) por requerer mais cuidados relativamente ao processo

(31)

2.4 Caso de estudo 15

Figura 2.4: Reconstrução do argumento normalizado para a função cos(x)

de cálculo, nomeadamente no que diz respeito à etapa de reconstrução do argumento. Já foi abordado na secção 2.2.2o procedimento de extracção do polinómio aproximante. No entanto, considerando o processo completo de cálculo, é necessário garantir que o resultado final cumpra um determinado requisito de precisão. Embora a extracção do polinómio através do Maple garanta a precisão requerida no intervalo de cálculo, neste caso, o polinómio é calculado apenas para o intervalo normalizado. A última etapa relativa à reconstrução do argumento introduz também um erro de cálculo que aumenta com a largura do intervalo de aproximação e que pode ser controlado variando o grau do polinómio. Para tal, foi estabelecida uma ponte entre o Maple e o Matlab onde foi descrito o processo completo de cálculo, permitindo avaliar o erro máximo do resultado e repetir o processo tantas vezes quantas necessárias até atingir a precisão desejada. Existe ainda um erro de quantificação associado, introduzido pela degradação da precisão durante as operações realizadas ao longo do cálculo. Este problema é abordado no capítulo 3 na medida em que é considerado no âmbito da implementação em hardware uma vez que o Maple e o Matlab trabalham com precisões fixas elevadas.

Considere-se então o cálculo da função cos(x) no intervalo [0; 15] com uma precisão de 8 bits. Por uma questão de simplificação do exemplo vai ser omitido o processo de avaliação exaustiva

(32)

16 Funções elementares

realizada em Matlab. O cálculo vai ser efectuado para o argumento x = 14, 5 e não para o intervalo completo de aproximação.

Em primeiro lugar é necessário reduzir x ao intervalo normalizado. Para tal recorrendo à expressão que reduz o argumento pelo método aditivo, e consultando a tabela2.3, vem:

xnorm= x − kC = 14, 5 −  14, 5 π /2  π 2 = 14, 5 − b9, 231e π 2 = 14, 5 − 9 π 2 = 0, 3628

Tal como referido na secção anterior, o processo de avaliação associado à função cos(x) exige o cálculo do polinómio no intervalo normalizado de cos(x) e sin(x). Considere-se que o polinómio que aproxima cos(x) é p1(x) e que o polinómio que aproxima sin(x) corresponde a p2(x). Os

polinómios que garantem a precisão de 8 bits para ambas as funções no intervalo normalizado são de grau 3 e dados por:

p1(xnorm) = 0, 998 − 0, 475x2norm

p2(xnorm) = (0, 999 − 0, 160x2norm)xnorm

substituindo o argumento reduzido pelo valor obtido no processo de redução, vem: p1(0, 3628) = 0, 998 − 0, 475 × 0, 36282= 0, 935

p2(0, 3628) = (0, 999 − 0, 160 × 0, 132) × 0, 3628 = 0, 355

Falta agora expandir o resultado para o intervalo completo de aproximação. Aplicando o processo de reconstrução descrito na secção anterior vem:

kmod 4 = 14, 5 π /2 

mod 4 = 9 mod 4 = 1

através das relações expressas pela equação2.14retira-se que para k mod 4 = 1, cos(x) = − sin(xnorm).

Assim sendo, vem:

p(x) = −p2(xnorm)

p(14, 5) = −p2(0, 3628) = −0, 355

Conclui-se assim o processo de aproximação polinomial desta função. Segue-se o cálculo do erro de aproximação para garantir que a precisão de 8 bits é cumprida.

cos(14, 5) = −0, 3549242668

(33)

2.5 Cálculo sem redução de argumento 17

2.5

Cálculo sem redução de argumento

O método de cálculo sem redução de argumento implica aproximar uma função através de um polinómio no intervalo completo de aproximação. Quer isto dizer que se abdica da realização das etapas de redução e reconstrução do argumento. Abdicar da realização destas etapas trás vantagens e desvantagens. Por um lado, tendo em conta o intervalo de aproximação e a precisão de cálculo que se pretende, o processo que engloba ambas as etapas induz uma sobrecarga de cálculo uma vez que envolve operações de multiplicação, e em alguns casos de divisão, que assim podem ser evitadas. Por outro lado, uma consequência directa da abordagem sem redução de argumento é a necessidade de calcular polinómios de grau mais elevado face ao método tradicional. Voltando ao caso de estudo descrito na secção2.4 que aproxima a função cos(x) no intervalo [0; 15], foi necessário obter um polinómio de grau 3 (calculado no intervalo normalizado [0, log(2)]) para garantir a precisão de 8 bits dado por:

p2(xnorm) = (0, 999 − 0, 160x2norm)xnorm

Transpondo agora este caso para o método de avaliação sem redução de argumento obtém-se um polinómio de grau 12 para garantir a mesma precisão. Um aumento desta ordem no grau do polinómio resulta num aumento da mesma ordem do número de operações a realizar. Analisando as expressões tem-se uma ideia do impacto que resulta do cálculo do polinómio no intervalo com-pleto mesmo para a precisão possível com 8 bits. É pois clara a limitação apresentada por esta abordagem de cálculo. No entanto, nestas circunstâncias, é possível contornar este problema recorrendo a uma processo usado no cálculo de aproximações por tabelas com polinómios: a seg-mentação de intervalos. Como já foi referido na secção 2.5, este processo consiste em dividir o intervalo de aproximação em secções mais pequenas. Para uma determinada precisão, quanto menor for o intervalo de aproximação, ou seja, a fracção de função a aproximar, menor terá de ser o grau do polinómio aproximante. Assim, é possível aproximar a função num determinado ponto com um polinómio de grau inferior.

Esta técnica trás vantagens para ambos os métodos de cálculo, com ou sem redução de ar-gumento, porque em ambos os casos é calculado um polinómio aproximante num determinado intervalo. No entanto, o aproveitamento relativo ao método aqui proposto sem redução de argu-mento é maior que o consignado pela utilização no método tradicional conforme posteriormente se comprovará. Isto acontece por duas razões. Por um lado o método tradicional de aproximação é composto por três etapas e o uso de segmentação apenas melhora o cálculo do polinómio, não alterando em nada a redução e a reconstrução do argumento. No que diz respeito ao método sem redução de argumento, a optimização resultante da segmentação interfere em todo o processo de avaliação uma vez que é constituído apenas pelo cálculo do polinómio. Por outro lado quanto maior for o grau do polinómio, maior será o impacto desta técnica, e uma vez que a

(34)

aproxi-18 Funções elementares

mação pelo método tradicional não necessita de polinómios de grau elevado em contraste com o método sem redução de argumento, maior será o impacto produzido neste último caso. Voltando novamente ao exemplo que aproxima a função cos(x) no intervalo [0; 15], constata-se que para o método tradicional de cálculo a optimização relativa ao cálculo do polinómio é baixa pois segmen-tando o intervalo normalizado pode aproximar-se a função recorrendo a um polinómio de grau 2. Desta forma tem-se um ganho de apenas 1/3 das operações realizadas passando de três adições e três multiplicações para duas adições e duas multiplicações. No que diz respeito ao método sem redução de argumento que se pretende avaliar, da mesma forma (dependendo do número de segmentos utilizados) pode aproximar-se a função recorrendo a um polinómio de grau 2 em vez de um polinómio de grau 12. Neste caso resulta um ganho substancialmente maior de 10/12 das operações a realizar. Uma vez que em ambos os métodos o número de operações a realizar passa a ser o mesmo, e tendo em conta que para o método sem redução de argumento não é necessário executar as etapas de redução e reconstrução do argumento, que envolvem operações adicionais, verifica-se que no que diz respeito ao tempo de cálculo, este será menor. Por outro lado a uti-lização de muitos segmentos pode ter um impacto muito negativo no consumo de recursos de implementação dependendo da quantidade de segmentos utilizados. É necessário então determi-nar se é possível controlar este aumento dos recursos ocupados, mantendo bons resultados para o atraso de cálculo, tentando encontrar um equilíbrio entre o número de segmentos a usar e o grau do polinómio resultante do cálculo do polinómio.

2.6

Conclusão

Dos aspectos tratados neste capítulo interessa salientar que o método tradicional de cálculo por aproximações polinomiais é faseado e compreende três etapas: redução do argumento, cálculo do polinómio no intervalo reduzido e reconstrução do argumento. Embora as etapas de redução e reconstrução pretendam diminuir a complexidade de cálculo possibilitando o uso de polinómios de grau baixo para aproximar uma função no intervalo reduzido, para valores de precisão baixos e/ou intervalos pequenos, pode não ser necessária a execução destas etapas que por si só constituem uma sobrecarga de cálculo. Nestes termos, é necessário portanto avaliar quais serão os impactos a nível de área e tempo de cálculo resultantes da implementação do cálculo de funções elementares em hardware. Este assunto constitui o teor central dos capítulos seguintes.

(35)

Capítulo 3

Implementação

No capítulo anterior foram apresentados e detalhados vários aspectos relativos ao processo de cálculo de funções elementares através de aproximações polinomiais. Foram destacadas as im-plicações resultantes do aumento do grau do polinómio bem como do intervalo de aproximação. Interessa agora obter métricas que permitam avaliar o impacto da implementação em hardware e definir metodologias que permitam optimizar essas implementações. Neste capítulo são apresen-tados os detalhes de implementação, nomeadamente uma descrição do fluxo de implementação, algumas considerações numéricas e uma visão da arquitectura da implementação.

A partir daqui e até ao final deste trabalho consideram-se as notações CRA (Com Redução do Argumento) referindo-se ao método de cálculo tradicional, constituído pelas três fases, e SRA (Sem Redução do Argumento) para o método que se propõem, que consiste em abdicar das etapas de redução e reconstrução do argumento. Considere-se também a partir deste ponto que quando se refere a redução do argumento, isso pressupõe por omissão a respectiva reconstrução.

3.1

Visão global

A implementação do processo de cálculo de funções elementares em hardware requer o con-hecimento prévio dos polinómios aproximantes que garantem a precisão necessária no intervalo a aproximar. Como já foi referido no capítulo anterior, o polinómio aproximante no intervalo nor-malizado é extraído recorrendo à aplicação Maple. Foram implementados programas em Matlab com o objectivo de avaliar o cálculo pelo método CRA. Pretende-se determinar, através do resul-tado do erro de aproximação cometido, se o polinómio extraído do Maple cumpria o requisito de precisão imposto, pois como já foi abordado, existe um erro associado à fase de reconstrução do argumento, e assim sendo não basta garantir que é cumprido o erro de aproximação do polinómio. Caso a precisão não seja satisfeita, o processo é repetido com um polinómio de grau superior. Se for necessário segmentar intervalos, as secções eram extraídas também do Maple e passadas para o Matlab para avaliar os resultados. Para a implementação SRA, o polinómio aproximante foi

(36)

20 Implementação

extraído directamente do Maple, sem necessidade de recorrer ao Matlab, uma vez que este pro-grama permite calcular polinómios com a precisão requerida que é o suficiente para este método na medida em que consiste apenas no cálculo do polinómio no intervalo completo de aproximação. Para validar as técnicas de cálculo das funções elementares apresentadas, CRA e SRA, foram implementados modelos sintetizáveis em Verilog. Estes modelos foram especificados segundo uma descrição comportamental. Posteriormente, foi feita a simulação funcional através de test-benches para garantir que os módulos cumpriam os objectivos de cálculo para os quais foram projectados. Os modelos foram devidamente validados e procedeu-se à síntese, recorrendo à ferra-menta XST integrada no ambiente ISE da Xilinx. Os resultados da síntese relativos à área ocupada e latência de cálculo das várias implementações foram reportados. Por último, as implementações obtidas foram ensaiadas numa FPGA. O método de ensaio consistiu em integrar os módulos deste projecto num outro, que possibilitou a comunicação com a FPGA via porta série. Utilizou-se depois uma aplicação em software que permitiu escrever nas portas de entrada da FPGA os val-ores dos argumentos x da função f (x) a calcular e ler nas saídas os resultados das aproximações polinomiais realizados segundo o os métodos CRA e SRA.

A figura3.1ilustra todo este processo de avaliação e cálculo desde a extracção do polinómio aproximante até à implementação do método CRA e SRA na FPGA tal como foi descrito antes.

Interessa salientar no diagrama de implementação que, embora para a extracção do polinómio através do Maple um dos requisitos deve ser a precisão de cálculo e não o grau do polinómio, uma vez que o grau do polinómio é dependente da precisão desejada, o método de cálculo usado por este programa para extrair um polinómio depende do grau escolhido e só depois devolve o erro. Desta forma o procedimento de extracção do polinómio com a precisão desejada consistiu no seu cálculo com dependência no grau e analisando o erro obtido, o processo repetiu-se até se atingir essa mesma precisão.

Pode ver-se que o fluxo de projecto segue dois caminhos. O fluxo exterior diz respeito ao cálculo pelo método SRA e o fluxo interior descreve o cálculo pelo método CRA.

O retorno do Matlab para o Maple, assinalado na figura com “*”, refere-se à repetição do processo para um polinómio de grau mais elevado caso não seja cumprida a precisão de cálculo conferida pelo grau usado numa iteração..

3.2

Considerações de implementação

Nesta secção são detalhadas as considerações numéricas necessárias à optimização da im-plementação de ambos os métodos de aproximação polinomial, SRA e CRA, bem como uma descrição detalhada do processo de segmentação de intervalos aplicada a cada um dos métodos.

A obtenção de uma aproximação polinomial para uma determinada função elementar assenta em dois requisitos: o intervalo a aproximar e a precisão de cálculo pretendida. Sendo o propósito

(37)

3.2 Considerações de implementação 21

Figura 3.1: Diagrama de implementação.

deste trabalho delimitar em que circunstâncias é vantajoso abdicar das etapas de redução e conse-quente reconstrução do argumento, vão ser avaliadas as implicações daqui resultantes comparati-vamente ao método tradicional de cálculo.

Quando se calcula o polinómio aproximante de uma função, o seu grau terá que ser tanto maior quanto maior for a precisão de cálculo requerida. Além disso, para cumprir um determinado requisito de precisão, o aumento da largura do intervalo a aproximar obriga também a um aumento

(38)

22 Implementação

do grau do polinómio (do número de operações necessárias ao cálculo do valor do polinómio). Partindo desta análise preliminar, pode desde já concluir-se que havendo vantagens em abdicar destas duas etapas, a análise do problema terá que ser centrada até um determinado limite de ambos os requisitos e não a partir desse hipotético limite. Isto significa que a metodologia a seguir consiste em partir de argumentos reduzidos em torno de zero e precisões baixas e ir obtendo resultados à medida que se procede com o aumento gradual deste parâmetros. Resta agora definir quão baixos terão que ser os dois requisitos para que não restem dúvidas no cumprimento do objectivo. Relativamente ao intervalo de aproximação, basta partir de um intervalo mínimo igual ao intervalo normalizado típico2.3 de cada função elementar quando a aproximação é feita pelo método CRA. No que diz respeito à precisão de cálculo, o cálculo das funções será realizado para uma precisão mínima de 8 bits uma vez que para valores inferiores o erro de aproximação não é conveniente na maioria das aplicações. A implementação do processo de cálculo que envolve a aproximação tanto pelo método CRA como pelo método SRA, revela algumas implicações bem como alguns aspectos a ter em conta no que diz respeito ao aumento do grau do polinómio quer seja ele resultante do requisito de precisão ou da largura do intervalo a aproximar. Na próxima secção3.2.1são detalhados todos estes aspectos.

3.2.1 Largura dos intervalos e precisão de cálculo

Tendo em consideração que se pretende avaliar e minimizar os recursos consumidos e a latência de cálculo, é importante ter em conta dois aspectos: o grau do polinómio aproximante e a largura de representação dos operandos (que neste caso correspondem aos coeficientes do polinómio e a largura é dada pelo número de bits necessários à sua representação). A precisão do resultado depende única e exclusivamente destes dois factores, de tal forma que o erro ε resultante da realização dos cálculos de aproximação polinomial é dado por

ε = εaprox+ εqt

onde o erro de aproximação εaprox, tal como já foi referido depende do grau do polinómio

aproximante e é sempre garantido durante a obtenção do polinómio através do Maple. Merece pois atenção o valor do erro de quantificação εqt. Este erro pode ser descrito como o erro que

se propaga entre operações aritméticas resultante da representação inexacta dos operandos. Desta forma, quando se pretende uma precisão de cálculo elevada, é necessária uma representação mais exacta dos coeficientes de forma a minimizar este erro. Por outro lado, um requisito de precisão elevado também implica um polinómio de grau mais alto, o que aumenta o número de operações a realizar, tendo um impacto negativo no erro de quantificação. Outro aspecto importante é a influência da largura do intervalo a aproximar na representação dos operandos e que depende da monotonia de cada função [11]. Se forem aproximadas funções como o cos(x), log(x) ou√x,

(39)

3.2 Considerações de implementação 23

verifica-se que à medida que x aumenta, f (x) << x o que dá origem a coeficientes muito pequenos (<< 1) pelo que serão necessários mais bits para representar a parte fraccionaria dos mesmos, tantos mais quanto maior for x. Por sua vez, se se pretender aproximar a função ex, à medida que xaumenta, f (x) >> x pelo que a parte inteira dos coeficientes aumenta exponencialmente com o aumento de x, sendo necessários mais bits para a sua representação. Posto isto, a estratégia a seguir terá que ser de minimização não só do grau do polinómio aproximante, mas também da largura dos operandos. Isto requer uma análise cuidada e exaustiva para afinar o formato de representação. Tendo em conta todos os aspectos apresentados, pode ter-se uma ideia da dificuldade inerente ao cálculo das aproximações polinomiais. Interessa agora saber quais as implicações que traduzem o aumento destes factores no âmbito da realização do cálculo em hardware. Por um lado, o au-mento do grau do polinómio dá origem a mais coeficientes, o que é traduzido num maior consumo de recursos de implementação, assim como obriga à realização de mais operações, aumentando o atraso de cálculo. Por outro lado, alargar a representação binária dos coeficientes implica também operandos aritméticos de maior dimensão e cálculos mais demorados.

Os aspectos aqui considerados mostram as dificuldades de cálculo inerentes ao método CRA. Relativamente ao método proposto neste trabalho, SRA, ver-se-à que essas mesmas dificuldades são agravadas, uma vez que o cálculo do polinómio aproximante será realizado para todo o inter-valo de aproximação. Embora abdicar da redução do argumento retire a complexidade de cálculo a ela associada, é necessário recorrer a polinómios de maior grau para garantir o mesmo resultado. Assim sendo, no que diz respeito ao consumo de recursos e atraso de cálculo para um determi-nado requisito de precisão, a partir de um determidetermi-nado intervalo o peso do aumento do grau do polinómio aproximante nestas métricas de implementação em hardware será superior à vantagem resultante de abdicar destas etapas. Para contornar este problema recorre-se à segmentação de intervalos [3], que possibilita a aproximação em intervalos maiores sem necessidade de recorrer a polinómios de grau elevado e a optimizações da representação dos operandos. Estes aspectos serão descritos na secção3.2.2.

3.2.2 Formato de representação numérica

A optimização da largura da representação dos operandos passa pela escolha do seu método de representação [2] que vai depender da função a calcular. Existem dois tipos de representação binária de números: vírgula fixa e vírgula flutuante. A representação em vírgula fixa é mais adequada para valores com baixos requisitos de precisão ou de grandezas relativamente peque-nas enquanto que a representação em vírgula flutuante é conveniente para valores com gamas de representação elevadas ou valores de elevada precisão. A figura3.2 exemplifica o consumo de recursos de ambos os métodos de representação em função da largura dos operandos. Neste ex-emplo [2], a representação em vírgula flutuante mostra-se adequada para operandos superiores a aproximadamente 107, sendo que para valores inferiores resulta em desperdício de recursos. Como

(40)

24 Implementação

foi referido na secção3.2a avaliação das vantagens produzidas pelo método de cálculo SRA, con-sistirá em efectuar aproximações com polinómios de grau reduzido em sub-intervalos do domínio das funções, pelo que o método mais adequado e que irá ser considerado é a representação em vírgula fixa.

Figura 3.2: Análise de recursos consumidos pela representação em vírgula fixa e vírgula flutuante em função da largura dos operandos [2].

A representação de números em vírgula fixa pode ser obtida através de duas expressões [12] que ilustram o cálculo da parte inteira e fraccionaria. Considere-se a notação Q para representar um número em vírgula fixa e que QI e QF representam a parte inteira e da parte fraccionaria desse número, respectivamente. Tem-se então,

Q= [QI][QF] (3.1)

A parte inteira é dada por:

QI= dlog2(α + 1)e (3.2)

onde α corresponde à parte inteira do número decimal. A parte fraccionaria é dada por

QF=  log2(1 β)  (3.3)

(41)

3.2 Considerações de implementação 25

Considere-se um exemplo em que se pretende representar em virgula fixa o número 3.245.

Q= [QI][QF] = [dlog2(3 + 1)e] 

log2( 1 0.005)



= [2] [d7.643856e] = [2] [8]

Neste caso são portanto necessários 2 bits para representar a parte inteira do número e 8 bits para representar a parte decimal.

Além da representação em vírgula fixa, e uma vez que se pretende seguir uma estratégia de minimização da largura dos operandos, a metodologia adoptada no que diz respeito à implemen-tação do método de cálculo, consiste em representar a parte fraccionaria dos operandos por ex-cesso e consoante os resultados obtidos diminuir gradualmente o número de bits representativos até atingir a largura mínima possível mas que garanta os requisitos de aproximação em termos de precisão.

3.2.3 Segmentação de intervalos

Segmentar o intervalo de aproximação de uma função [13] consiste em dividir esse intervalo em várias secções, tantas quantas necessárias para cumprir uma determinada precisão, e realizar a aproximação polinomial para cada um desses sub-intervalos. Quanto menor for o intervalo a aproximar, maior será a precisão alcançada, pelo que nestes termos é possível aproximar uma função que se estende num intervalo grande recorrendo a polinómios de grau baixo. A segmen-tação pode ser realizada de duas formas [3]

• segmentação linear • segmentação não linear

A segmentação linear consiste em dividir o intervalo de aproximação em várias secções iguais entre si. A segmentação não linear consiste em separar um intervalo tendo em conta a evolução da função, ou seja, zonas lineares da função requerem menos segmentos, zonas não lineares re-querem mais segmentos, pelo que o número e tamanho das secções vai depender da linearidade da função a aproximar. Devido à natureza da maior parte das funções elementares, o método mais adequado e que vai ser adoptado neste trabalho é a segmentação não linear, pois de outro modo haveria desperdício de recursos uma vez que recorrendo à segmentação linear, todos as secções que compõem o intervalo terão que ter um tamanho máximo limitado pelo pior caso que seria a zona menos linear da função [14].

Um processo que tipicamente implementa a segmentação não linear é denominado de segmen-tação hierárquica [3]. Este método consiste de uma forma geral em segmentar o intervalo de uma forma recursiva através de segmentos uniformes e segmentos cuja largura seja uma potência de dois. Na figura3.3extraída de [3] estão representadas as duas formas de divisão de segmentos, onde US se refere à segmentação uniforme e as restantes se referem à segmentação que varia com

(42)

26 Implementação

potências de dois conforme a não linearidade da função (à esquerda, à direita ou em ambos os ex-tremos), referidas como P2S. A metodologia deste processo consiste em segmentar o intervalo por

Figura 3.3: Formas de divisão de segmentos.

passos, em que primeiro o intervalo é subdividido usando um dos formatos P2S, consoante a zona de não linearidade da função, e depois cada um desses sub-intervalos é novamente segmentado, onde para a maioria das funções, é suficiente realizar dois passos, usando no segundo segmentação uniforme . A figura3.4retirada de [3] ilustra esta técnica aplicada a três funções, são elas:

f1(x) = −x

2log2(x) f2(x) = cos−1(x)

f3(x) =p−ln(x)

Na tabela3.1estão presentes os resultados obtidos para cada uma destas três funções para difer-entes requisitos de precisão, comparando o número de segmentos necessários, recorrendo a seg-mentação linear e segseg-mentação hierárquica.

Função Precisão Seg. Uniforme Seg. Hierárquica

2−8 8 5 f1 2−16 4 096 31 2−24 1 048 576 191 2−8 16 6 f2 2−16 32 768 49 2−24 8 388 608 352 2−8 128 11 f3 2−16 262 144 126 2−24 67 108 864 1 076

Tabela 3.1: Resultados de segmentação linear e hierárquica para várias funções com precisão de aproximação de 8, 16 e 24 bits.

(43)

3.2 Considerações de implementação 27

Figura 3.4: Segmentação hierárquica aplicada a diferentes funções.

Através da análise dos resultados obtidos por outros autores, não restam dúvidas relativamente à eficácia da segmentação hierárquica comparativamente à segmentação linear.

Considere-se agora um caso concreto, mais adequado no âmbito deste trabalho, em que se pretende calcular o polinómio aproximante SRA de grau 2 da função excom uma precisão de 8 bits no intervalo [0, 7]. Utilizando segmentação linear seriam necessários 112 segmentos para obter o polinómio que satisfaz os requisitos definidos, enquanto que recorrendo a segmentação não linear são necessários apenas 43 segmentos. A partir deste exemplo, mais uma vez se verifica que mesmo para uma precisão baixa e um intervalo de aproximação pequeno, o método de segmentação não linear é muito vantajoso quando comparado com segmentação linear.

A realização de segmentação traz vantagens para ambos os métodos de aproximação (CRA e SRA). No entanto, e como já foi referido no capítulo 2, note-se que no cálculo de aproximações CRA a segmentação apenas vai interferir no cálculo do polinómio, não tendo qualquer relação com a redução e reconstrução do argumento. Assim, as vantagens produzidas pela utilização desta técnica terão maior impacto no cálculo de aproximações SRA. Por outro lado, recorrer a este método tem implicações. De seguida serão descritas estas implicações e delineado em que circunstâncias compensa recorrer à segmentação de intervalos.

(44)

28 Implementação

3.2.3.1 Considerações

O número de segmentos necessários para aproximar uma determinada função num determi-nado intervalo depende única e exclusivamente do grau do polinómio aproximante. Avaliar em que circunstâncias compensa segmentar intervalos implica conhecer o impacto que tem na área ocupada e atraso de cálculo resultantes da implementação em hardware. Independentemente da quantidade de segmentos utilizados, quanto menor for o grau do polinómio, mais baixo será o tempo de cálculo uma vez que a quantidade de operações a realizar é menor. Assim sendo, no que diz respeito à latência de cálculo, o uso de segmentos é na maioria das vezes vantajoso e a quantidade de segmentos não revela qualquer preocupação. Por sua vez, a diminuição do grau do polinómio também diminui a complexidade do hardware, ou seja, a quantidade de recursos ocupados, mas neste caso há que ter em atenção a quantidade de segmentos usados, porque o con-sumo de recursos vai aumentar com o uso de mais segmentos. Embora o aumento da ocupação de área resultante da segmentação não seja tão acentuado comparativamente ao aumento originado pelo grau do polinómio, pois como já foi referido, neste último caso existem outros factores que contribuem também para o aumento da área, há que tentar minimizar o consumo de área de forma a obter resultados mais satisfatórios na avaliação de aproximações SRA, quando comparados com o processo de cálculo tradicional CRA. Posto isto, e tal como referido no Capítulo 2, para evitar a utilização grosseira desta técnica, é necessário definir uma estratégia que permita um equilíbrio entre o grau do polinómio aproximante e o número de segmentos a utilizar. Este assunto será detalhado na secção3.3.

3.2.3.2 Abordagem

O cálculo de aproximações polinomiais sem recorrer ao processo de segmentação de inter-valos apresenta limitações muito grandes no âmbito da implementação em sistemas baseados em hardware, principalmente quando se pretende aproximar funções pelo método SRA. Isto porque para cumprir um determinado requisito de precisão, o aumento do intervalo a aproximar é com-pensado apenas pelo aumento do grau do polinómio, o que tem um impacto directo no aumento dos recursos do hardware consumidos e tempo de cálculo. A figura3.5ilustra a evolução do grau do polinómio em função do intervalo de aproximação para a função cos(x), com uma precisão fixada em 12 bits, para as aproximações CRA e SRA.

Verifica-se que mesmo para intervalos de aproximação pequenos, o aumento do intervalo de aproximação obriga a um aumento significativo do grau do polinómio para a aproximação SRA. Por sua vez, o aumento do grau do polinómio, traduz-se em coeficientes mais pequenos relativa-mente à sua parte fraccionaria, o que obriga a uma representação mais exacta dos mesmos, ou seja, serão necessários mais bits para representar os coeficientes de forma a garantir que a precisão de cálculo é cumprida. Isto tem também implicações no consumo de recursos e principalmente no atraso de cálculo. Assim sendo a complexidade do hardware vai aumentar consideravelmente para

(45)

3.3 Distribuição de segmentos 29

Figura 3.5: Grau do polinómio em função do intervalo de aproximação para a função cos(x) com uma precisão de 12 bits.

argumentos pequenos. Desta forma, o cálculo sem segmentação apenas terá relevância quando são feitas aproximações para intervalos pequenos bem como para justificar a necessidade de recorrer à segmentação de intervalos.

Como já foi referido no Capítulo 2, embora o processo de cálculo de polinómios através de segmentação de intervalos traga vantagens, é necessário encontrar um equilíbrio entre o grau do polinómio aproximante e o número de segmentos que repartem o intervalo de aproximação. Para tal, foram realizados diversos testes que serão descritos e avaliados na secção3.3e que permitem encontrar a solução que mais se adequa ao estudo proposto neste trabalho.

3.3

Distribuição de segmentos

Na secção 3.2.2ficou claro que é necessário avaliar a quantidade de segmentos a usar para cada caso. Os testes realizados nesse sentido, tinham como principal objectivo determinar de en-tre duas situações a que mais se adequava ao objectivo proposto pelo trabalho, tendo em conta que serão feitas avaliações para várias funções bem como diferentes requisitos de precisão e in-tervalos a aproximar. Foram então avaliados, para várias funções, os resultados produzidos pelo cálculo de diversos polinómios de grau mínimo, nomeadamente a ocupação de área e atraso de cálculo, e comparados com os resultados produzidos pelo cálculo de polinómios de grau mais elevado. Através da análise destes resultados, ficou claro que para polinómios de grau mínimo, os resultados relativos ao atraso de cálculo eram os mais satisfatórios. No entanto aumentando

(46)

30 Implementação

o grau desses polinómios até um certo limite produzia resultados de latência ainda vantajosos, mas os recursos consumidos eram inferiores uma vez que se segmentava o intervalo com menos secções. Desta forma, concluiu-se que no cálculo de polinómios com segmentação de intervalos, para obter os melhores resultados tendo em conta ambos os requisitos relativos há implementação, a aproximação do polinómio deve ser feita para o grau mínimo que garante a precisão requerida no intervalo normalizado. Para melhor compreender a avaliação feita e a solução adoptada segue-se um exemplo concreto. Consideremos que se pretende aproximar a função ex no intervalo [0,7]

com uma precisão de 12 bits. Pelo método tradicional de cálculo de aproximações polinomiais, a redução do argumento desta função é tal que

xnorm∈ [0, log(2)] (3.4)

O polinómio que garante uma precisão de 12 bits neste intervalo normalizado é de grau 3. Para aproximar a função nestes termos e sem recorrer à segmentação, é necessário um polinómio de grau 5 para a aproximação CRA e grau 11 para a aproximação SRA, ou seja, os polinómios necessários nestes termos e recorrendo a segmentação, poderão ir de grau 2 a grau 4 para a aprox-imação CRA e de grau 2 a grau 10 para a aproxaprox-imação SRA. Traduzindo para este caso os re-sultados obtidos nos testes realizados e a conclusão tirada, a aproximação mais compensatória a nível de recursos ocupados e atraso de cálculo é para polinómio de grau 3 em ambos os métodos de aproximação, que é precisamente o grau do polinómio que garante a precisão de 12 bits no intervalo normalizado3.4. Como foi referido na secção3.3, o método de segmentação adoptado consiste em separar o intervalo de aproximação em secções que dependem da evolução temporal da função, ou seja, segmentação não linear. No entanto, o processo de segmentação implementado é um pouco diferente da Segmentação Hierárquica. De forma a optimizar o número de segmentos usados, optou-se por calcular os segmentos com uma precisão igual à precisão de cálculo con-siderada, não estando assim os incrementos entre secções limitados (tal como na segmentação hierárquica) a valores de potência de dois. Depois de extraídos os segmentos neste formato, os valores que limitam cada secção foram guardados e através de um comparador é feito o reencamin-hamento do processo de cálculo para o segmento correcto, ou seja, para o polinómio que aproxima a função nesse segmento. Embora assim se obtenha uma optimização do número de segmentos e da quantidade de recursos consumidos, este processo apenas foi possível na medida em que se aproxima funções em intervalos pequenos e para precisões baixas, caso contrário o consumo de recursos e a dificuldade de implementação seriam incomportáveis. Nas tabelas3.2e3.3, podemos ver os valores do número de segmentos calculados para cada intervalo e precisão considerada para as funções cos(x) e ex respectivamente. Relativamente ás funções log(x) e√xeste assunto será apenas abordado no capítulo 5. Para a função cos(x), a aproximação CRA não necessita de seg-mentação, pois como foi referido no capítulo anterior a fase de reconstrução é realizada com base na equivalência entre quadrantes, deste modo o erro de aproximação não aumenta com o intervalo

Referências

Documentos relacionados

Como corolário deste resultado obtemos o Teorema 5.2.10 que conclui acerca da existência genérica de ramos de soluções espacialmente periódicas por uma rede hexagonal e com

The focus of this thesis was to determine the best standard conditions to perform a laboratory-scale dynamic test able to achieve satisfactory results of the

​ — these walls are solidly put together”; and here, through the mere frenzy of bravado, I rapped heavily with a cane which I held in my hand, upon that very portion of

Não obstante estas abordagens distintas à problemática do consumo, ambas as correntes teóricas partem de um argumento principal e fundamental: a consideração que o consumo

Dada a elevada demanda de medicamentos manipulados, o LM tem uma produção diária quer de formulações magistrais, quer de formulações oficinais. Relativamente às

The ultimate objectives of this work are to obtain the Failure, Mode, Effects, and Criticality Analysis (FMECA), with application of the Reliability Centered

Para a validação do código Ecoterra foi considerado como georreferenciamento padrão de latitude e longitude a precisão de milésimo de minuto para que, por meio de

A reinserção, nesta perspectiva, convoca um papel mais activo da sociedade e, nesta medida, é preferível, enquanto conceito que encerra um programa de acção para a