Aproximação de funções elementares sem redução de ... · Lista de Figuras 2.1 Evolução do...
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
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
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
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
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
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
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
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.
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.
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.