Aproximação de funções elementares sem redução de ... · Lista de Figuras 2.1 Evolução do...

72
FACULDADE DE E NGENHARIA DA UNIVERSIDADE 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 Junho de 2010

Transcript of Aproximação de funções elementares sem redução de ... · Lista de Figuras 2.1 Evolução do...

FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO

Aproximação de funções elementaressem 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

Junho de 2010

c© Filipe Meireles, 2010

Resumo

O cálculo de funções matemáticas elementares é feito por aproximações. Existem diversosmétodos que permitem aproximar funções e que se aplicam a diferentes requisitos. Entre eles, asaproximações polinomiais permitem aproximar qualquer função contínua recorrendo a polinómiosque 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álculodo polinómio no intervalo reduzido e reconstrução do argumento para o domínio completo dafunção. Com este trabalho, e recorrendo a este método de aproximação, aplicado a várias funçõeselementares, 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 emque o cálculo de funções elementares é necessário, podem beneficiar da não realização da reduçãoe reconstrução do argumento quando à priori é conhecida a gama de valores em que se pretendecalcular 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 produzidona ocupação de área e latência de cálculo, tanto pelo método tradicional como para a alternativaque aqui se propõe. A análise dos resultados obtidos, mostra que em determinadas circunstânciase para algumas funções é vantajoso abdicar destas etapas traduzindo-se numa optimização dasmétricas em causa.

i

ii

Abstract

The computation of elementary mathematical functions is performed by approximations. Thereare several methods that allow us to approximate functions which apply to different requirements.Among them, the polynomial approximation allow us to approximate any continuous functionusing polynomials that are simpler functions of one variable. The computation of functions bypolynomial 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 theadvantages of giving up the steps of range reduction and reconstruction, that many times lead tocomputational overhead. Applications that need computation of elementary functions may benefitfrom this method when we know in advance the sub-domain in which we want to compute thefunction. 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 methodresults in an optimization of these metrics.

iii

iv

Agradecimentos

Agradeço ao meu orientador António Araújo pelo estímulo, e pelo apoio que tornou possívela 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 oapoio que eu precisava.

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

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

v

vi

Conteúdo

Agradecimentos v

1 Introdução 11.1 Descrição e Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Contributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Estrutura da dissertação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Funções elementares 52.1 Abordagens de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Aproximações polinomiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2.1 Critérios de aproximação . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.2 Considerações sobre a implementação . . . . . . . . . . . . . . . . . . . 9

2.3 Fases de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3.1 Redução do argumento . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.3.2 Cálculo do polinómio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3.3 Reconstrução do argumento . . . . . . . . . . . . . . . . . . . . . . . . 12

2.4 Caso de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.5 Cálculo sem redução de argumento . . . . . . . . . . . . . . . . . . . . . . . . . 172.6 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3 Implementação 193.1 Visão global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.2 Considerações de implementação . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.1 Largura dos intervalos e precisão de cálculo . . . . . . . . . . . . . . . . 223.2.2 Formato de representação numérica . . . . . . . . . . . . . . . . . . . . 233.2.3 Segmentação de intervalos . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.3 Distribuição de segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.4 Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.5 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4 Resultados 374.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.2 Resultados obtidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.2.1 Implementação sem segmentação . . . . . . . . . . . . . . . . . . . . . 394.2.2 Implementação com segmentação . . . . . . . . . . . . . . . . . . . . . 42

5 Conclusão 515.1 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.2 Trabalho Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

vii

viii CONTEÚDO

Referências 55

Lista de Figuras

2.1 Evolução do erro de aproximação para vários polinómios aproximantes de grau 2para 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 2para a função ex no intervalo [−1,1] [1] . . . . . . . . . . . . . . . . . . . . . . 9

2.3 Círculo trigonométrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4 Reconstrução do argumento normalizado para a função cos(x) . . . . . . . . . . 15

3.1 Diagrama de implementação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.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]. . . . . . . . . . . . . . . . . . . 243.3 Formas de divisão de segmentos. . . . . . . . . . . . . . . . . . . . . . . . . . . 263.4 Segmentação hierárquica aplicada a diferentes funções. . . . . . . . . . . . . . . 273.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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.6 Arquitectura de implementação do método CRA com segmentação de intervalos. 323.7 Arquitectura de implementação do método CRA sem segmentação de intervalos. 333.8 Arquitectura de implementação do método SRA com segmentação de intervalos. 333.9 Arquitectura de implementação do método SRA sem segmentação de intervalos. . 333.10 Arquitectura de implementação da segmentação de intervalos. . . . . . . . . . . 343.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. . . . . . . . . . . 404.2 Latência para cos(x) sem segmentação com uma precisão de 8 bits. . . . . . . . . 404.3 Área para cos(x) sem segmentação com uma precisão de 12 bits. . . . . . . . . . 404.4 Latência para cos(x) sem segmentação com uma precisão de 12 bits. . . . . . . . 404.5 Área para cos(x) sem segmentação com uma precisão de 16 bits. . . . . . . . . . 414.6 Latência para cos(x) sem segmentação com uma precisão de 16 bits. . . . . . . . 414.7 Área para ex sem segmentação com uma precisão de 8 bits. . . . . . . . . . . . . 414.8 Latência para ex sem segmentação com uma precisão de 8 bits. . . . . . . . . . . 414.9 Área para ex sem segmentação com uma precisão de 12 bits. . . . . . . . . . . . 424.10 Latência para ex sem segmentação com uma precisão de 12 bits. . . . . . . . . . 424.11 Área para ex sem segmentação com uma precisão de 16 bits. . . . . . . . . . . . 424.12 Latência para ex sem segmentação com uma precisão de 16 bits. . . . . . . . . . 424.13 Área para cos(x) com segmentação com uma precisão de 8 bits. . . . . . . . . . 444.14 Latência para cos(x) com segmentação com uma precisão de 8 bits. . . . . . . . 444.15 Área para cos(x) com segmentação com uma precisão de 12 bits. . . . . . . . . . 444.16 Latência para cos(x) com segmentação com uma precisão de 12 bits. . . . . . . . 444.17 Área para cos(x) com segmentação com uma precisão de 16 bits. . . . . . . . . . 45

ix

x LISTA DE FIGURAS

4.18 Latência para cos(x) com segmentação com uma precisão de 16 bits. . . . . . . . 454.19 Área para ex com segmentação com uma precisão de 8 bits. . . . . . . . . . . . . 464.20 Latência para ex com segmentação com uma precisão de 8 bits. . . . . . . . . . . 464.21 Área para ex com segmentação com uma precisão de 12 bits. . . . . . . . . . . . 464.22 Latência para ex com segmentação com uma precisão de 12 bits. . . . . . . . . . 464.23 Área para ex com segmentação com uma precisão de 16 bits. . . . . . . . . . . . 474.24 Latência para ex com segmentação com uma precisão de 16 bits. . . . . . . . . . 474.25 Gráfico da função log(x) no intervalo [0,10]. . . . . . . . . . . . . . . . . . . . . 484.26 Gráfico da função

√x no intervalo [0,10]. . . . . . . . . . . . . . . . . . . . . . 48

