• Nenhum resultado encontrado

3.2 Considerações de implementação

3.2.3 Segmentação de intervalos

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

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

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

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

26 Implementação

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

Figura 3.3: Formas de divisão de segmentos.

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

f1(x) = −x

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

f3(x) =p−ln(x)

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

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

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

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

3.2 Considerações de implementação 27

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

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

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

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

28 Implementação

3.2.3.1 Considerações

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

3.2.3.2 Abordagem

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

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

3.3 Distribuição de segmentos 29

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

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

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

3.3

Distribuição de segmentos

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

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 normalizado3.4. Como foi referido na secção3.3, o método de segmentação adoptado consiste em separar o intervalo de aproximação em secções que dependem da evolução temporal da função, ou seja, segmentação não linear. No entanto, o processo de segmentação implementado é um pouco diferente da Segmentação Hierárquica. De forma a optimizar o número de segmentos usados, optou-se por calcular os segmentos com uma precisão igual à precisão de cálculo con- siderada, não estando assim os incrementos entre secções limitados (tal como na segmentação hierárquica) a valores de potência de dois. Depois de extraídos os segmentos neste formato, os valores que limitam cada secção foram guardados e através de um comparador é feito o reencamin- hamento do processo de cálculo para o segmento correcto, ou seja, para o polinómio que aproxima a função nesse segmento. Embora assim se obtenha uma optimização do número de segmentos e da quantidade de recursos consumidos, este processo apenas foi possível na medida em que se aproxima funções em intervalos pequenos e para precisões baixas, caso contrário o consumo de recursos e a dificuldade de implementação seriam incomportáveis. Nas tabelas3.2e3.3, podemos ver os valores do número de segmentos calculados para cada intervalo e precisão considerada para as funções cos(x) e ex respectivamente. Relativamente ás funções log(x) e√xeste assunto será apenas abordado no capítulo 5. Para a função cos(x), a aproximação CRA não necessita de seg- mentação, pois como foi referido no capítulo anterior a fase de reconstrução é realizada com base na equivalência entre quadrantes, deste modo o erro de aproximação não aumenta com o intervalo

3.4 Arquitectura 31

de aproximação.

precis˜ao/argumento 2 bits 3 bits 4 bits 5 bits

2−8 (grau 3) 2 4 8 16

2−12 (grau 4) 2 4 9 17

2−16 (grau 5) 2 5 10 19

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

CRA SRA

precis˜ao/argumento 2 bits 3 bits 2 bits 3 bits

2−8 (grau 2) 2 10 7 43

2−12 (grau 3) 2 6 5 23

2−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 figuras3.6,3.7, 3.8e 3.9apresentam 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 (figuras3.7,3.8 e3.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:

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 do método SRA com segmentação de intervalos.

Figura 3.9: Arquitectura de implementação do mé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 figura3.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 figura3.11que 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

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

Documentos relacionados