Professional Documents
Culture Documents
IMPLEMENTAO DE UMA TRANSFORMADA RPIDA DE FOURIER PARA COMPUTAO RECONFIGURVEL DE ALTO DESEMPENHO
TRABALHO DE GRADUAO
IMPLEMENTAO DE UMA TRANSFORMADA RPIDA DE FOURIER PARA COMPUTAO RECONFIGURVEL DE ALTO DESEMPENHO
por
Trabalho de Graduao apresentado ao Curso de Cincia da Computao da Universidade Federal de Santa Maria (UFSM, RS), como requisito parcial para a obteno do grau de Bacharel em Cincia da Computao
Orientador: Profa Dra Andrea Schwertner Charo Co-orientador: Dr. Haroldo Fraga de Campos Velho
IMPLEMENTAO DE UMA TRANSFORMADA RPIDA DE FOURIER PARA COMPUTAO RECONFIGURVEL DE ALTO DESEMPENHO elaborado por Tiago de Albuquerque Reis como requisito parcial para obteno do grau de Bacharel em Cincia da Computao
AGRADECIMENTOS
Agradeo inicialmente minha famlia, em especial: aos meus avs Nildo e Gladir, que foram praticamente meus segundos pais; minha madrinha Nilda, uma das maiores culpadas (se no a maior) por eu fazer computao ao me presentear meu primeiro computador, e tambm por todo seu carinho e apoio sempre que precisei; ao meu irmo, Lucas, por me mostrar o quo mais tranqila e chata seria a vida de lho nico; ao meu padrinho Paulo, pelo seu apoio e por (juntamente com meu av) me fazer ser colorado; e por ltimo e mais importante, minha me que simplesmente foi meu maior exemplo de vida. Agradeo minha orientadora Andrea Charo, por me despertar interesse em ser pesquisador (e professor) e, principalmente, pela enorme dedicao e pacincia na minha iniciao como tal. Ao meu co-orientador Haroldo de Campos Velho, pela oportunidade de utilizar o INPE nesse trabalho e por sua orientao. banca avaliadora, Benhur Stein e Giovani Baratto, por sua grande contribuio para a melhoria deste trabalho. Agradeo tambm a todos os professores do curso que atravs de bons e maus exemplos, ajudaram na minha formao. minha namorada, Thiely, que apesar da falta de pacincia nos apertos de nal de semestre, sempre esteve ao meu lado, amenizou os momentos difceis e melhorou ainda mais os bons momentos. Agradeo meus colegas por formarem uma turma sem igual e me ajudarem a agentar a faculdade. Em especial ao Cristiano, Eduardo, Leandro, Mrcio, Matheus e Rodolfo que alm de colegas foram grandes amigos nessa jornada. EDF para sempre. Tambm a todos os membros do LSC, que ajudaram na minha iniciao cientca. Agradeo o Centro de Processamento de Dados da UFSM pela oportunidade de estgio e, em especial, a toda a Diviso de Redes e Sistemas Bsicos (antigo Suporte) pelos ensinamentos e companheirismo. Agradeo tambm a todos os meus amigos que de uma forma ou de outra me ajudaram a chegar at aqui.
Tem gente que gasta seu tempo com compras, eu gasto meu tempo pirando nos sons da oresta. X ISPA D IVINA
RESUMO
Trabalho de Graduao Curso de Cincia da Computao Universidade Federal de Santa Maria IMPLEMENTAO DE UMA TRANSFORMADA RPIDA DE FOURIER PARA COMPUTAO RECONFIGURVEL DE ALTO DESEMPENHO Autor: Tiago de Albuquerque Reis Orientador: Profa Dra Andrea Schwertner Charo Co-orientador: Dr. Haroldo Fraga de Campos Velho Local e data da defesa: Santa Maria, 1 de fevereiro de 2008. A computao recongurvel uma abordagem de desenvolvimento de sistemas em que a aplicao dene a estrutura do processador. Essa abordagem vem ganhando espao na computao de alto desempenho, pois permite criar sistemas hbridos implementados como uma combinao de hardware e software, apresentando desempenho superior ao de sistemas implementados unicamente em software. Neste trabalho, tem-se como objetivo a implementao de uma transformada rpida de Fourier para possvel utilizao em computao recongurvel. Essa implementao pode ser usada para aumentar o desempenho de aplicaes que utilizem esse mtodo numrico. Este trabalho se faz importante por explorar este novo paradigma de computao de alto desempenho e, ao mesmo tempo, fazer com que a aplicaes aproveitem melhor os recursos de hardware disponveis em um computador hbrido Cray XD1, equipado com processadores recongurveis do tipo FPGA (Field-programmable Gate Array). Para tal, deciciu-se implementar em FPGA um algoritmo que calcula uma transformada rpida de Fourier por esse algoritmo constituir um ncleo computacional bastante utilizado em diversas aplicaes na rea de meteorologia. Essa implementao foi simulada e apresentou resultados satisfatrios em nmero de ciclos de relgio necessrios para realizar a funo.
Palavras-chave: FPGA, transformada rpida de Fourier, computao recongurvel, computao de alto desempenho.
ABSTRACT
Graduation Work Graduation Program in Computer Science Federal University of Santa Maria IMPLEMENTATION OF A FAST FOURIER TRANSFORM FOR HIGH PERFORMANCE RECONFIGURABLE COMPUTING Author: Tiago de Albuquerque Reis Advisor: Profa Dra Andrea Schwertner Charo Coadvisor: Dr. Haroldo Fraga de Campos Velho Recongurable computing is an approach to system design where the application denes the processor structure. This approach is useful for high performance computing, allowing the creation of hybrid systems as a combination of hardware and software, presenting a higher performance than software-only implementations. This work has the goal of implementing a fast Fourier transform for possible use in recongurable computing. This implementation can be used to increase the performance of applications that make use of such numerical method. This work is important for exploring this new high performance paradigm and, at the same time, make applications use more efciently the hardware resources available in a Cray XD1 supercomputer, equipped with FPGA (Field-programmable Gate Array) recongurable processors. The fast Fourier transform algorithm was chosen because it is a computational kernel used in several meteorological applications. This implementations was simulated and presented a satisfactory number of clock cycles to execute this function.
Keywords: FPGA, fast Fourier transform, recongurable computing, high performance computing.
LISTA DE FIGURAS
Figura 2.1 Arquitetura de FPGA genrica. Fonte: (MAXFIELD, 2004) . . . . . . . . . . 15 Figura 2.2 Elementos de um bloco lgico programvel. Fonte: (MAXFIELD, 2004) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Figura 3.1 Figura 3.2 Figura 3.3 Figura 3.4 Figura 4.1 Figura 4.2 Figura 4.3 Figura 4.4 Operao de borboleta - DIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operao de borboleta - DIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grafo do algoritmo radix-2 por decimao no tempo . . . . . . . . . . . . . . . . . Grafo do algoritmo radix-2 por decimao na freqncia . . . . . . . . . . . . . Viso lgica do chassis do XD1. Fonte: (CRAY, 2005a) . . . . . . . . . . . . . . Conexes do FPGA. Fonte: (CRAY, 2005a) . . . . . . . . . . . . . . . . . . . . . . . . . Topo de um projeto HDL para o Cray XD1. Fonte: (CRAY, 2005a) . . . RapidArray Transport Core. Fonte: (CRAY, 2005b) . . . . . . . . . . . . . . . . . 21 21 22 23 24 25 28 29 31 32 32 33 34 34 35 36 37 38 38 39
Figura 5.1 Portas do mdulo que calcula o fator twiddle . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.2 Portas do mdulo calcula a borboleta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.3 Arquitetura da borboleta implementada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.4 Arquitetura da FFT implementada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.5 Algoritmo FFT implementado em VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.6 Resultado obtido em simulao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.7 Resultado obtido em programa de alto nvel . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.8 Portas utilizadas do mdulo RapidArray Transport Client . . . . . . . . . . . . Figura 5.9 Estrutura dos records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.10 Exemplo de requisio via hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.11 Portas do mdulo FFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.12 Arquitetura implementada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LISTA DE TABELAS
Tabela 3.1 Exemplo de ordenao por bit-invertido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Tabela 5.1 Ciclos de relgio necessrios para calcular a FFT . . . . . . . . . . . . . . . . . . . . 40
API DIF DIT ESL FFT FPGA HDL IEEE IP LUT QDR RAM SRAM VHDL
Application Programming Interface Decimation-in-frequency Decimation-in-time Eletronic System Level Fast Fourier Transform Field-programmable Gate Array Hardware Description Language Institute of Electrical and Electronic Engineering Intellectual Property Lookup Table Quad Data Rate Random Access Memory Static Random Access Memory VHSIC Hardware Description Language
SUMRIO
INTRODUO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 14 14 15 16 16 17 18 19 19 19 19 20 20 21 24 24 25 25 26 26 26 27 28 30 30 30 33 35 38
2 COMPUTAO RECONFIGURVEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Programao de FPGAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 Ferramentas ESL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3 Ambiente de programao escolhido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 TRANSFORMADA DE FOURIER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Introduo transformada de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Contnua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Discreta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Transformada rpida de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Algoritmos radix-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Outros algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 CRAY XD1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Interconexo RapidArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.2 Recursos de memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Programando o Cray XD1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 FPGA Control Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 Operaes administrativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.3 Transferncia de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Congurando o FPGA do XD1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 IMPLEMENTAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Implementao da operao borboleta em VHDL . . . . . . . . . . . . . . . . . . . . . . . 5.3 Implementao da FFT em VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Conectando a FFT nos mdulos da Cray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Avaliao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
CONCLUSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
REFERNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
12
1 INTRODUO
A computao recongurvel um ramo emergente na computao de alto desempenho que utiliza processadores especiais, ditos recongurveis, cujos circuitos so denidos pelo algoritmo a ser executado. Sua utilizao em ambientes de alto desempenho geralmente se d em sistemas hbridos implementados em uma combinao de hardware e software. Essa abordagem tem se mostrado eciente, pois explora nveis adicionais de paralelismo (PETERSON; SMITH, 2001). Por si s, a computao recongurvel tem mostrado speed-ups signicativos em relao a implementaes somente em software (LEVINE, 1999). Como exemplo de dispositivo recongurvel podemos citar o Field-programmable Gate Array (FPGA), dispositivo semi-condutor com blocos lgicos e interligaes programveis. Os blocos lgicos, tambm chamados clulas lgicas, podem ser programados para realizar desde simples funes lgicas at funes matemticas complexas. A vantagem da utilizao de FPGAs se d pela possibilidade de alteraes no prprio design do processador, ao invs de utilizar processadores programveis por software (PETERSEN, 1995). Em arquiteturas de alto desempenho, uma tendncia a construo de sistemas que combinam processadores tradicionais e processadores recongurveis. Nestes casos, as aplicaes precisam ser adaptadas para tirar proveito do hardware recongurvel. Para evitar o porte total de uma aplicao para FPGA, que uma operao onerosa, pode-se implementar em hardware apenas certos ncleos computacionais que consomem grande parte do tempo de processamento e so empregados em diferentes aplicaes. Um exemplo deste tipo de operao a transformada rpida de Fourier, que est presente em diversas aplicaes na rea de meteorologia. Uma transformada rpida de Fourier (Fast Fourier Transform - FFT) um algoritmo eciente para calcular a transformada discreta de Fourier e sua inversa. A FFT revo-
13
lucionou o uso de polinmios trigonomtricos interpolatrios, organizando o problema de forma que o nmero de pontos usados pode ser facilmente fatorado em potncias de dois (BURDEN; FAIRES, 1997). Esse mtodo de grande importncia para vrias aplicaes, como resoluo de equaes diferenciais parciais e multiplicao de inteiros grandes (COOLEY; TUKEY, 1965). O principal objetivo deste trabalho implementar uma transformada rpida de Fourier em um processador recongurvel. Essa transformada rpida de Fourier poder ser aplicada no modelo meteorolgico DYNAMO (VELHO; CLAEYSSEN, 1992; LYNCH; Ireland Meteorological Service, 1984), em uso no Instituto Nacional de Pesquisas Espaciais (INPE). Com isso, espera-se melhorar o desempenho de aplicaes meteorolgicas que tm esse mtodo numrico como ncleo computacional, fazendo com que ele execute no FPGA. A metodologia de desenvolvimento deste trabalho compreende um estudo aprofundado da transformada rpida de Fourier, seus algoritmos e diculdades de implementao. Alm disso, necessria uma familiarizao com a programao para FPGAs e seus ambientes de desenvolvimento, para ento implementar, testar e simular a transformada rpida de Fourier em hardware. O restante deste documento est organizado da seguinte forma: no captulo 2 apresentase uma reviso sobre computao recongurvel, processadores recongurveis e congurao de FPGAs; no captulo 3 descreve-se a transformada de Fourier, suas variaes e algoritmos. No captulo 4 apresenta-se o Cray XD1 e seus detalhes de programao e congurao. Por m, no captulo 5 descreve-se a implementao e apresenta-se uma avaliao da implementao proposta.
14
2 COMPUTAO RECONFIGURVEL
Este captulo apresenta uma reviso de conceitos e tecnologias para computao recongurvel. Inicialmente apresenta-se uma breve introduo a este paradigma e, em seguida, discute-se FPGAs e sua utilizao no contexto da computao recongurvel. Por m, apresenta-se uma introduo programao de FPGAs, mostrando as opes e ferramentas para esse m.
2.1 Introduo
Computao recongurvel um paradigma de computao que combina o alto desempenho do hardware com a exibilidade do software utilizando processadores recongurveis (TODMAN et al., 2005). Essa abordagem tem como objetivo preencher a lacuna entre o hardware e o software, alcanando assim um desempenho maior que o software enquanto mantm um nvel de exibilidade maior que o hardware (COMPTON; HAUCK, 2002). Na computao de alto desempenho, a utilizao de computao recongurvel vantajosa pela possibilidade de explorar mltiplos tipos e nveis de paralelismo (PETERSON; SMITH, 2001). O conceito de computao recongurvel foi proposto na dcada de 1960 por Gerald Estrin, cuja idia era ter um arranjo de processadores recongurveis controlados por um processador tradicional. Nessa arquitetura, o processador conguraria o hardware recongurvel para executar uma determinada tarefa e, assim que esse terminasse o processamento, o reconguraria para outra tarefa (ESTRIN et al., 1963). Vrias tentativas de se criar computadores recongurveis apareceram nas dcadas de 1980 e 1990, mas no obtiveram sucesso por limitaes de tecnologia. At que em 1991 surgiu o primeiro computador recongurvel, o Algotronix CHS2X4 (KEAN, 2007). Processadores recongurveis somente se rmaram comercialmente com o FPGA, inventado
15
2.2 FPGA
Um FPGA um dispositivo semi-condutor que possui blocos lgicos e interconexes programveis. Esse dispositivo permite a implementao de circuitos lgicos relativamente grandes que consistem de um arranjo desses blocos lgicos e interconexes, contidos em um nico circuito integrado. Assim, ele pode ser utilizado para computao hbrida, onde parte da execuo se d em um processador tradicional controlado por software e outra parte em um processador programado exclusivamente para realizar determinada tarefa. Um FPGA composto de trs componentes bsicos: blocos lgicos, chaves de interconexo e blocos de entrada e sada. Sua estrutura pode ser vista na gura 2.1, com exceo dos blocos de entrada e sada que se localizam nas extremidades da malha.
Figura 2.1: Arquitetura de FPGA genrica. Fonte: (MAXFIELD, 2004) Os blocos lgicos so formados por uma tabela de busca, tambm chamada LUT (Lookup Table), um multiplexador e um ip-op. Um exemplo de bloco lgico, como mostrado na gura 2.2, possui quatro entradas, duas sadas e um sinal de relgio. A tabela de busca utilizada para implementar a lgica do bloco, visto que uma tabela de busca com n bits pode codicar um funo Booleana de n entradas atravs de tabela verdade.
16
17
Utilizar VHDL para programao comparvel programar em linguagem Assembly. Pensando nisso, principalmente pelo crescente uso de FPGAs em aplicaes de alto desempenho, exitem esforos para aumentar a produtividade dos programadores atravs da metodologia ESL (Eletronic System Level). 2.3.2 Ferramentas ESL ESL um novo paradigma que promete alavancar a produtividade de desenvolvimento para FPGAs, elevando o nvel de abstrao em relao a linguagens de descrio de hardware. Com ele possvel desenvolver um programa em uma linguagem de alto nvel, como C, e traduzi-lo de maneira otimizada em hardware (LASS, 2006). Para o desenvolvimento deste trabalho, pesquisou-se algumas solues deste tipo a m de selecionar uma ferramenta adequada e, ao mesmo tempo, conhecer os avanos recentes nesta rea. Estas ferramentas sero apresentadas nas prximas sees. 2.3.2.1 FpgaC FpgaC um compilador de cdigo aberto para a linguagem C que gera, ao invs de binrios, um circuito digital que executa o programa compilado. Tem como objetivo melhorar a ecincia do desenvolvimento para computao recongurvel, substituindo as linguagens de descrio de hardware por uma linguagem de alto nvel (PENTINMAKI; MENON; BASS, 2006). Um programa em C compilado com FpgaC gera um netlist para ser transformado, utilizando ferramentas do fabricante do FPGA, no binrio que carregado para o FPGA. Apesar de ser um alternativa que pode facilitar bastante o desenvolvimento de uma aplicao para FPGA, no ser utilizado por incompatibilidade com a verso da ferramenta disponibilizada pelo fabricante do FPGA que ser programado. 2.3.2.2 C2VHDL C2VHDL um tradutor de C para VHDL, desenvolvido na Universidade do Estado do Rio de Janeiro. Tambm tem como objetivo facilitar a construo de hardware atravs de linguagens de alto nvel, mas de forma mais genrica pois um cdigo VHDL pode ser importado para qualquer ferramenta de gerao de binrios para FPGA (MARRA et al., 2001). Os desenvolvedores do C2VHDL no disponibilizam a ferramenta, o que impossibilita
18
sua utilizao nesse trabalho. 2.3.2.3 Outras ferramentas Existem diversas ferramentas para traduo de C para HDL (VHDL e/ou Verilog) e compilao de C para netlists. Dentre elas podemos citar: Impulse C, Catapult C e Handel C. Todas estas ferramentas so comercializadas a preos em torno de milhares de dlares. 2.3.3 Ambiente de programao escolhido As ferramentas pesquisadas possuem caractersticas indesejveis para este trabalho, como incompatibilidade com o modelo de FPGA (Virtex II Pro, da Xilinx) a ser utilizado e alto custo de aquisio. Assim, optou-se por implementar a soluo diretamente em VHDL. Outro fator que levou a essa deciso foi o fato de que o algoritmo da FFT no muito extenso e, portanto, o ganho de tempo com a utilizao de ESL no compensaria o tempo gasto pesquisando outras opes. Para a implementao em VHDL, foi utilizada a ferramenta VHDL Simili 3.1 (Symphony EDA, 2007), desenvolvido pela Symphony EDA. Esta escolha deu-se pela familiaridade obtida com essa ferramenta em outras oportunidades. Com essa ferramenta possvel editar, compilar e simular cdigos em VHDL. Para integrao com FPGA ser utilizada a ferramenta Foundation 9.2i da Xilinx. atravs dela que ser gerado o binrio para ser carregado pelo FPGA.
19
3 TRANSFORMADA DE FOURIER
Neste captulo apresenta-se uma introduo transformada de Fourier. Inicialmente apresenta-se a transformada e sua discretizao. Na seqncia, descreve-se a transformada rpida de Fourier, alguns algoritmos para seu processamento e suas caractersticas.
f (t)ej2f t dt
F (f )ej2f t df
1.
20
N 1 k=0 kn X(k)WN , para n = 0, 1, ..., N-1
x(n) = 1/N
onde WN = ej2/N (fator twiddle). Podemos observar que para calcular X(k) para um determinado valor de k, so necessrias N multiplicaes complexas e N-1 somas complexas. Ou seja, so necessrias N 2 multiplicaes complexas e N(N-1) somas complexas para se obter os N valores da srie transformada. Em termos de esforo computacional, a transformada discreta tem complexidade O(N 2 ), o que a caracteriza como lenta e inecaz para aplicaes de alto desempenho.
21
Tabela 3.1: Exemplo de ordenao por bit-invertido ndice 0 1 2 3 4 5 6 7 Equivalente em binrio 000 001 010 011 100 101 110 111 Binrio em bit-invertido 000 100 010 110 001 101 011 111 ndice em bit-invertido 0 4 2 6 1 5 3 7
amostras.
Figura 3.2: Operao de borboleta - DIF O algoritmo de decimao na freqncia ligeiramente diferente, tendo como entrada a srie na ordem normal, mas seu resultado ordenado em bit-invertido. Possui o mesmo nmero de etapas e borboletas (como a da gura 3.2), mas aplicado conforme a gura 3.4. Esses algoritmos aplicam um total de (N/2)log2 N operaes de borboleta, totalizando (N/2)log2 N multiplicaes complexas e N log2 N somas complexas, o que em termos de esforo computacional signica uma complexidade de ordem O(N log2 N ). 3.2.2 Outros algoritmos Os algoritmos radix-2 podem ser estendidos para radix-4, radix-8, radix-16, que melhoram o desempenho por necessitarem de menos etapas e menos operaes de borboleta por etapa, mas necessitam que o tamanho das sries sejam potncias de 4, 8 e 16 respectivamente.
22
Figura 3.3: Grafo do algoritmo radix-2 por decimao no tempo Existem outras tentativas de melhorar o desempenho da FFT, como o algoritmo splitradix proposto por R. Yavne (YAVNE, 1968), que mescla borboletas de 2 e 4 entradas para diminuir o nmero total de operaes aritmticas. Na sua forma original tambm possui a desvantagem de necessitar que o tamanho da srie seja de potncia de 4, mas pode ser combinado com qualquer outro algoritmo de FFT para suprir essa desvantagem. Existem ainda outras variaes como os algoritmos prime-factor (GOOD, 1958), de Bruun (BRUUN, 1978), de Rader (RADER, 1968) e de Bluestein (BLUESTEIN, 1968), mas suas caractersticas esto fora do escopo deste trabalho.
23
24
4 CRAY XD1
Neste captulo apresenta-se uma descrio da arquitetura do supercomputador XD1 da Cray e suas particularidades de programao e utilizao. Esse captulo visa ressaltar aspectos importantes para o desenvolvimento de aplicaes hbridas.
4.1 Arquitetura
O XD1 composto por seis blades, onde cada blade possui dois processadores Opteron de 64 bits, de 1 a 8 GB de memria DDR SDRAM por processador, dois processadores RapidArray, um FPGA Virtex II Pro da Xilinx e um processador de gerenciamento, que monitora o hardware (CRAY, 2005a). Uma viso lgica do chassis do Cray XD1 por ser vista na gura 4.1.
25
O FPGA se conecta com um dos processadores RapidArray locais para comunicao com os processadores Opteron, com processadores RapidArray de blades vizinhas e com quatro mdulos de memria QDRII SRAM de 64 Mbytes, como mostra a gura 4.2.
4.1.1 Interconexo RapidArray A interconexo RapidArray o barramento utilizado para conectar processadores RapidArray dentro de um chassis e entre chassis e, conseqentemente, processadores, memria e FPGAs. um barramento de banda larga, baixa latncia, no bloqueante que pode chegar a at 96 GB/s dentro de um chassis (CRAY, 2005a). 4.1.2 Recursos de memria No XD1 o FPGA tem acesso a quatro tipos de memria. As mais rpidas so a RAM distribuda e a RAM de bloco (Block RAM), que residem dentro do Virtex II Pro, e possuem 18Kbits e 16 KBytes de tamanho respectivamente. O FPGA possui acesso a quatro mdulos de memria Quad Data Rate de segunda gerao (QDR II) SRAM de 64 MBytes de tamanho cada. Tambm pode acessar a memria
26
27
4.2.3 Transferncia de Dados Para a transferncia de dados entre os Opteron e o FPGA exitem trs opes: mapear a memria interna do FPGA no espao de memria da aplicao, acessar uma diretamente uma posio nica da memria do FPGA ou reservar um espao na memria da aplicao para o FPGA acessar diretamente (CRAY, 2005c). Para o mapeamento da memria interna do FPGA, primeiramente faz-se uma chamada de mapeamento que retorna um ponteiro para aquela regio. Leituras e gravaes nessa regio so feitas atravs desse ponteiro, como se fosse um vetor. A funo da API para esse tipo de transferncia : fpga_memmap: mapeia o nmero de bytes passado como parmetro da memria interna do FPGA para o espao de memria da aplicao, retornando um ponteiro para o primeiro byte dessa regio. O acesso direto uma nica posio da memria do FPGA feito atravs de duas funes da API, uma de escrita e uma de leitura: fpga_wrt_appif_val: escreve um valor em um endereo, ambos passados como parmetro, na memria interna do FPGA. fpga_rd_appif_val: l o contedo de um endereo, passado como parmetro, da memria interna do FPGA. Para reservar um espao da memria da aplicao para ser acessada pelo FPGA, a API disponibiliza um mtodo que aloca essa regio de memria para esse m. Aps essa regio ser alocada, necessrio que o programa comunique o FPGA o endereo base da regio, o que pode ser feito utilizando qualquer uma das abordagens descritas anteriormente. As funes da API destinadas esse m so: fpga_register_ftrmem: reserva um espao da memria da aplicao para ser acessada pelo FPGA, do tamanho passado como parmetro. fpga_dereg_ftrmem: libera a memria previamente alocada.
28
Figura 4.3: Topo de um projeto HDL para o Cray XD1. Fonte: (CRAY, 2005a) A lgica do usurio deve ser adaptada para se comunicar com o mdulo RapidArray Transport Core (gura 4.4), que o responsvel pelo tratamento das requisies vindas do processador e por mandar requisies para o processador. O RapidArray Transport Core possui quatro grupos de sinais, para envio e recebimento de requisies e para envio e recebimento de respostas essas requisies. O mdulo QDR II Core opcional, pois a lgica do usurio pode usar somente a memria interna. Possui quatro grupos de sinais, para leitura e escrita em cada uma dos quatro mdulos de memria QDRII SRAM (CRAY, 2005d).
29
30
5 IMPLEMENTAO
Este captulo descreve a implementao do trabalho, apresentando a implementao da FFT em hardware e sua adaptao para utilizar os mdulos da Cray. Por m, apresentase uma avaliao sobre o resultado.
5.1 Introduo
Para a implementao da FFT em VHDL, foi escolhido o algoritmo radix-2 por decimao no tempo, por ser um algoritmo simples e, por ser menos otimizado, pode ressaltar o quo valiosa a utilizao de uma implementao hbrida para o clculo da FFT. O estudo da FFT mostrou que a parte central do algoritmo a operao de borboleta, sendo que o resto do algoritmo se limita a calcular os parmetros dessa operao. Sendo assim, iniciou-se a implementao por essa operao. Todos os mdulos a seguir foram implementados utilizando a biblioteca math_real da IEEE para operaes com nmeros reais. Essa biblioteca foi utilizada para acelerar o desenvolvimento da FFT e partir rapidamente para o acoplamento com os mdulos da Cray e da Xilinx. Como essa biblioteca no sintetizvel para FPGA, necessrio que essas operaes de nmeros reais sejam implementadas. Por no haver tempo hbil, optou-se pelo acoplamento por ser algo menos explorado.
31
foi decidido, por questo de otimizao, pela separao do clculo do fator da borboleta. Assim, a borboleta passa a receber um nmero complexo (o resultado do clculo do fator) como parmetro ao invs do nmero da etapa e do grupo de borboletas. Para a construo da borboleta em hardware, foi desenvolvido um registrador de nmeros complexos. Esse registrador possui como entrada dois nmeros de ponto utuante, um sinal de carga e um sinal de relgio e tem como sada dois nmeros de ponto utuante. As entradas de ponto utuante so armazenadas na borda de subida do relgio desde que o sinal de carga esteja ligado. Esse registrador de nmeros complexos ser utilizado para armazenar os valores de sada da borboleta e o resultado do clculo do fator twiddle. Para o clculo do fator, foram criados dois mdulos que recebem o nmero da etapa e o grupo de borboletas, onde um calcula o seno e o outro o cosseno baseado nessas entradas. As operaes de seno e cosseno foram calculadas utilizando as respectivas funes da biblioteca da IEEE. Essas operaes poderiam ser facilmente implementadas utilizando consulta a uma tabela de resultados pois as funes de seno e cosseno so aplicadas a um nmero pequeno de valores. Depois do clculo, esses valores so armazenados no registrador destinado a esse m. Para o clculo da borboleta propriamente dita, foi criado um mdulo que l as entradas e o registrador do fator twiddle e grava o resultado nos registradores de sada. As portas de entrada e sada do mdulo twiddle e do ncleo da borboleta podem ser vistos nas guras 5.1 e 5.2 respectivamente. entity twiddle is port(clock : in std_logic; grupo : in real; passo : in real; sr : out real; si : out real ); end twiddle;
------
Figura 5.1: Portas do mdulo que calcula o fator twiddle Com essa arquitetura, mostrada na gura 5.3, a borboleta implementada ca modularizada e completamente independente da plataforma. Nos testes, esse modelo mostrou que funciona e consegue calcular a borboleta em 2 ciclos de relgio, mas pode utilizar
32
entity nucleo_borboleta is port(ar : in real; ai : in real; br : in real; bi : in real; wr : in real; wi : in real; r1r : out real; r1i : out real; r2r : out real; r2i : out real ); end entity nucleo_borboleta;
-----------
entrada A real entrada A imaginaria entrada B real entrada B imaginaria parte real do W parte imaginaria do W saida 1 real saida 1 imaginaria saida 2 real saida 2 imaginaria
Figura 5.2: Portas do mdulo calcula a borboleta pipeline para calcular o fator twiddle da prxima etapa enquanto calcula a borboleta da etapa atual. Dessa forma, obtm-se uma vazo de um ciclo de relgio.
Twiddle
nmero do grupo de borboletas
cosseno
etapa
seno
Borboleta
R1 A real A imaginrio R1 real A + WB R1 imaginrio
33
etapa
seno
FFT
Borboleta
R1 A real A imaginrio A + WB
R2 B real B imaginrio A - WB
Figura 5.4: Arquitetura da FFT implementada Essa implementao foi simulada utilizando-se vetores de entrada com quatro e oito nmeros complexos. Os dois vetores precisaram, para serem totalmente computados, de um nmero de ciclos de relgio igual ao nmero de operaes realizadas (soma do nmero de borboletas com o nmero de clculos de fator twiddle), sendo 7 (4 + 3) para o vetor
34
wait until clockevent and clock = 0; passo := 1; while passo < N loop -- percorre os logN passos grupo_borb := 0; while grupo_borb < passo loop grupo <= real(grupo_borb); -- envia para o twiddle etapa <= real(passo); -- envia para o twiddle wait until clockevent; -- espera um wait until clockevent; -- ciclo de relogio i := grupo_borb; while i < N loop -- percorre borboletas do grupo ar <= xreal(i); -ai <= ximag(i); -- envia os valores br <= xreal(i + passo); -- para a borboleta bi <= ximag(i + passo); -wait until clockevent; -- espera um wait until clockevent; -- ciclo de relogio xreal(i) := r1r; -ximag(i) := r1i; -- recebe os valores xreal(i + passo) := r2r; -- da borboleta ximag(i + passo) := r2i; -i := 2 * passo + i; end loop; grupo_borb := grupo_borb + 1; end loop; passo := passo * 2; end loop; Figura 5.5: Algoritmo FFT implementado em VHDL de tamanho quatro e 19 (12 + 7) para o de tamanho oito. Genericamente, precisa-se de (N/2)log2 N +
(log2 N )1 k=0
A corretude da implementao pode ser visualizada comparando os resultado obtidos com a simulao (gura 5.6) e com a execuo de um programa escrito em linguagem C (gura 5.7) para o mesmo vetor de entrada.
35
36
entity rt_client is port ( -- Global signals reset_n : in std_logic; user_clk : in std_logic; user_enable : in std_logic; rt_ready : in std_logic; -- RT Interface -- Fabric Request Interface ... -- User Response Interface ... -- Block RAM Interface rt_responses : in t_rt_responses; rt_req : out t_rt_req ); end entity rt_client; Figura 5.8: Portas utilizadas do mdulo RapidArray Transport Client Essas requisies so todas feitas memria interna e atravs dela que se d a comunicao entre o RapidArray Transport Client e a FFT. Dessa forma, a aplicao que utiliza essa implementao primeiramente mapeia a memria interna do FPGA para a transferncia dos dados e, aps o m da transferncia, grava o valor 1 em um registrador de congurao interno do FPGA. Isso sinaliza para a lgica do usurio que todos os dados j esto na memria interna e que o mdulo da FFT j pode comear a executar. Aps o trmino do clculo da FFT, o mdulo grava no mesmo registrador o valor 0, o que sinaliza a aplicao que o clculo j terminou e que a aplicao j pode utilizar os dados. A memria interna instanciada dentro da lgica do usurio utilizando o IP Block RAM da Xilinx. Esse IP gratuito, mas s pode ser usado em FPGAs desse fabricante. Para acessar a Block RAM, utiliza-se outro mdulo que funciona como interface entre a lgica do usurio e a Block RAM. Como tanto o RapidArray Transport Core quanto o mdulo FFT necessitam acessar a memria interna, foi necessrio colocar um multiplexador na sua entrada e um demultiplexador em sua sada, ambos controlados pelo mdulo FFT. O mesmo foi feito para os registadores internos. Para acesso a esses registradores tambm usado um IP da Xi-
37
type t_rt_req is record rd : t_rt_sel; wr : t_rt_sel; addr : t_rt_block_addr; wdata : t_byte_array(7 downto 0); mask : std_logic_vector(7 downto 0); end record t_rt_req; type t_rt_sel is array (t_rt_blocks) of std_logic; subtype t_rt_block_addr is std_logic_vector(t_rt_block_decodelow-1 downto 3); subtype t_rt_block_decode is std_logic_vector(26 downto 23); type t_byte_array is array(natural range <>) of std_logic_vector(7 downto 0); type t_rt_responses is array (t_rt_blocks) of t_rt_resp; type t_rt_resp is record rdata : t_byte_array(7 downto 0); busy : std_logic; end record t_rt_resp; type t_rt_blocks is (regs, bram, qdr2); Figura 5.9: Estrutura dos records linx que os implementa e um mdulo de interface. Foi necessrio tambm colocar um multiplexador na entrada dos registradores, mas a sada ligada diretamente ao mdulo RapidArray Transport Core, pois a FFT no l valores dos registradores. A arquitetura nal da implementao pode ser vista na gura 5.12. Essa arquitetura se conecta com o mdulo RapidArray Transport Core, mostrado na gura 4.4, e sua entrada e sada correspondem aos sinais Fabric Request Interface explicitados nessa gura. Essa soluo comeou a ser testada no FPGA do Cray XD1 do INPE, mas por problemas tcnicos ocorridos durante os testes, estes tiveram que ser cancelados e, portanto, a avaliao se dar somente por simulao.
38
valor := "00000000000000000000000000000000 00000000000000000000000000101010"; -- 42 bytes(7) bytes(6) bytes(5) bytes(4) bytes(3) bytes(2) bytes(1) bytes(0) := := := := := := := := valor(63 downto 56); valor(55 downto 48); valor(47 downto 40); valor(39 downto 32); valor(31 downto 24); valor(23 downto 16); valor(15 downto 8); valor(7 downto 0); <= 1; -- bram == Block RAM <= 0; "00000000000000000000"; -- 0 "11111111"; -- quais bytes serao escritos bytes;
Figura 5.10: Exemplo de requisio via hardware entity fft is port(user_clk reset_n start bram_resp to_reg fft_req ); end entity fft;
: : : : : :
in std_logic; in std_logic; in std_logic; -- sinal para comecar in t_rt_responses; out std_logic; -- para registradores out t_rt_req
5.5 Avaliao
Essa avaliao foi feita atravs de simulao utilizando a ferramenta ISE Foundation da Xilinx. Como essa implementao no foi utilizada em um FPGA real, sua avaliao se d em nmero de ciclos de relgio necessrios para terminar a tarefa. Esses nmeros de ciclos de relgio foram obtidos atravs de simulao e podero mudar em uma implementao sintetizvel. Inicialmente, necessrio um ciclo para inicializar e 2 ciclos para comear a gravar na Block RAM, devido ao multiplexador na entrada e interface da Block RAM, e N ciclos para gravar N nmeros reais de 64 bits.
39
MUX
MUX
Interface Registradores
Figura 5.12: Arquitetura implementada Aps o termino da gravao dos dados na memria interna, so necessrios 3 ciclos para gravar no registrador e para o mdulo FFT ler do registrador o sinal para comear a executar. Como mencionado anteriormente, o mdulo FFT necessita de (N/2)log2 N +
(log2 N )1 k=0
2k
ciclos de relgio para calcular a FFT de N nmeros complexos. Como a aplicao no precisa copiar os dados de volta para a memria principal do sistema, o resultado obtido com (N/2)log2 N +
(log2 N )1 k=0
2k + 2N + 6 ciclos de relgio.
Considerando que a memria interna do Virtex II Pro tem 16 Kbytes de espao, somente 2048 nmeros reais, ou 1024 nmeros complexos, podem ser armazenados simultaneamente. Caso N ultrapasse 1024, necessrio dividir o vetor e aplicar a FFT separadamente. Para isso, necessrio copiar os dados j calculados para a memria principal do sistema. Isso necessita de 3 ciclos de relgio para o mdulo FFT sinalizar que terminou de calcular, 3 ciclos para comear a ler os dados da Block RAM e 2048 ciclos para ler os 1024 nmeros complexos. Note que esse nmero xo para cada troca de contexto, pois caso N seja maior que 1024 ele ser um mltiplo de 1024 deixando a memria sempre cheia. Caso N seja 2048, por exemplo, a FFT precisar ser aplicada 4 vezes, o que necessita de 3 cpias para a memria principal, totalizando uma penalidade de 6162 ciclos de re-
40
Tabela 5.1: Ciclos de relgio necessrios para calcular a FFT Tamanho do vetor Ciclos necessrios 128 837 256 1797 512 3845 1024 8197 2048 38950 4096 120958
lgio. A tabela 5.5 mostra o nmero de ciclos de relgio necessrios para calcular a FFT para alguns tamanhos do vetor de entrada. Considerando que a freqncia mxima do Virtex II Pro de 200 MHz, ou seja, 200 milhes de ciclos por segundo, nota-se que, mesmo com as cpias para a memria principal, o nmero de ciclos se mantm bem abaixo desse valor.
41
6 CONCLUSO
Este trabalho apresentou a implementao parcial de uma transformada rpida de Fourier em hardware para ser executada em um FPGA da Xilinx, contido no supercomputador XD1 da Cray. Primeiramente, foi estudada a transformada rpida de Fourier, para entender seu funcionamento e suas possveis diculdades de implementao. Em seguida, foram estudadas diversas ferramentas para desenvolvimento em hardware para escolher a melhor maneira de implementar a FFT. Com a FFT em VHDL implementada, foram estudados os mdulos disponibilizados pela Cray e pela Xilinx para fazer o acoplamento do mdulo FFT com o resto do sistema. Assim foi possvel fazer uma simulao em software usando uma implementao muito parecida com a implementao nal em hardware. O estgio atual de implementao est prximo de executar em um FPGA real e pode ser complementado futuramente para se tentar acelerar aplicaes que utilizem FFT. Para isso, necessrio a implementao das operaes com nmeros reais (incluindo seno e cosseno) para substituir a biblioteca no sintetizvel da IEEE e alguns testes para vericar se a comunicao simulada com o processador condiz com a real comunicao com o processador. A avaliao se deu atravs de simulao e mostrou que a implementao vlida e consegue calcular a FFT em um nmero de ciclos de relgio razoavelmente pequeno. Essa implementao deixa espao para melhorias de desempenho, principalmente na aplicao da FFT, aplicando vrias operaes de borboleta em paralelo. Como trabalho futuro, pode-se terminar o acoplamento da implementao com um FPGA real e medir o possvel ganho de desempenho que pode ser obtido com essa abordagem.
42
REFERNCIAS
BLUESTEIN, L. I. A linear ltering approach to the computation of the discrete Fourier transform. Northeast Electronics Research and Engineering Meeting Record 10, [S.l.], p.218219, 1968. BRUUN, G. z-Transform DFT lters and FFTs. IEEE Trans. on Acoustics, Speech and Signal Processing (ASSP) 26, [S.l.], p.5663, 1978. BURDEN, R. L.; FAIRES, J. D. Numerical Analysis. [S.l.]: Cole Publishing Company, 1997. COMPTON, K.; HAUCK, S. Recongurable Computing: a survey of systems and software. ACM Computing Surveys, [S.l.], v.34, n.2, p.171210, 2002. COOLEY, J. W.; TUKEY, J. W. An Algorithm for the Machine Calculation of Complex Fourier Series. Mathematics of Computation, [S.l.], v.19, n.90, p.297301, 1965. CRAY, I. Cray XD1 FPGA Development. [S.l.]: Cray, Inc., Seattle, WA, 2005. CRAY, I. Design of Cray XD1 RapidArray Transport Core. [S.l.]: Cray, Inc., Seattle, WA, 2005. CRAY, I. Cray XD1 Programming. [S.l.]: Cray, Inc., Seattle, WA, 2005. CRAY, I. Design of Cray XD1 QDR II SRAM Core. [S.l.]: Cray, Inc., Seattle, WA, 2005. ESTRIN, G.; BUSSEL, B.; TURN, R.; BIBB, J. Parallel Processing in a Restructurable Computer System. IEEE Transactions on Electronic Computers, [S.l.], v.12, n.5, p.747755, 1963.
43
GOOD, I. J. The interaction algorithm and practical Fourier analysis. J. R. Statist. Soc. B 20, [S.l.], p.361372, 1958. KEAN, T. Algotronix History. [S.l.]: Algotronix, 2007. LASS, S. ESL Tools Make FPGAs Nearly Invisible to Designers. Xcell Journal, Third Quarter 2006, [S.l.], p.68, 2006. LEVINE, B. A Systematic Implementation of Image Processing Algorithms on Congurable Computing Hardware. 1999. Dissertao (Mestrado) University of Tennessee, Knoxville. LYNCH, P.; Ireland Meteorological Service. Dynamo: a one-dimensional primitive equation model. [S.l.]: Ireland Meteorological Ofce, 1984. MARRA, F.; COELHO, V.; MOURELLE, L.; NEDJAH, N. Tradutor de C para VHDL C2VHDL. Revista Eletrnica de Iniciao Cientca, Ano I, Vol. I, No. I, [S.l.], 2001. MAXFIELD, C. M. The Design Warriors Guide to FPGAs. [S.l.]: Elsevier, 2004. PENTINMAKI, I.; MENON, R.; BASS, J. FPGA C Compiler. [S.l.]: Sourceforge, 2006. PETERSEN, R. J. An Assessment of the Suitability of Recongurable Systems for Digital Signal Processing. 1995. Tese (Doutorado) Brigham Young University. Dept. of Electrical and Computer Engineering. PETERSON, G.; SMITH, M. Programming High Performance Recongurable Computers. SSGRR 2001, [S.l.], 2001. RADER, C. M. Discrete Fourier transforms when the number of data samples is prime. Proc. IEEE 56, [S.l.], p.11071108, 1968. Symphony EDA. VHDL Simili - Version 3.1. [S.l.]: Symphony EDA, 2007. TODMAN, T.; CONSTANTINIDES, G.; WILTON, S.; MENCER, O.; LUK, W.; CHEUNG, P. Recongurable Computing: architectures and design methods. IEE Proceedings: Computer & Digital Techniques, Vol. 152, No. 2, March 2005, [S.l.], p.193 208, 2005.
44
VELHO, H. F. C.; CLAEYSSEN, J. C. R. Singular Value Decomposition in the Numerical Integration of an Atmospheric Model. XIII Congresso bero-Latino-americano de Mtodos Computacionais para a Engenharia, [S.l.], 1992. YAVNE, R. An economical method for calculating the discrete Fourier transform. Proc. AFIPS Fall Joint Computer Conf. 33, [S.l.], p.115125, 1968.