4.27 Gráfico da função ex no intervalo [0,10]. . . . . . . . . . . . . . . . . . . . . . . 49

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]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2 Erro máximo absoluto de vários polinómios aproximantes de grau 2 da função |x|

no intervalo [−1,1] [1]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.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ãode aproximação de 8, 16 e 24 bits. . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.2 Valores resultantes da segmentação de intervalos para a função cos(x). . . . . . . 313.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, paradiferentes precisões e intervalos de aproximação. . . . . . . . . . . . . . . . . . 39

4.2 Grau dos polinómios usados na aproximação de exp(x), sem segmentação, paradiferentes 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çãopara 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 ex para uma precisão de cálculo de 8 bitspelo 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 ex para uma precisão de cálculo de 12 bitspelo 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 ex para uma precisão de cálculo de 16 bitspelo método SRA face ao método CRA. . . . . . . . . . . . . . . . . . . . . . . 48

xi

xii LISTA DE TABELAS

Abreviaturas e Símbolos

MSB Most Significant BitCRA Com Redução de ArgumentoSRA Sem Redução de argumentoε erro do resultadoεaprox erro de aproximaçãoεqt erro de quantificaçãoFPGA Field Programmable Gate Array

xiii

xiv ABREVIATURAS E SÍMBOLOS

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 intervalo, 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

1

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

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.

4 Introdução

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.

5

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 circuitos 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 ‖p− f‖.

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

approximations vulgarmente designadas por minimax. As equações 2.1 e 2.2 definem a distância

que é minimizada pelos critérios descritos respectivamente,

‖p− f‖2 =

√∫ b

aω(x)( f (x)− p(x))2dx (2.1)

‖p− f‖∞= 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 tabela 2.1 estão repre-

sentados os erros máximos resultantes de vários polinómios de segunda ordem para calcular ex no

intervalo [-1,1].

Taylor Legendre Chebyshev MinimaxErro 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 nointervalo [−1,1] [1].

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 paraa função ex no 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 tabela 2.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 figura 2.2 demonstra 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 MinimaxErro 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| nointervalo [−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

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 paraa função ex no 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

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 n2 para 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 xnorm mais conveniente pertencente

a um intervalo reduzido [a′,b′]. 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

seguintes, é detalhado o procedimento de cálculo recorrente de cada uma das três etapas.

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 ∈ [a′,b′]

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 tabela 2.3 estão resumidas todas estas considerações para diferentes funções elementares.

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

xProcesso 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 2k 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 [a′,b′], C = |a′|+ |b′|. 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:

xnorm ∈ [2M−1,2M] (2.6)

12 Funções elementares

se por outro se pretender aproximar√

x vem:

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 tabela 2.3 garantem que para qualquer valor de x, xnorm pertence ao

intervalo reduzido. Iremos sustentar esta afirmação com o exemplo da secção 2.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 tabela 2.3.

• ex

xnorm = x− kC

exnorm = ex−kC

exnorm =ex

ekC

Daqui resulta a equação geral

ex = ekC× exnorm (2.8)

e substituindo C por log(2), vem

ex = ek∗log(2)× exnorm

⇔ ex = 2k× exnorm (2.9)

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 =

√x/Ck

√xnorm =

√x/√

Ck

Daqui resulta a equação geral√

x =√

xnorm×√

C k (2.12)

e substituindo C por 2, vem√

x =√

xnorm×√

2 k (2.13)

onde√

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

argumento resulta do factor multiplicativo√

2 k.

• 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 figura 2.3

para a função cos(x).

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 figura 2.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

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.2 o 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

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 tabela 2.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:

k mod 4 =

⌊14,5π/2

⌉mod 4 = 9 mod 4 = 1

através das relações expressas pela equação 2.14 retira-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

ε = | f − p|= |−0,3549242668− (−0,355)|= 0,0000757 < 2−8

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ção 2.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 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.

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

19

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 figura 3.1 ilustra 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

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

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ípico 2.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ção 3.2.1 sã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,

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

x aumenta, 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 determinado 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ção 3.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 figura 3.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

24 Implementação

foi referido na secção 3.2 a 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 flutuanteem 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)

onde β representa a resolução do número, ou seja, o valor mínimo da componente fraccionaria.

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 figura 3.3 extraí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

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 figura 3.4 retirada de [3] ilustra esta técnica aplicada a três funções, são elas:

f1(x) =−x2

log2(x)

f2(x) = cos−1(x)

f3(x) =√− ln(x)

Na tabela 3.1 estã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 segmentação hierárquica.

Função Precisão Seg. Uniforme Seg. Hierárquica2−8 8 5

f1 2−16 4 096 312−24 1 048 576 1912−8 16 6

f2 2−16 32 768 492−24 8 388 608 3522−8 128 11

f3 2−16 262 144 1262−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 deaproximação de 8, 16 e 24 bits.

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 ex com 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.

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ção 3.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 figura 3.5 ilustra 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

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) comuma 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ção 3.3 e 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.2 ficou 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

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 aproximaçã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 normalizado 3.4. Como foi referido na secção 3.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 tabelas 3.2 e 3.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√

x este 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

3.4 Arquitectura 31

de aproximação.

precisao/argumento 2 bits 3 bits 4 bits 5 bits

2−8 (grau 3) 2 4 8 162−12 (grau 4) 2 4 9 172−16 (grau 5) 2 5 10 19

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

CRA SRAprecisao/

argumento 2 bits 3 bits 2 bits 3 bits2−8 (grau 2) 2 10 7 432−12 (grau 3) 2 6 5 232−16 (grau 4) 1 4 5 16

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

3.4 Arquitectura

As funções escolhidas para o estudo aqui apresentado sobre aproximações polinomiais foram

as seguintes:

• cos(x)

• ex

• log(x)

•√

x

Embora existam outras funções elementares que podiam ser consideradas, optou-se por estas por

cobrirem um conjunto de especificidades também presentes nessas outras funções, tais como

semelhanças no seu comportamento e não linearidades. Além disso, este conjunto de funções

serve para evidenciar a legitimidade do método SRA, não sendo objectivo do trabalho estudar de

forma exaustiva todas as funções elementares.

As figuras 3.6, 3.7, 3.8 e 3.9 apresentam a arquitectura que serviu de base à implementação

dos métodos CRA e SRA com e sem segmentação, respectivamente. As figuras referem-se em

particular à arquitectura de implementação da função ex, entendendo-se como suficiente, uma

vez que se pretende expor a arquitectura de implementação usada, e esta é similar para todas as

funções.

32 Implementação

Os módulos foram implementados recorrendo a máquinas de estados que se adequam perfeita-

mente à avaliação de funções elementares por aproximações polinomiais. Isto porque o cálculo de

polinómios é feito segundo um processo iterativo onde para um polinómio de grau n são efectu-

adas n multiplicações e n adições, sendo que se realiza uma multiplicação e uma adição por ciclo

de relógio. Deste modo o uso de máquinas de estados permite precisamente aquilo que se pretende

que é a separação de operações por ciclo de relógio.

Para melhor compreender a arquitectura adoptada vai ser explicado o modelo de implemen-

tação do método CRA com segmentação do intervalo, ilustrado na figura 3.6, uma vez que é o

módulo mais completo e que cobre todos os aspectos relativos a todas as implementações. As

restantes implementações (figuras 3.7, 3.8 e 3.9), diferem apenas no caso do método de cálculo

SRA pela ausência das etapas de redução e reconstrução do argumento e sem o uso da segmen-

tação de intervalos pela ausência do comparador, pelo que a arquitectura que se mostra similar

entre as diferentes implementações é a mesma. Em primeiro lugar, considerando a arquitectura

Figura 3.6: Arquitectura de implementação do método CRA com segmentação de intervalos.

apresentada, verifica-se que os operadores usados no processo de cálculo são maioritariamente

multiplicadores e adicionadores. Assim sendo, é apenas usado um bloco Multiplicador/Somador,

que efectua uma multiplicação e uma adição por ciclo de relógio, e que é partilhado com todas as

etapas, resultando assim numa poupança de recursos. Isto não trás qualquer implicação no atraso

de cálculo uma vez que este bloco executa as duas operações num ciclo de relógio, e sendo usado

nas outras etapas, o período máximo de operação do circuito projectado vai estar limitado ou pela

etapa de reconstrução ou pela etapa de cálculo do polinómio.

De seguida descreve-se a arquitectura específica de cada etapa. Relembrando a equação que

traduz o processo de redução aditiva, vem:

xnorm = x− k×C, k = bx/Cc

3.4 Arquitectura 33

Desta equação resulta a composição da parte esquerda da figura 3.6. Traduz-se num bloco

divisor, que calcula o valor de k, e o resultado da divisão entra no bloco Multiplicador/Somador

onde é calculada a multiplicação de k por C e adicionado o valor do argumento x para ser final-

mente devolvido o valor do argumento normalizado (xnorm). O bloco divisor devolve o resultado

de k já no formato requerido, arredondamento ao inteiro mais baixo, e é passado ao multiplicador

o simétrico da constante C definido como parâmetro, uma vez que o cálculo de xnorm é feito através

de uma subtracção. Desta forma tira-se partido da partilha de recursos, executa-se uma soma com

um dos operandos negativos que devolve o mesmo resultado da subtracção. Posteriormente o ar-

gumento normalizado entra num processo iterativo onde é calculado o polinómio. A arquitectura

referente ao bloco que realiza a segmentação é analisada com detalhe um pouco mais à frente. Por

fim, na etapa de reconstrução, é realizada uma operação de deslocamento que traduz o factor mul-

tiplicativo que expande o argumento e é então realizada a multiplicação pelo valor do polinómio

no intervalo normalizado resultando assim o valor da aproximação polinomial realizada.

Figura 3.7: Arquitectura de implementação do método CRA sem segmentação de intervalos.

Figura 3.8: Arquitectura de implementação dométodo SRA com segmentação de intervalos.

Figura 3.9: Arquitectura de implementação dométodo SRA sem segmentação de intervalos.

A arquitectura referente ao módulo que executa a segmentação do intervalo de aproximação

é ilustrada pela figura 3.10. Este módulo, decide a escolha do polinómio correspondente a cada

segmento, através de uma comparação entre o argumento x e vários valores guardados em memória

que traduzem os limites superiores de cada segmento, representados por segi. Quando o valor

34 Implementação

do argumento é menor do que um determinado segi, o módulo consulta o índice de uma tabela

correspondente a esse valor limite do segmento, e calcula o polinómio correspondente segundo a

regra de Horner. O bloco "Calcula Índice" ilustrado na figura, traduz o comparador e a extracção

do índice da tabela onde estão guardados os coeficientes dos polinómios que aproximam cada

secção do intervalo.

Figura 3.10: Arquitectura de implementação da segmentação de intervalos.

Relativamente ao fluxo de cálculo, tal como foi referido anteriormente, este é feito recorrendo

a uma máquina de estados como mostra a figura 3.11 que ilustra o processo de cálculo da função

ex para um argumento de 2 bits. Neste caso é necessário segmentar o intervalo de aproximação

em 3 secções pelo que a escolha da secção depende do argumento de entrada, e é feita quando é

iniciado o cálculo do polinómio. O fluxo de cálculo é constituído pelos estados INIT, RD, P e RC

que correspondem ao estado que inicia o cálculo, redução do argumento, cálculo do polinómio

aproximante e reconstrução do argumento, respectivamente. Quando o módulo recebe um novo

argumento, inicia-se o cálculo da aproximação com a activação do sinal start_div, que por sua

vez inicia o cálculo da divisão correspondente ao inteiro k. Posteriormente, quando este sinal

é desactivado internamente pelo divisor, o valor de k é devolvido ao estado RD1 que efectua o

cálculo do argumento normalizado. Depois, é calculado o polinómio aproximante em 3 estados

conforme a estrutura do polinómio segundo a regra de Horner, onde Pi(xnorm) corresponde a:

P3(xnorm) = (d× x)+ c

P2(xnorm) = (P3(xnorm)× x)+b

P1(xnorm) = (P2(xnorm)× x)+a

3.5 Conclusão 35

Figura 3.11: Diagrama representativo do fluxo de cálculo através de uma máquina de estados.

resultando assim o cálculo do polinómio:

P(xnorm) = ((d× x+ c)× x+b)× x+a

Por fim, o argumento é reconstruído no estado RC, que multiplica o factor de reconstrução cor-

respondente a esta função, demonstrado no capítulo anterior 2.3, pelo polinómio normalizado.

Desta descrição, faltam referir o cálculo correspondente à operação de deslocamento que resulta

no factor multiplicativo. Esta operação é realizada através de uma atribuição contínua, estando

disponível para o cálculo da reconstrução uma vez que depende apenas do valor de k que é obtido

logo após a conclusão da divisão.

3.5 Conclusão

Deste capítulo interessa destacar quatro aspectos essenciais. O esforço da aproximação poli-

nomial das funções elementares vai ser centrado em precisões baixas e intervalos pequenos, pois

é nestes cenários que se podem obter resultados positivos no uso do método SRA na medida

em que se requer polinómios de grau baixo. Os operandos serão representados em vírgula fixa

que se mostra mais adequada segundo os termos da análise, porque os termos que compõem os

polinómios são de uma ordem de grandeza baixa o suficiente para justificar o uso desta represen-

tação. Como medida de optimização dos resultados, vai recorrer-se ao uso de segmentação dos

intervalos de aproximação por segmentação não linear, que é mais adequada para funções que ap-

resentem fortes não linearidades. Este método de optimização beneficia sobretudo a avaliação de

36 Implementação

funções pelo método SRA. Por último, as funções escolhidas a analisar são cos(x), ex, log(x) e√

x

por cobrirem as características essenciais relativas a diferentes comportamentos no seu domínio.

Capítulo 4

Resultados

Nos capítulos anteriores foram abordadas todas as considerações, implicações e possíveis op-

timizações que envolvem o processo de cálculo e implementação de funções elementares. Foi

exposto também o método e arquitecturas de implementação. Neste capítulo são analisados os

resultados obtidos referentes ao trabalho realizado que resultam das abordagens anteriormente

mencionadas.

4.1 Metodologia

Todos os módulos descritivos de ambos os métodos de cálculo (CRA e SRA) foram sintetiza-

dos para a FPGA Spartan 3 da Xilinx. A escolha desta FPGA deve-se ao facto de a ter disponível

numa placa de prototipagem para realizar os ensaios relativamente ao cálculo de funções ele-

mentares. Foi coberta uma vasta gama de intervalos de aproximação e várias precisões de cálculo.

Os resultados obtidos estão sumariados ao longo deste capítulo. Como métricas das implemen-

tações realizadas são indicadas a área de implementação expressa pelo número de Look Up Tables

(LUTs) e a latência expressa em "ns". Os resultados expostos relativos à área de implementação,

não cobrem todos os recursos consumidos, os multiplicadores são contabilizados à parte uma vez

que esta FPGA contem multiplicadores dedicados. Para extrair os valores correspondentes à latên-

cia de cálculo, depois de sintetizado o modelo, extraiu-se o valor do período mínimo de operação e

através da simulação funcional verificou-se qual era o número de ciclos de relógio necessário para

efectuar o cálculo da aproximação polinomial. Multiplicou-se este valor pelo valor obtido para o

período mínimo e obteve-se assim, para todos os casos, a latência correspondente ao tempo total

de cálculo. A extracção da latência em unidades de tempo dá uma ideia mais clara das diferenças

no processo de cálculo entre cada um dos métodos (SRA e CRA). Isto porque como foi dito nos

Capítulos 2 e 3, há vários factores que influenciam o atraso de cálculo e este impacto não pode ser

avaliado recorrendo a comparações em termos de número de ciclos de relógio. Considere-se uma

caso concreto que evidencia este facto. A aproximação da função cos(x) para um argumento de 5

37

38 Resultados

bits e uma precisão de 16 bits requer 19 ciclos de relógio para completar o cálculo pelo método

CRA e 10 ciclos de relógio para completar o cálculo pelo método SRA. Isto levaria a pensar que

a aproximação pelo método SRA leva quase metade do tempo a efectuar o cálculo, no entanto isto

não é verdade pois o período mínimo de operação pelo método CRA é de 14.134 ns enquanto que

pelo método SRA é de 24.335 ns que é substancialmente maior. Resulta portanto um tempo total

de cálculo de 268.546 ns para o método CRA e para o método SRA de 243.35 ns. Ainda assim o

atraso de cálculo é menor para o caso SRA, mas a diferença (proporcional) entre o valor em ciclos

de relógio e o valor em unidades de tempo é muito grande entre ambos os métodos. Resta referir

que os valores da latência de cálculo presentes nos gráficos referem-se precisamente ao tempo que

demora a calcular a aproximação polinomial para um valor de entrada.

Para os resultados relativos à avaliação com segmentação, os valores binários representativos

do argumento presentes nos gráficos, referem-se a um valor dinâmico do argumento aproximado a

partir de zero, ou seja, para 3 bits equivale a uma aproximação polinomial de um valor no intervalo

[0,7]. Relativamente à avaliação sem segmentação, e uma vez que neste caso os resultados são

muito limitados, os valores do argumento são apresentados em decimal tanto para cos(x) como

para ex, sendo que no último caso é indicada a representação equivalente em bits.

Os resultados obtidos cobrem a análise para o método SRA e CRA para diferentes graus de

polinómios aproximantes que vão sendo mencionados para cada caso em análise.

A escolha do divisor para o cálculo da redução de argumento por redução aditiva, foi feita com

base em duas implementações diferentes. Foi testado um divisor iterativo, que devolve um bit do

resultado por ciclo de relógio, e um divisor que efectua o cálculo da divisão num ciclo apenas,

no entanto o atraso é muito superior ao caso anterior (relativo a um ciclo de relógio). Os resulta-

dos produzidos, após alguns testes cobrindo operandos com diferentes larguras de representação,

levaram à conclusão que tendo em conta as implementações feitas, obtém-se melhores resultados

com o multiplicador iterativo, uma vez que o número de bits a extrair da divisão é baixo (máximo

de 4 bits, dependendo da função e da largura do intervalo de aproximação) e assim o processo

completo de cálculo não fica condicionado pelo atraso do divisor. Obtiveram-se atrasos de cálculo

mais baixos em todos os ensaios levados a cabo para o divisor iterativo, pelo que esta foi a escolha

para a implementação.

4.2 Resultados obtidos

Nesta secção apresenta-se e analisam-se os resultados obtidos durante a realização deste tra-

balho. Todos os resultados obtidos presentes nos gráficos são igualmente válidos para o argumento

simétrico, ou seja, para o intervalo simétrico em torno de zero. A representação do argumento das

funções presentes nas figuras deste capítulo, corresponde à gama de valores da sua parte inteira,

sendo que a parte fraccionária é limitada pela precisão de cálculo imposta para cada caso.

4.2 Resultados obtidos 39

4.2.1 Implementação sem segmentação

A gama de x avaliada em ambas as funções, cos(x) e ex, para uma precisão de 16bits é menor

comparativamente aos outros requisitos de precisão avaliados uma vez que os resultados obtidos

para a área de implementação e atraso de cálculo eram muito elevados e portanto completamente

desenquadrados dos obtidos para os outros casos. Isto acontece porque neste caso especifico o

grau do polinómio é tão elevado que o consumo de recursos aumenta significativamente. Mais

ainda, a largura de representação binária dos operandos era tão elevada que levava a resultados

“catastróficos” das mesmas métricas. Assim sendo a análise para este caso em concreto é de-

sprezável.

As figuras 4.1 a 4.6 ilustram os resultados obtidos para o consumo de área e latência de cál-

culo para a função cos(x) com precisões de 8, 12 e 16 bits, para diferentes graus de polinómios

aproximantes. Na tabela 4.1 estão presentes os graus dos polinómios usados para cada caso.

CRA SRAprecisao/

argumento π 3π/2 2π π 3π/2 2π

2−8 3 3 3 5 5 62−12 4 4 4 5 6 72−16 5 5 7 8

Tabela 4.1: Grau dos polinómios usados na aproximação de cos(x), sem segmentação, para difer-entes precisões e intervalos de aproximação.

Podemos concluir da análise das figuras que a avaliação da função cos(x) para o método SRA

é muito limitada apresentando vantagem apenas para argumentos baixos até 2 bits (π) quando se

pretende uma optimização de área e de latência. Este resultado não é muito animador se tiver-

mos em conta que na aproximação pelo método CRA, o argumento é reduzido para o intervalo

[−π/4,π/4] que é apenas metade do intervalo até ao qual o método SRA se mostra vantajoso.

Uma análise mais cuidada demonstra que o método SRA, e dependendo dos requisitos métricos,

poderá apresentar vantagens em mais situações. Se houver uma preocupação de optimização dos

recursos ocupados este método é vantajoso para argumentos de 3 bits limitados no entanto ao

valor máximo de 3π/2 para precisões de cálculo de 8 e 12 bits, uma vez que o aumento do atraso

de cálculo não é substancial. No entanto, não se verifica o mesmo para uma precisão de 16 bits

porque embora o consumo de recursos seja também menor, a latência de cálculo é significativa-

mente maior sendo que seria uma vantagem apenas em situações pouco prováveis em que o atraso

de cálculo não é de todo uma preocupação.

Relativamente à função ex, obteve-se resultados mais favoráveis, nomeadamente no que diz

respeito aos recursos consumidos, face à função anterior, uma vez que esta tem um comportamento

mais linear em torno de zero. As figuras 4.7 a 4.12 ilustram os resultados obtidos para a função ex

40 Resultados

Figura 4.1: Área para cos(x) sem segmentaçãocom uma precisão de 8 bits.

Figura 4.2: Latência para cos(x) sem segmen-tação com uma precisão de 8 bits.

Figura 4.3: Área para cos(x) sem segmentaçãocom uma precisão de 12 bits.

Figura 4.4: Latência para cos(x) sem segmen-tação com uma precisão de 12 bits.

com precisões de 8, 12 e 16 bits para diferentes graus de polinómios aproximantes. Na tabela 4.2

estão presentes os graus dos polinómios usados para cada caso.

Podemos verificar que para todos os casos, a ocupação de recursos é substancialmente inferior

para o método SRA. Por outro lado, no que diz respeito ao atraso de cálculo, este método apenas

se revela vantajoso para argumentos até 2 bits. Se se pretender um equilíbrio entre o consumo

de recursos e o atraso de cálculo este método apresenta também vantagens quando se aproxima

a função para argumentos de 3 bits (limitados pelo valor 4) com requisitos de precisão de 12 e

principalmente 8 bits, pois nestes dois casos verifica-se um pequeno aumento do atraso de cálculo

face a uma diminuição muito significativa da área de implementação.

4.2 Resultados obtidos 41

Figura 4.5: Área para cos(x) sem segmentaçãocom uma precisão de 16 bits.

Figura 4.6: Latência para cos(x) sem segmen-tação com uma precisão de 16 bits.

CRA SRAprecisao/

argumento 3 bits 4 bits 5 bits 3 bits 4 bits 5 bits2−8 3 3 4 5 6 82−12 4 4 5 6 8 92−16 5 5 7 9

Tabela 4.2: Grau dos polinómios usados na aproximação de exp(x), sem segmentação, para difer-entes precisões e intervalos de aproximação.

Figura 4.7: Área para ex sem segmentação comuma precisão de 8 bits.

Figura 4.8: Latência para ex sem segmentaçãocom uma precisão de 8 bits.

Os resultados obtidos para ambas as funções na avaliação pelo método SRA sem segmen-

tação de intervalos são muito pobres, como seria de esperar, apresentando apenas vantagens para

42 Resultados

Figura 4.9: Área para ex sem segmentação comuma precisão de 12 bits.

Figura 4.10: Latência para ex sem segmentaçãocom uma precisão de 12 bits.

Figura 4.11: Área para ex sem segmentaçãocom uma precisão de 16 bits.

Figura 4.12: Latência para ex sem segmentaçãocom uma precisão de 16 bits.

intervalos de aproximação muito pequenos. Isto acontece porque desta forma é necessário recor-

rer a polinómios de grau elevado face ao método CRA. Assim sendo é absolutamente necessário

recorrer a segmentação de intervalos.

4.2.2 Implementação com segmentação

As figuras 4.13 a 4.18 ilustram os resultados obtidos para a função cos(x) com precisões de

8, 12 e 16 bits para polinómios de grau 3, 4 e 5 respectivamente. A gama do argumento coberta

para esta função não ultrapassa os 5 bits pois é suficiente para tirar as conclusões necessárias

relativas ao consumo de recursos e atraso de cálculo. Verifica-se que para toda a gama de entrada

4.2 Resultados obtidos 43

que foi avaliada, o método SRA é sempre vantajoso no que diz respeito ao atraso de cálculo. Isto

acontece porque como foi referido no capítulo 3, o uso de segmentação permite a aproximação

através de polinómios de grau baixo, e embora o método CRA também recorra a polinómios de

grau reduzido para efectuar o cálculo da aproximação polinomial, neste caso é necessário também

reduzir e reconstruir o argumento. A necessidade de implementação de um divisor neste método,

nomeadamente na etapa de redução de argumento, origina uma grande desvantagem no atraso

de cálculo uma vez que este operador devolve apenas um bit do resultado por ciclo de relógio,

e a largura do resultado vai depender da ordem de grandeza de k. Assim sendo, mesmo que

seja necessária uma representação mais alargada dos operandos para o método SRA, são precisos

menos ciclos de relógio para devolver o resultado. Na tabela 4.3 estão descritos para cada precisão

e intervalo de aproximação, o número de ciclos de relógio necessários para devolver o resultado

da aproximação para cada método, onde é notória a diferença entre cada um deles.

CRA SRAprecisao/

argumento 2 bits 3 bits 4 bits 5 bits 2 bits 3 bits 4 bits 5 bits2−8 12 13 14 15 6 6 6 62−12 14 15 16 17 8 8 8 82−16 16 17 18 19 10 10 10 10

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

No que diz respeito ao consumo de recursos, verifica-se que para uma precisão de 8 bits, o

método SRA revela-se vantajoso para argumentos até 3 bits, e para os outros requisitos de precisão

a vantagem do uso deste método fica-se por argumentos até 2 bits.

A discrepância existente entre os resultados obtidos para área e latência resulta da influência

da segmentação. Este método trás na maioria dos casos vantagens no que diz respeito ao atraso de

cálculo porque quanto maior for o número de segmentos usados para repartir o intervalo, menor

terá que ser o grau do polinómio que aproxima cada sub-intervalo sendo que o número de segmen-

tos não influencia a latência. No entanto, quantos mais segmentos forem usados param repartir o

intervalo, maior será a complexidade do hardware, uma vez que é necessário guardar em memória

todos os coeficientes dos polinómios respectivos a cada segmento, sendo que a partir de um de-

terminado ponto, o “alívio” de complexidade resultante de abdicar da redução do argumento será

superado pelo aumento de complexidade resultante da segmentação.

Verifica-se ainda, que para uma precisão de 16 bits, quando se aproxima uma função para um

argumento de 5 bits, o consumo de recursos “dispara” de forma desproporcional relativamente aos

outros casos. Isto acontece porque nestes termos, o número de bits necessário à representação dos

operandos aumenta consideravelmente.

As variações repentinas que se verificam nos resultados obtidos para a latência, resultam do

44 Resultados

número de multiplicadores que são usados para cada caso. A FPGA usada na síntese destes mode-

los, têm disponíveis 12 multiplicadores dedicados de 18x18 bits. Se os operandos forem superiores

a múltiplos de 18 bits é necessário recorrer a mais um multiplicador. Isto resulta em atrasos de

cálculo superiores pois existe um atraso substancial introduzido pelo uso de mais multiplicadores

para realizar um só cálculo.

Figura 4.13: Área para cos(x) com segmen-tação com uma precisão de 8 bits.

Figura 4.14: Latência para cos(x) com segmen-tação com uma precisão de 8 bits.

Figura 4.15: Área para cos(x) com segmen-tação com uma precisão de 12 bits.

Figura 4.16: Latência para cos(x) com segmen-tação com uma precisão de 12 bits.

As figuras 4.19 a 4.24 ilustram os resultados obtidos para a função ex com precisões de 8, 12

e 16 bits para polinómios de grau 2, 3 e 4 respectivamente. Pelas mesmas razões que a função

anterior, a gama do argumento coberta para esta função não ultrapassa os 3 bits. Neste caso a

gama de x avaliada é inferior devido ao comportamento da função. Para valores superiores a

4.2 Resultados obtidos 45

Figura 4.17: Área para cos(x) com segmen-tação com uma precisão de 16 bits.

Figura 4.18: Latência para cos(x) com segmen-tação com uma precisão de 16 bits.

3 bits, a função ex tem um comportamento fortemente não linear. Isto conduz à necessidade da

representação dos operandos com larguras muito elevadas, nomeadamente da sua parte inteira pois

à medida que x aumenta f (x)>> x. Assim, para valores superiores a 3 bits, os resultados obtidos

era desproporcionalmente superiores para o método de cálculo SRA não tendo qualquer interesse

a sua consideração. Através da análise das figuras conclui-se que mesmo para argumentos baixos

entre 2 e 3 bits, onde a não linearidade da função ainda não é tão acentuada, o aumento do consumo

de recursos resultante do método SRA é mais acentuado face ao método CRA. No entanto, e

pelas mesmas razões da função cos(x) o atraso de cálculo é sempre menor para o método SRA.

Assim sendo, o uso deste método é vantajoso para argumentos até 2 bits quando se pretende uma

optimização de área e latência e para argumentos até 3 bits quando se pretende uma optimização

do atraso de cálculo.

Até este ponto, conclui-se que a avaliação das funções por aproximações polinomiais recor-

rendo a segmentação de intervalos para as funções cos(x) e ex pelo método SRA, é muito vantajoso

no que respeita à latência de cálculo. No entanto, relativamente ao consumo de recursos apre-

senta limitações traduzindo vantagens apenas para argumentos de 2 e 3 bits. Nestes termos, o uso

deste método será mais indicado para implementações que necessitem de calcular as aproximações

destas funções optimizando o tempo de cálculo em detrimento, em alguns casos, do aumento dos

recursos ocupados. Assim, a escolha do método a aplicar depende inteiramente dos requisitos da

implementação. Interessa ainda referir que relativamente à função ex, o cálculo pelo método SRA

é vantajoso tanto a nível do consumo de recursos como do atraso de cálculo para valores de x < 0,

uma vez que esta função é fortemente linear no intervalo [−∞,0]. Assim pode-se aproximar a

função recorrendo a muito poucos segmentos e com polinómios de grau baixo.

46 Resultados

Figura 4.19: Área para ex com segmentaçãocom uma precisão de 8 bits.

Figura 4.20: Latência para ex com segmen-tação com uma precisão de 8 bits.

Figura 4.21: Área para ex com segmentaçãocom uma precisão de 12 bits.

Figura 4.22: Latência para ex com segmen-tação com uma precisão de 12 bits.

Os resultados obtidos para as funções cos(x) e ex, estão sumariados em três tabelas ( 4.4, 4.5

e 4.6) que ilustram a percentagem de ganho do método de aproximação polinomial SRA face ao

método CRA, para as as três precisões de cálculo analisadas, 8, 12 e 16 bits, respectivamente.

Considere-se agora as funções log(x) e√

x. Estas funções têm comportamentos muito semel-

hantes em torno de zero. A avaliação desta função pelo método SRA apresenta implicações muito

grandes mesmo para argumentos pequenos em torno de zero e precisões baixas. Como se pode

ver pelas figuras 4.25 e 4.26 que representa a função log(x) e√(x) no intervalo [0,10], denota-se

uma forte não linearidade em torno de zero, pelo que as conclusões obtidas para uma são válidas

para a outra. Ir-se-á então avaliar a função log(x).

4.2 Resultados obtidos 47

Figura 4.23: Área para ex com segmentaçãocom uma precisão de 16 bits.

Figura 4.24: Latência para ex com segmen-tação com uma precisão de 16 bits.

cos(x) ex

argumento 2 bits 3 bits 4 bits 5 bits 2 bits 3 bitsárea 46.7 3.85 -69.9 -129 55.2 -49.4

latência 49.8 28.3 26.0 41.7 65.9 39.6

Tabela 4.4: Percentagem de ganho da área de implementação e latência de cálculo, da aproximaçãopolinomial das funções cos(x) e ex para uma precisão de cálculo de 8 bits pelo método SRA faceao método CRA.

cos(x) ex

argumento 2 bits 3 bits 4 bits 5 bits 2 bits 3 bitsárea 8.60 -34.0 -97.9 -195 25.0 -35.4

latência 8.40 10.9 20.7 22.4 36.2 23.6

Tabela 4.5: Percentagem de ganho da área de implementação e latência de cálculo, da aproximaçãopolinomial das funções cos(x) e ex para uma precisão de cálculo de 12 bits pelo método SRA faceao método CRA.

Se se pretender aproximar a função log(x) com uma precisão de 8 bits no intervalo [0.001,0.5],

para o método de aproximação CRA, a aproximação requer um polinómio de grau 2 com coefi-

cientes da ordem de grandeza de apenas 1 bit para a parte inteira. Por outro lado, a aproximação

pelo método SRA, recorrendo a segmentação de intervalos (caso contrário o grau do polinómio

teria que ser incomportavelmente grande), para um polinómio de grau 2, os coeficientes que o

caracterizam são da ordem de grandeza de 105. Neste caso seriam necessários 16 bits, apenas

para representar a parte inteira dos coeficientes. Uma vez que a redução de argumento neste caso

apenas consiste numa operação de deslocação e a reconstrução traduz-se numa multiplicação, a

48 Resultados

cos(x) ex

argumento 2 bits 3 bits 4 bits 5 bits 2 bits 3 bitsárea 21.1 -56.5 -89.0 -679 22.4 -42.4

latência 20.9 17.9 13.7 4.20 28.6 15.9

Tabela 4.6: Percentagem de ganho da área de implementação e latência de cálculo, da aproximaçãopolinomial das funções cos(x) e ex para uma precisão de cálculo de 16 bits pelo método SRA faceao método CRA.

Figura 4.25: Gráfico da função log(x) no inter-valo [0,10].

Figura 4.26: Gráfico da função√

x no intervalo[0,10].

diferença entre o número de ciclos de relógio necessários para efectuar o cálculo da aproximação

polinomial para um determinado x, para ambos os métodos, CRA e SRA, seria de apenas dois

ciclos, em contraste com as funções cos(x) e ex que devido ao uso do divisor demoram em média

quase o dobro no caso CRA. Posto isto, facilmente se conclui que relativamente ao atraso de cál-

culo o método SRA não trás quaisquer vantagens pois o período de operação neste caso é muito

superior ao método CRA devido ao número de bits necessários para representar os operandos.

Mesmo para a baixa precisão considerada e para o intervalo de aproximação muito reduzido o

número de bits necessários para representar a parte inteira dos coeficientes pelo método SRA é 16

vezes maior que para o método CRA. Isto traduz-se também num enorme aumento do consumo de

recursos. Estas conclusões foram sustentadas precisamente numa implementação com os requisi-

tos antes mencionados e podem ser suportadas com a análise da função ex que apresenta o mesmo

comportamento (a mesma não linearidade acentuada) mas neste caso para argumentos superiores

3 bits como se pode ver pela figura 4.27.

No entanto, recorrendo ao método SRA para aproximar a função log(x) a partir de 0.5, que é

4.2 Resultados obtidos 49

Figura 4.27: Gráfico da função ex no intervalo [0,10].

precisamente o limite mínimo do intervalo normalizado, trás grandes vantagens à imagem do que

acontece com a função ex para valores de x < 0, uma vez que que nesta gama de valores a função

é fortemente linear.

Assim se conclui que a avaliação das funções elementares log(x) e√

x por aproximações

polinomiais pelo método SRA não trás vantagens de aplicação em sistemas onde na maior parte

das vezes é requerida a aproximação de funções num sub-intervalo que contém a origem.

Alguns resultados obtidos por outros autores, nomeadamente apresentados em [15], ilustram

semelhanças respeitantes ás conclusões de ambos os métodos, para diferentes comportamentos

das funções, mais concretamente no que diz respeito à linearidade das mesmas.

50 Resultados

Capítulo 5

Conclusão

5.1 Conclusões

Neste trabalho investigaram-se as vantagens de um método alternativo de cálculo de funções

elementares, baseado em aproximações polinomiais, no âmbito da implementação em dispositivos

reconfiguráveis do tipo FPGA. Mais concretamente, avaliou-se o impacto no consumo de recur-

sos e atraso de cálculo face ao método tradicional com redução de argumento (CRA). O método

proposto, SRA, consistiu em aproximar funções através de polinómios no intervalo completo de

aproximação, abdicando assim das etapas de redução e consequente reconstrução do argumento

que caracterizam a abordagem.

Como forma de optimização do processo de cálculo para garantir melhores resultados, recorreu-

se à segmentação de intervalos que embora traga vantagens para ambos os métodos de aproxi-

mação, o seu impacto é mais acentuado no método SRA aqui proposto. Isto acontece porque

a segmentação de intervalos é aplicada única e exclusivamente ao cálculo do polinómio aproxi-

mante, e neste sentido todo o processo de avaliação referente ao método SRA é optimizado, em

contraste com o método CRA que envolve ainda as etapas de redução e reconstrução do argumento

que não beneficiam da segmentação.

A implementação de ambos os métodos exigiu uma análise cuidada e exaustiva de forma a

minimizar as métricas em causa, que dependem de vários factores, nomeadamente da largura de

representação dos operandos, do grau do polinómio aproximante e do número de segmentos que

compõem o intervalo de aproximação. Os dois últimos factores são dependentes um do outro uma

vez que a implementação da segmentação tem como objectivo principal a diminuição do grau dos

polinómios aproximantes que é sem qualquer dúvida o maior entrave no âmbito da implementação.

Para tal, foi necessário determinar um equilíbrio entre ambos. Optou-se, após vários testes e

considerações, por calcular o número de segmentos necessários para cada caso, com base no grau

do polinómio mínimo que aproxima a função no intervalo normalizado de forma a cumprir a

precisão requerida, resultando assim numa optimização conjunta entre área ocupada e latência de

51

52 Conclusão

cálculo. A metodologia adoptada para este caso, bem como para a optimização da largura dos

operandos, consistiu numa abordagem de tentativa e erro.

Relativamente à arquitectura proposta, ambos os métodos de aproximação foram descritos

recorrendo a uma máquina de estados, uma vez que o cálculo de aproximações polinomiais

desenrola-se segundo um processo recursivo composto maioritariamente por multiplicações seguidas

de adições, tal como se pode concluir da análise da expressão que compõe um polinómio, ilustrada

no capítulo 2. Como forma de optimização da arquitectura, nomeadamente da área ocupada, a

implementação foi estruturada de forma a resultar em partilha de recursos, mais precisamente na

partilha de um bloco multiplicador/somador que realiza uma multiplicação seguida de uma adição,

por ciclo de relógio, que como foi referido são precisamente os operadores com maior peso em

termos das métricas de implementação utilizadas.

Cumprido o objectivo do trabalho, conseguiu-se delimitar em que casos e em que circunstân-

cias é vantajoso abdicar das etapas de redução e reconstrução de argumento para diversas funções

resultando algumas conclusões, descritas seguidamente.

Relativamente à segmentação de intervalos, concluiu-se que a sua aplicação é absolutamente

necessária na medida em que os resultados obtidos sem recorrer a este processo demonstram uma

limitação muito grande do método de cálculo SRA devido ao inevitável e desproporcional aumento

do grau do polinómio aproximante com o aumento da largura do intervalo de aproximação para

satisfazer um determinado requisito de precisão. Estes resultados verificam-se mesmo para pre-

cisões baixas e intervalos de aproximação pequenos em torno de zero. Desta forma, o método de

aproximação SRA não é vantajoso na aplicação em sistemas dedicados onde embora se pretenda

avaliar funções em sub-intervalos do seu domínio, estes sub-intervalos são na maior parte dos

caso superiores aos que permitem optimização de métricas pelo método SRA sem segmentação de

intervalos.

A implementação do processo de segmentação de intervalos permitiu obter resultados mais

favoráveis embora apresente também algumas limitações. Zonas em que as funções apresentam

fortes não-linearidades, o cálculo de aproximações polinomiais pelo método SRA não resulta em

qualquer vantagem. Isto verifica-se principalmente devido à necessidade de recorrer a polinómios

de grau mais elevado para cumprir o requisito de precisão ou por outro lado segmentar o intervalo

em muitas secções que se traduz de uma maneira ou de outra num aumento muito significativo

da área de implementação face ao método CRA. Isto é notório nomeadamente para as funções

log(x) e√

x em torno de zero e para a função ex para argumentos superiores a 3 bits. Isto acontece

porque, tal como foi referido no capítulo 3, o aumento do grau do polinómio traduz-se em mais

coeficientes, o que implica por um lado o aumento da complexidade do hardware e por outro o

aumento do atraso de cálculo por ser necessário realizar mais operações. Por sua vez, o aumento

do número de segmentos que dividem o intervalo, obriga a guardar mais valores em memória que

se traduz num aumento da área necessária. Os resultados obtidos para regiões mais lineares das

5.1 Conclusões 53

funções, indicam que é vantajoso, até uma certa gama de valores, abdicar destas duas etapas, em

particular para valores superiores a 0.5 para as funções log(x) e√

x e para valores de x < 0 que se

estendem para x << 0 para a função ex, embora o estudo relativo a estes casos não tenha sido apro-

fundado por não apresentar grande interesse. Relativamente aos resultados obtidos para a função

ex na gama de valores cobertos, concluiu-se que o método de cálculo SRA é vantajoso no que

diz respeito ao atraso de cálculo, no entanto apenas apresenta vantagens relativas ao consumo de

recursos para argumentos inferiores a 3 bits, sendo que a escolha do método a aplicar depende dos

requisitos da implementação. Os resultados obtidos para a função trigonométrica cos(x) demon-

stram a forte dependência desta função da segmentação de intervalos, uma vez que é uma função

periódica que revela fortes não linearidades no seu período e portanto em todo o seu domínio.

A avaliação desta função pelo método SRA apresenta grandes vantagens, nomeadamente no que

diz respeito ao atraso de cálculo, que se estende a toda a gama de valores coberta e que é válida

para intervalos simétricos. Isto resulta em grande parte da necessidade de implementar um divisor

no cálculo pelo método CRA que é um operador lento, sendo necessários mais ciclos de relógio

para realizar a aproximação para este caso. Mas mesmo para esta função, a escolha do método

a aplicar, tal como acontece para a função ex, depende dos requisitos da implementação uma vez

que a ocupação de recursos resultante do método de cálculo SRA é menor apenas para gamas do

argumento baixas, dependendo da precisão requerida.

Terminado o trabalho, conclui-se que para zonas fortemente não lineares das funções, a so-

brecarga de cálculo introduzida pela método SRA dá origem a elevados consumos de recursos

de implementação bem como atrasos de cálculo mais elevados, resultantes em grande parte pela

necessidade de aumentar a largura da representação dos operandos, não apresentando portanto

quaisquer vantagens face ao método tradicional. Para zonas mais lineares, dependendo da gama

de aproximação, o método SRA demonstra grandes vantagens sobretudo a nível da latência de

cálculo na medida em que neste caso o número de ciclos de relógio necessários para completar o

cálculo da aproximação polinomial é substancialmente inferior face ao método CRA. Isto deve-se

ao uso de um divisor, necessário para a realização da redução do argumento.

Existem muito poucos trabalhos que exploram o estudo de aproximações de funções ele-

mentares sem recorrer às etapas de redução e reconstrução do argumento, nomeadamente em [15]

são apresentados alguns resultados relativos também ao método de aproximação SRA, mas neste

caso através de aproximações com tabelas e polinómios. No entanto, não foram encontrados quais-

quer dados referentes a estudos sobre a aplicação de segmentação de intervalos ao cálculo através

de aproximações polinomiais. Neste sentido, este método de optimização aplicado ao cálculo por

aproximações polinomiais, ilustra o aspecto inovador deste trabalho.

54 Conclusão

5.2 Trabalho Futuro

Propõe-se como trabalho futuro, explorar um pouco mais este método de cálculo através de

aproximações por tabelas com polinómios levado a cabo em [15], e avaliar este método também

recorrendo a aproximações racionais, que embora envolvam a implementação de divisores, que

são operadores que traduzem grande sobrecarga de cálculo, requer aproximações com polinómios

de grau mais baixo que como se concluiu deste trabalho, apresenta uma mais valia para o método

de aproximação sem redução de argumento.

Relativamente ao trabalho aqui levado a cabo, propõe-se estender a avaliação a mais funções

elementares e, uma abordagem mais trabalhosa mas que embora possa traduzir melhores resulta-

dos no que diz respeito à segmentação de intervalos. Mais concretamente, não centrar a escolha do

número de segmentos que compõem o intervalo de aproximação numa perspectiva de optimizar

ambas as métricas de uma maneira geral (para todos os requisitos sob avaliação), mas sim caso a

caso. Quer isto dizer que a escolha do número de segmentos, poderá ser feita individualmente para

cada caso em que se pretenda uma determinada precisão de cálculo para um intervalo específico,

e optimizar essa escolha de formas diferentes para diferentes requisitos.

Referências

[1] Jean-Michel Muller. Elementary functions: algorithms and implementation. BirkhauserBoston, Inc., NJ, USA, segunda edição, 1997.

[2] O. Mencer, W. Luk, e H. Fu. Optimizing hardware function evaluation. Em Proceedingsof Swiss Federal Institute of Technology (ETH), Architecture of Computing Systems, Zurich,Switzerland, 2007.

[3] Dong-U Lee, W. Luk, J. Villasenor, e P. Y. K. Chenung. Hierarchical segmentation schemesfor function evaluation. Em Proceedings of the IEEE International Conference on Field-Programmable Technology (FPT’2003), páginas 92–99, 2003.

[4] R. G. Selfridge. Approximations with least maximum error. Em Pacific Journal of Mathe-matics, páginas 247–255, 1953.

[5] M. Daumas, C. Mazenc, X. Merrheim, e J.-M. Muller. Modular range reduction: a new al-gorithm for fast and accurate computation of the elementary functions. Journal of UniversalComputer Science, 1(3):162–175, 1995.

[6] Jyri Ylostalo. Function approximation using polynomials. Signal Processing Magazine,IEEE, 23:99–102, 2006.

[7] Jun Cao, Belle W. Y. Wei, e Jie Cheng. High-performance architectures for elementaryfunction generation. Em Proceedings of the 15th IEEE Symposium on Computer Arithmetic,páginas 136–144, Washington, DC, USA, 2001. IEEE Computer Society.

[8] Shmuel Gal. Computing elementary functions: A new approach for achieving high accuracyand good performance. Em Proceedings of the Symposium on Accurate Scientific Computa-tions, páginas 1–16, London, UK, 1986. Springer-Verlag.

[9] J. G. Ganssle. A Guide to Approximations. The Ganssle Group,http://www.ganssle.com/approx/approx.pdf, 2001.

[10] J. Detrey e F. de Dinechin. Floating point trigonometric functions for FPGAs. Em Field-Programable Logic and Applications, páginas 29–34. LIP, ENS-Lyon, IEEE, 2007.

[11] Romain Michard, Arnaud Tisserand, e Nicolas Veyrat-Charvillon. FPGA approximationswith 3-bit coefficients and low-precision estimations of the powers of x. Em Proceedings ofthe 2005 IEEE International Conference on Application-Specific Systems, Architectures andProcessors, páginas 334–342, Greece, 2005. IEEE Computer Society.

[12] E. L. Oberstar. Fixed-Point Representation and Fractional Math. Oberstar Consulting,http://www.superkits.net/whitepapers.htm, 2007.

55

56 REFERÊNCIAS

[13] Dong-U Lee e John D. Villasenor. A bit-width optimization methodology for polynomial-based function evaluation. IEEE Transactions on Computers, 56(4):567–571, 2007.

[14] Shinobu Nagayama, Tsutomu Sasao, e Jon T. Butler. Design method for numerical functiongenerators based on polynomial approximation for FPGA implementation. Em Proceedingsof the 10th Euromicro Conference on Digital System Design Architectures, Methods andTools, páginas 280–287, Washington, DC, USA, 2007. IEEE Computer Society.

[15] Dong-U Lee, Altaf Abdul Gaffar, Oskar Mencer, e Wayne Luk. Adaptive range reductionfor hardware function evaluation. Em Proceedings of the IEEE Int Conference on Field-Programmable Technology, páginas 169–176, 2003.