• Nenhum resultado encontrado

Implementação em FPGA de algoritmos computacionais paralelos

N/A
N/A
Protected

Academic year: 2021

Share "Implementação em FPGA de algoritmos computacionais paralelos"

Copied!
99
0
0

Texto

(1)

Universidade de Aveiro Departamento de Electr´onica, Telecomunica¸c˜oes e Inform´atica 2010

Lu´ıs Carlos

Nobre de Almeida

Figueiredo

IMPLEMENTAC

¸ ˜

AO EM FPGA DE ALGORITMOS

(2)

Universidade de Aveiro Departamento de Electr´onica, Telecomunica¸c˜oes e Inform´atica 2010

Lu´ıs Carlos

Nobre de Almeida

Figueiredo

IMPLEMENTAC

¸ ˜

AO EM FPGA DE ALGORITMOS

COMPUTACIONAIS PARALELOS

Disserta¸c˜ao apresentada `a Universidade de Aveiro para cumprimento dos requesitos necess´arios `a obten¸c˜ao do grau de Mestre em Engenharia Electr´onica e Telecomunica¸c˜oes, realizada sob a orienta¸c˜ao cient´ıfica do Professor Doutor Valeri Skliarov, Professor Catedr´atico do Departamento de Electr´onica, Telecomunica¸c˜oes e Inform´atica da Universidade de Aveiro,co-orienta¸c˜ao cient´ıfica da Professora Doutora Iouliia Skliarova, Professora aux-iliar do Departamento de Electr´onica, Telecomunicac˜oes e Inform´atica da Universidade de Aveiro.

(3)

o j´uri / the jury

presidente / president Doutor Ant´onio Manuel de Brito Ferrari Almeida Professor Catedr´atico da Universidade de Aveiro

vogais / examiners committee Doutor H´elio Mendes de Sousa Mendon¸ca

Professor Auxiliar da Faculdade de Engenharia da Universidade do Porto

Doutor Valeri Skliarov

Professor Catedr´atico da Universidade de Aveiro (Orientador)

Doutora Ioulia Skliarova

(4)

agradecimentos / acknowledgements

Quero agradecer aos meus orientadores, Prof. Valery Skliarov e Prof. Iouliia Skliarova, por me fornecerem a oportunidade e conhecimento, uma vez que sempre mostraram a disponibilidade necess´aria para elabora¸c˜ao desta tese. Quero agradecer aos meus pais, irm˜aos e toda a fam´ılia que me acompan-hou e suportou a minha vida acad´emica.

Em ´ultimo lugar, quero agradecer a todos os meus amigos que, de uma maneira ou de outra, me ajudaram neste percurso acad´emico e essencial-mente pelos la¸cos de amizade que cri´amos.

(5)

Palavras-chave Field-Programmable Gate Array, m´aquinas de estados finitos, multiplica¸c˜ao de matrizes e vectores, s´ıntese de circuitos, simula¸c˜ao visual.

Resumo Nos ´ultimos anos, tem-se assistido a um indiscut´ıvel aumento da utiliza¸c˜ao de sistemas reconfigur´aveis. Dentro destes sistemas, as FPGAs (Field-Programmable Gate Array) apresentam-se, assim, como um grande po-tencial, possibilitando a implementa¸c˜ao de projectos de m´edia/grande com-plexidade, tais como os algoritmos de manipula¸c˜ao de dados. O tempo de execu¸c˜ao e os recursos envolvidos s˜ao, de longe, os factores mais impor-tantes a considerar. Nesta perspectiva, foi desenvolvida nesta tese uma im-plementa¸c˜ao de um algoritmo de multiplica¸c˜ao de matrizes e foi comparado o seu tempo de execu¸c˜ao face `a implementa¸c˜ao em software. A imple-menta¸c˜ao do algoritmo na FPGA, debru¸ca-se essencialmente em m´aquinas de estados finitos, com o intuito de aproveitar o paralelismo que se pode en-contrar neste tipo de dispositivos. Foi, tamb´em, criada uma comunica¸c˜ao entre um PC de uso geral com a placa FPGA por USB, de modo a ser poss´ıvel a transmiss˜ao de dados entre ambos.

O sistema foi implementado e testado com ˆexito, podendo-se observar os resultados da multiplica¸c˜ao atrav´es do monitor VGA, ou atrav´es do PC.

(6)

Keywords Field-Programmable Gate Array, finite state machine, multiplication of ma-trices and vectors, circuit synthesis, visual simulation.

Abstract In the last few years, the rising use of reconfigurable systems is indis-putable. These systems are usually constructed on the basis of FPGA (Field-Programmable Gate Array), which allow for the implementation of medium and high complexity algorithms, such as data manipulation algorithms. The most important factors to consider are the execution time and the required resources.

In this thesis, matrix multiplication algorithms were implemented in FPGA and the resulting execution time was compared with the respective imple-mentation in software. The impleimple-mentation in FPGA aims at exploring parallelism as much as possible. Then a communication was established be-tween a host computer and an FPGA-based prototype board through USB system.

The entire system was implemented and tested sucessfully. The multipli-cations results can either be seen an a VGA monitor or on the PC console application.

(7)

Conte´

udo

1 Introdu¸c˜ao 1 1.1 Enquadramento . . . 1 1.2 Motiva¸c˜ao . . . 1 1.3 Objectivos . . . 2 1.4 Organiza¸c˜ao da Tese . . . 3 2 Estado de arte 5 2.1 Implementa¸c˜ao em FPGA de algoritmos computacionais paralelos . . . 5

2.2 M´aquinas de estados finitos . . . 5

2.2.1 Introdu¸c˜ao . . . 5

2.2.2 M´aquinas de estados finitos hier´arquicas . . . 7

2.2.3 M´aquinas de estado finitos hier´arquicas paralelas . . . 8

2.3 Aplica¸c˜oes pr´aticas . . . 8

2.4 Sistemas digitais reconfigur´aveis . . . 14

2.4.1 FPGA (Field Programmable Gate Array) . . . . 17

2.4.2 Aplica¸c˜oes . . . 19

2.5 Fabricantes e placas de prototipagem . . . 19

2.6 Multiplica¸c˜ao de matrizes e vectores . . . 22

2.6.1 Defini¸c˜ao . . . 22 2.6.2 Algoritmo . . . 23 2.6.3 Implementa¸c˜oes . . . 24 2.6.4 Resultados . . . 26 2.7 Multiplica¸c˜ao de matrizes . . . 27 2.7.1 Defini¸c˜ao . . . 27 2.7.2 Algoritmos . . . 29 2.7.3 Implementa¸c˜oes . . . 32 2.7.4 Resultados . . . 33 2.8 Conclus˜oes . . . 35 3 Ferramentas de apoio 37 3.1 Linguagem de descri¸c˜ao de Hardware (HDL) . . . 37

3.2 VHDL . . . 37

3.2.1 Descri¸c˜ao estrutural . . . 37

3.2.2 Descri¸c˜ao comportamental . . . 38

3.3 Xilinx Integrated Software Environment (ISE) WebPack . . . 39

(8)

3.4 ModelSim . . . 41

3.5 Microsoft Visual Studio . . . 42

3.6 Digilent Adept . . . 42

3.7 Conclus˜oes . . . 43

4 Arquitectura b´asica do sistema implementado 45 4.1 Comunica¸c˜ao entre FPGA e um computador de uso geral . . . 45

4.1.1 Software . . . 47

4.2 Arquitectura do sistema em hardware . . . 49

4.3 Conclus˜oes . . . 57

5 Implementa¸c˜ao dos algoritmos de multiplica¸c˜ao de matrizes e vectores 59 5.1 Esquema geral . . . 59

5.2 Comunica¸c˜ao USB . . . 60

5.3 Bloco controlador da RAM . . . 64

5.4 Bloco Multiplicador . . . 65 5.5 Bloco VGA . . . 69 5.6 Conclus˜oes . . . 70 6 Resultados 73 6.1 Arquitectura sequencial . . . 74 6.2 Arquitectura paralela . . . 76 6.3 Conclus˜oes . . . 77

7 Conclus˜oes e trabalho futuro 81

(9)

Lista de Tabelas

2.1 Recursos l´ogicos da Spartan3E 1200. . . 21

2.2 Macro-blocos na Spartan3E 1200. . . 22

2.3 Avalia¸c˜ao dos resultados feitos em [18]. . . 34

2.4 Avalia¸c˜ao dos resultados atingidos em [21] . . . 34

2.5 Desempenho do sistema utilizando o primeiro teorema [25]. . . 34

2.6 Desempenho do sistema utilizando o segundo teorema [25]. . . 35

2.7 Avalia¸c˜ao dos resultados feitos em [33]. . . 35

4.1 Sinais de controlo do interface USB. . . 46

6.1 Tempo da multiplica¸c˜ao matricial para uma arquitectura sequencial(I). . . . 75

6.2 Tempo da multiplica¸c˜ao matricial para uma arquitectura paralela (primeira vers˜ao) a 12,5 MHz. . . . 76

6.3 Tempo da multiplica¸c˜ao matricial para uma arquitectura paralela (segunda vers˜ao) a 12,5 MHz. . . . 77

6.4 Tempo da multiplica¸c˜ao matricial para uma arquitectura paralela a (vers˜ao final) a 25 MHz. . . . 78

6.5 Tempo da multiplica¸c˜ao matricial para uma arquitectura paralela (vers˜ao final) a 25 MHz (para outras matrizes iniciais). . . . 79

6.6 Tempo da multiplica¸c˜ao matricial para uma arquitectura paralela (vers˜ao final) a 30 MHz. . . . 79

6.7 Tempo da multiplica¸c˜ao matricial para uma arquitectura paralela (vers˜ao final) a 30 MHz (para outras matrizes iniciais). . . . 80

(10)

Lista de Figuras

1.1 Compara¸c˜ao do pre¸co m´edio de venda sobre o custos de volume [1]. . . 2

2.1 Aumento do n´umero de trans´ıstores utilizados na FPGA ao longo do tempo [2]. 6 2.2 Ilustra¸c˜ao de multitasking num sistema computacional. . . . 6

2.3 FSM . . . 6

2.4 HFSM [29] . . . 7

2.5 PHFSM [29] . . . 8

2.6 Panorama industrial e o fosso para a tecnologia [3]. . . 9

2.7 Acelera¸c˜ao de algoritmos em FPGA [3]. . . 9

2.8 Tempo de execu¸c˜ao em ciclos de rel´ogio, em software e hardware de opera¸c˜oes de v´ırgula flutuante na placa Nios [35]. . . 10

2.9 Tempo de execu¸c˜ao de um processador para calcular a factoriza¸c˜ao LU e os resultados pela substitui¸c˜ao pela placa Nios [35]. . . 10

2.10 Dois CA-CFAR em paralelo em diferente ciclos de rel´ogio [24]. . . 11

2.11 Estrutura de dos dois CA-CFAR em paralelo [24]. . . 11

2.12 Resultados do desempenho usando uma FPGA ou apenas software no proces-samento de imagens m´edicas [34]. . . 11

2.13 Formato dos dados de entrada [22]. . . 12

2.14 Esquema do algoritmo para ordena¸c˜ao dos dados visto em [22]. . . 13

2.15 Sequˆencia do algoritmo paralelo da multiplica¸c˜ao de matrizes [25]. . . 13

2.16 Estrutura dos elementos de processo segundo [25]. . . 14

2.17 Imagem de uma PROM [4]. . . 15

2.18 Estrutura de uma PLA [5]. . . 16

2.19 Estrutura de um PAL [6]. . . 16

2.20 Exemplo de uma GAL [7]. . . 17

2.21 Estrutura de uma CPLD. . . 17

2.22 Arquitectura interna de uma FPGA [8]. . . 18

2.23 Exemplos de aplica¸c˜oes de utiliza¸c˜ao das FPGAs [9]. . . 19

2.24 Compara¸c˜ao das caracter´ısticas de FPGAs da Xilinx [10]. . . 20

2.25 Diagrama de blocos da placa Nexis 2 [11]. . . 20

2.26 Nexis 2 [11]. . . 21

2.27 Esquema de um multiplicador embutido na FPGA [12]. . . 22

2.28 Diagrama do algoritmo da multiplica¸c˜ao de uma matriz por um vector. . . . 24

2.29 Multiplica¸c˜ao de uma Sparse matriz por um vector em pipeline [26]. . . . 25

2.30 Estrutura b´asica do desenho para k = 4 [27]. . . . 26

2.31 Desempenho em MFLOPS em fun¸c˜ao da largura de banda da SDRAM [26]. . 27 2.32 Compara¸c˜ao do desempenho do SMVM com outros sistemas computacionais [26]. 27

(11)

2.33 Desempenho em MFLOPS em fun¸c˜ao da frequˆencia de trabalho e largura de

banda da mem´oria [27]. . . 28

2.34 Desempenho em MFLOPS em paralelo [27]. . . 28

2.35 Speedup em rela¸c˜ao ao Pentium IV 2.8 GHz [31]. . . 29

2.36 Fluxograma do algoritmo de multiplica¸c˜ao de duas matrizes n× n. . . . 30

2.37 Arquitectura de um elemento de processamento usado no teorema 1 [25]. . . . 32

2.38 Arquitectura de um elemento de processamento usado no teorema 2 para r = 2 [25]. . . 32

2.39 Arquitectura paralela da multiplica¸c˜ao de matrizes [18]. . . 33

3.1 Declara¸c˜ao de uma entity [19]. . . . 38

3.2 Exemplo de um processo. . . 38

3.3 Criar um novo projecto no ISE. . . 39

3.4 Propriedades do dispositivo a utilizar. . . 39

3.5 Especifica¸c˜oes de um modelo de uma FPGA da Xilinx [10]. . . 39

3.6 Ambiente gr´afico do ISE. . . 40

3.7 Passos para a simula¸c˜ao em ModelSim [13]. . . 42

4.1 Escrita de um endere¸co. . . 46

4.2 Leitura de um endere¸co. . . 46

4.3 Escrita de dados. . . 47

4.4 Leitura de dados. . . 47

4.5 Algoritmo da multiplica¸c˜ao de matrizes ou vectores. . . 47

4.6 Linha de comandos mostrando o interface do utilizador. . . 49

4.7 Diagrama de blocos simplificada do sistema. . . 50

4.8 Arquitectura I do blocos RAM. . . 51

4.9 Arquitectura II do blocos RAM. . . 51

4.10 Estrutura do bloco controlador RAM. . . 52

4.11 Arquitectura I do bloco USB para escrita. . . 53

4.12 Arquitectura II do bloco USB para escrita. . . 53

4.13 Arquitectura I do bloco USB para leitura. . . 54

4.14 Arquitectura II do bloco USB para leitura. . . 54

4.15 Arquitectura I do bloco multiplicador. . . 55

4.16 Arquitectura II do bloco multiplicador. . . 55

4.17 Fases para escrever a matriz/vector no ecr˜a VGA. . . 56

5.1 Vista hierarquica dos blocos implementados. . . 59

5.2 Caixa de di´alogo para a configura¸c˜ao do DCM. . . 61

5.3 Caixa de di´alogo para a configura¸c˜ao da frequˆencia de sa´ıda do DCM. . . 61

5.4 Esquema do sinais de entrada e sa´ıda do bloco USB . . . 62

5.5 Diagrama de transi¸c˜oes da m´aquina de estados implementada no bloco USB. 63 5.6 Esquema do sinais de entrada e sa´ıda do bloco Controlador da RAM. . . 64

5.7 Caixa de di´alogo para a configura¸c˜ao da mem´oria RAM. . . 65

5.8 Caixa de di´alogo para a configura¸c˜ao das dimens˜oes da mem´oria RAM. . . . 65

5.9 Esquema do sinais de entrada e sa´ıda do bloco multiplicador. . . 66

5.10 Diagrama de transi¸c˜oes da m´aquina de estados hier´arquica implementada no bloco multiplicador. . . 67

(12)

5.11 Esquema com os sinais de entrada e saida do bloco VGA. . . 69 5.12 M´etodo utilizado para a convers˜ao de bin´ario para BCD. . . 70 6.1 Imagem do monitor VGA com a matriz resultado e o tempo gasto pela FPGA. 74 6.2 Recursos utilizados da FPGA para a implementa¸c˜ao do sistema com a

arqui-tectura sequencial(I). . . 75 6.3 Recursos utilizados da FPGA para a implementa¸c˜ao do sistema com a

(13)

Cap´ıtulo 1

Introdu¸

ao

1.1

Enquadramento

Hoje em dia, os dispositivos electr´onicos evoluem a uma grande velocidade, oferecendo cada vez mais uma maior efic´acia dos recursos utilizados. Os circuitos integrados s˜ao um bom exemplo dessa evolu¸c˜ao. E a partir destes que se criam a maior parte dos disposi-´ tivos electr´onicos, como microprocessadores, mem´orias RAM, controladores I/O, conversores anal´ogico-digitais. Por´em, a maior parte destes dispositivos tˆem uma fun¸c˜ao espec´ıfica. As-sim, os sistemas reconfigur´aveis, mais em particular as FPGAs (Field-Programmable Gate Array ), surgiram para permitir a implementa¸c˜ao de diferentes circuitos l´ogicos no mesmo chip, oferecendo uma grande versatilidade.

Desde que a FPGA foi lan¸cada pela primeira vez no mercado, pela empresa Xilinx, tˆem sido inclu´ıdos diversos bloco funcionais, como multiplicadores, blocos de RAM, DCMs (Digi-tal Clock Manager ), oferecendo uma maior capacidade de armazenamento e manipula¸c˜ao de dados. A esta capacidade, tamb´em se junta a facilidade de descrever circuitos digitais, atrav´es de HDLs (Hardware Description Language), que mais tarde ser˜ao implementados na FPGA. O avan¸co da tecnologia ´e acompanhado por um desenvolvimento de algoritmos com o ob-jectivo de aumentar o desempenho de aplica¸c˜oes computacionais. Neste sentido, pretende-se nesta tese implementar um algoritmo computacional paralelo, mais concretamente a multi-plica¸c˜ao de matrizes e vectores. A implementa¸c˜ao ir´a ser testada e os resultados obtidos ser˜ao demonstrados.

1.2

Motiva¸

ao

Dado que a FPGA possibilita reconfigura¸c˜ao dos componentes l´ogicos e liga¸c˜oes, ´e enu-merado algumas caracter´ısticas importantes das FPGAs:

ˆ Alta flexibilidade, atrav´es da qual qualquer desenho de um circuito pode ser alterado e implementado at´e estar de acordo com os objectivos.

ˆ Paralelismo, permitindo a execu¸c˜ao de v´arias opera¸c˜oes ao mesmo tempo. ˆ Bom desempenho.

(14)

ˆ Custos razo´aveis, (dependendo sempre dos recursos necess´arios). Com a evolu¸c˜ao das arquitecturas das FPGAs e com o aumento de produ¸c˜ao pelas empresas que as fabricam, os custos come¸cam a ser bastantes baixos.

Em rela¸c˜ao a este ´ultimo ponto, podemos ver na figura 1.1, que as FPGAs apresentam o mais baixo custo com NRE (Non- Recurring Engineering) mas, em contrapartida, se for necess´ario uma FPGA com melhor desempenho ou maior disponibilidade de recursos, rapi-damente os seus custos disparam.

Figura 1.1: Compara¸c˜ao do pre¸co m´edio de venda sobre o custos de volume [1].

Em ´areas como computa¸c˜ao gr´afica ou processamento de sinal, faz-se uma grande quanti-dade de c´alculos e manipula¸c˜ao de matrizes. Assim, com as capacidades actuais das FPGAs, mesmo n˜ao trabalhando a frequˆencias de trabalho elevadas (e.g. 400 MHz), ´e poss´ıvel con-struir e implementar algoritmos em Hardware. Neste caso, algoritmos de multiplica¸c˜ao de matrizes s˜ao bastante eficazes com tempos de execu¸c˜ao inferiores aos algoritmos realizados em software, em computadores de uso geral. A troca de dados entre o PC e a FPGA ser´a feita por USB. Assim, e em virtude de uma maior interac¸c˜ao com a FPGA, os resultados das multiplica¸c˜oes feitas pela FPGA ser˜ao mostrados num monitor VGA ou atrav´es do computa-dor.

1.3

Objectivos

Esta tese temo como objectivos principais:

ˆ Constru¸c˜ao de blocos reutiliz´aveis que permitem demonstrar as capacidades da FPGA, utilizando m´aquinas de estados finitos hier´arquicas, para a implementa¸c˜ao de algoritmos paralelos.

ˆ Criar e implementar um algoritmo de multiplica¸c˜ao de matrizes e de uma matriz por um vector na FPGA. O tamanho das matrizes pode atingir 16 linhas e 16 colunas. Os vectores podem ter 16 elementos. Cada elemento da matriz ´e um inteiro sem sinal de 13 bits.

(15)

ˆ Construir um canal de comunica¸c˜ao por USB para permitir a troca de dados entre os dois sistemas.

ˆ Comparar o tempo de execu¸c˜ao do algoritmo implementado em software num PC de uso geral com o algoritmo implementado na FPGA.

ˆ Verificar as capacidades da FPGA para demonstra¸c˜ao visual dos resultados da multi-plica¸c˜ao matricial.

1.4

Organiza¸

ao da Tese

Ap´os este cap´ıtulo introdut´orio, esta tese est´a organizada do seguinte modo:

ˆ Cap´ıtulo 2 - Neste cap´ıtulo ´e feita a contextualiza¸c˜ao do conte´udo da tese na qual se descrevem os v´arios componentes utilizados para cria¸c˜ao de sistemas digitais. S˜ao demonstrados os conceitos te´oricos sobre multiplica¸c˜ao de matrizes e vectores bem como sugest˜oes de implementa¸c˜ao e resultados dos mesmos.

ˆ Cap´ıtulo 3 - Neste cap´ıtulo ´e feita a descri¸c˜ao das ferramentas de apoio necess´arias para a compila¸c˜ao, s´ıntese e implementa¸c˜ao dos projectos criados, tanto em linguagem C como em VHDL.

ˆ Cap´ıtulo 4 - Neste cap´ıtulo ´e apresentada a arquitectura do sistema implementado em FPGA, tal como a comunica¸c˜ao USB entre a FPGA e o PC e os v´arios blocos necess´arios para a multiplica¸c˜ao de matrizes e vectores.

ˆ Cap´ıtulo 5 - Neste cap´ıtulo descrevem-se detalhadamente todos os blocos implemen-tados em FPGA.

ˆ Cap´ıtulo 6 - Neste cap´ıtulo s˜ao apresentados os resultados das v´arias experiˆencias realizadas utilizando diferentes frequˆencias de rel´ogio. ´E estabelecida uma compara¸c˜ao entre as arquitecturas implementadas.

ˆ Cap´ıtulo 7 - O ´ultimo cap´ıtulo desta tese consiste na an´alise global do trabalho re-alizado. S˜ao tiradas conclus˜oes e descrevem-se os objectivos atingidos. Finalmente, ´e apresentada uma sugest˜ao de optimiza¸c˜ao do sistema implementado.

(16)
(17)

Cap´ıtulo 2

Estado de arte

Sum´

ario

Neste capitulo ´e feita uma introdu¸c˜ao te´orica aos algoritmos computacionais paralelos baseados em FPGA. S˜ao apresentados conceitos te´oricos para a implementa¸c˜ao de m´aquinas de estados finitos e no¸c˜oes sobre a multiplica¸c˜ao de matrizes e vectores, com a demonstra¸c˜ao de exemplos de implementa¸c˜oes de algoritmos matriciais.

2.1

Implementa¸

ao em FPGA de algoritmos computacionais

paralelos

Os sistemas reconfigur´aveis est˜ao em constante evolu¸c˜ao. Isto deve-se sem d´uvida, aos avan¸cos da tecnologia em sil´ıcio. A lei de Moore prevˆe que o n´umero de trans´ıstores duplique cada dois anos [2], possibilitando, assim, a implementa¸c˜ao de maiores modelos funcionais com fun¸c˜oes espec´ıficas, tudo numa ´unica pastilha de sil´ıcio. Esta evolu¸c˜ao transparece nas FPGAs que tˆem sido aperfei¸coadas ao longo dos anos, como mostra a figura 2.1. Com as de FPGA, ´e poss´ıvel manipular zonas de dados diferentes ao mesmo tempo, ou ainda executar diferentes opera¸c˜oes em simultˆaneo, o que n˜ao acontece em sistemas computacionais usando multitasking. Esta d´a a ilus˜ao que v´arias opera¸c˜oes s˜ao executadas em paralelo, devido a frequˆencias de rel´ogio muito elevadas. No entanto, essas tarefas s˜ao simplesmente multiplexadas no tempo, feitas sequencialmente, como ilustra a figura 2.2.

Assim, a popularidade das FPGAs aumentou, aplicando-se nas mais diversas ´areas: ind´ustria autom´ovel, aeron´autica, biologia, etcEstas procuram sistemas com tempos de resposta mais r´apidos, em tempo-real ou aproximado, dependendo do tipo de aplica¸c˜ao. As solu¸c˜oes passam por algoritmos paralelos capazes de satisfazer as necessidades requeridas, tanto em termos de desempenho, como de recursos.

2.2

aquinas de estados finitos

2.2.1 Introdu¸c˜ao

Dentro dos sistemas digitais, podemos classificar dois tipos de circuitos: circuitos combi-nat´orios, que podem ser definidos atrav´es de uma tabela de verdade, e circuitos sequenciais

(18)

Figura 2.1: Aumento do n´umero de trans´ıstores utilizados na FPGA ao longo do tempo [2].

Figura 2.2: Ilustra¸c˜ao de multitasking num sistema computacional.

que contˆem o estado interno do sistema guardado em elementos de mem´oria ou registos. O comportamentos destes circuitos depende do estado em que se encontra a mem´oria e das en-tradas subjacentes ao circuito. Logo, estes circuitos n˜ao podem ser descritos por uma tabela de verdade, mas sim por m´aquinas de estados. As m´aquinas de estados finitos (FSMs) s˜ao uma poderosa ferramenta para descrever o comportamento de sistemas em hardware. Estes sistemas s˜ao definidos por um n´umero finito de estados, ao contr´ario de um circuito s´o com comportamento combinat´orio. Pode-se observar na figura 2.3 que a estrutura de uma FSM ´e composta por um circuito combinat´orio que calcula, tanto as mudan¸cas de estado, como as sa´ıdas da m´aquina, e por uma mem´oria que salvaguarda o estado actual.

Entradas Saídas

Lógica Combinatória

Memória

Figura 2.3: FSM

Podemos descrever dois tipos de m´aquinas de estado: m´aquinas de Moore, ou state output machine, em as sa´ıdas s´o dependem do estado presente, e m´aquinas de Mealy, ou transition output machine, caso as sa´ıdas dependam do estado actual e das entradas externas do sistema. As transi¸c˜oes de estado podem ser regidas por uma entrada externa de rel´ogio (m´aquinas

(19)

s´ıncronas). As m´aquinas ass´ıncronas s˜ao unicamente usadas para casos espec´ıficos, ou seja, quando queremos que a mudan¸ca de estado seja feita aquando uma altera¸c˜ao de uma entrada externa que n˜ao sabemos quando acontecer´a. Como a FPGA j´a possui os recursos necess´arios para implementa¸c˜ao deste tipo de m´aquinas, como portas l´ogicas e flip-flops, a utiliza¸c˜ao de FSMs revela-se uma mais-valia para a descri¸c˜ao de hardware, porque substitui facilmente instru¸c˜oes repetitivas, como ciclos do tipo for e o n´umero de recursos utilizados s˜ao sempre os mesmos, independentemente do n´umero de itera¸c˜oes feitas. Assim, estas m´aquinas s˜ao normalmente aplicadas para controlo de ambientes digitais e a aplica¸c˜ao de algoritmos.

A minimiza¸c˜ao do n´umero de estados da m´aquina de estados ´e um dos factores mais importantes a considerar na sua constru¸c˜ao.Pode-se sempre optimizar o projecto de maneira a que se consiga usar o n´umero m´ınimo de estados, codificados com um n´umero m´ınimo de bits. A redu¸c˜ao de estados est´a correlacionado com a redu¸c˜ao do n´umero de transac¸c˜oes e, por sua vez, com a redu¸c˜ao do n´umero de portas l´ogicas usadas. Dois estados s˜ao equivalentes se uma sequˆencia de sa´ıdas da FSM, inicializada nestes estados, coincidir para uma qualquer sequˆencia de entrada. Esta situa¸c˜ao pode ser demonstrada pelo teorema usado em [23].

2.2.2 M´aquinas de estados finitos hier´arquicas

Figura 2.4: HFSM [29]

Em [29], podemos verificar que m´aquinas de estados finitos hier´arquicos permitem-nos usar chamadas recursivas em hardware, oferecendo uma maior versatilidade no uso de FSMs. A descri¸c˜ao das m´aquinas torna-se mais simples, visto que podemos dividir os algoritmos num conjunto de algoritmos mais pequenos. As m´aquinas s˜ao compostas por m´odulos e cada m´odulo contem uma simples FSM em que cada estado da FSM est´a numa pilha de estados. Na pilha de m´odulos s˜ao guardados os m´odulos que determinam uma fun¸c˜ao diferente da FSM (o nome dos estados pode ser o mesmo) como ilustra a figura 2.4. Para o correcto funcionamento deste tipo de m´aquinas, existe um ponteiro comum `as pilhas, dado que s´o um m´odulo pode estar activo e um estado de cada vez. Dois registos s˜ao usados para executar as fun¸c˜oes

(20)

push e pop para a manipula¸c˜ao das pilhas. Dentro de um m´odulo podemos fazer um push que incrementa o ponteiro que aponta para uma posi¸c˜ao na stack de m´odulos e indicamos o m´odulo para onde queremos saltar. Os m´odulos come¸cam sempre no estado inicial, definido pelo projectista e, quando se decrementa o ponteiro da stack, retorna-se para o m´odulo de onde se chamou o m´odulo actual, no qual ficou indicado o estado de onde recome¸caremos esse mesmo m´odulo. A HFSM (Hierarchical Finite State Machine) acaba quando o ponteiro tiver o valor 0 ou ser atingido o ´ultimo estado do m´odulo activo.

A utiliza¸c˜ao de HFSM ´e prop´ıcia para algoritmos recursivos devido `a reutiliza¸c˜ao dos m´odulos, possibilitando a reserva de menos recursos e maior controlo de blocos digitais.

2.2.3 M´aquinas de estado finitos hier´arquicas paralelas

A figura 2.5 representa uma PHFSM (Parallel Hierarchical Finite State Machine), que consiste numa m´aquina de estados mais avan¸cada do que as anteriores mencionadas. Neste caso, os v´arios m´odulos existentes na PHFSM podem estar activos simultaneamente. A im-plementa¸c˜ao passa por termos mais que uma pilha de m´odulos, controladas pelo circuito combinat´orio. Consoante o n´umero de pilhas K, podemos ter k m´odulos activos. O compor-tamento ´e em tudo parecido `as HFSM, com a particularidade de que um m´odulo n˜ao pode chamar o m´odulo que o invocou e n˜ao pode haver chamadas paralelas de um m´odulo recursivo. Este tipo de implementa¸c˜ao [28] hier´arquica e paralela ´e usada na resolu¸c˜ao de v´arios tipos de algoritmos complexos, permitindo uma redu¸c˜ao significativa de recursos e melhor desempenho.

Figura 2.5: PHFSM [29]

2.3

Aplica¸

oes pr´

aticas

Nesta sec¸c˜ao, s˜ao apresentadas algumas aplica¸c˜oes pr´aticas de algoritmos paralelos, im-plementados em FPGA. Mesmo sendo uma tecnologia relativamente recente, a sua ades˜ao j´a abrange diversas ´areas cientificas:

(21)

2. ´Algebra linear 3. Medicina 4. Biologia

Figura 2.6: Panorama industrial e o fosso para a tec-nologia [3].

A figura 2.6 demonstra que, a passo da evolu¸c˜ao dos processadores, microprocessadores e FPGAs, tamb´em as aplica¸c˜oes computacionais v˜ao exigindo cada vez mais das capacidades destes dispositivos. Nos ´ultimos anos, as aplica¸c˜oes computacionais de alto desempenho est˜ao a exigir mais do que os sistemas computacionais conseguem fornecer, criando um fosso entre a tecnologia existente e as aplica¸c˜oes computacionais [3].

Figura 2.7: Acelera¸c˜ao de algoritmos em FPGA [3].

Actualmente, as FPGAs conseguem fornecer um grande potencial em termos de desem-penho, suportando os recursos para tal. Por ser reprogram´avel, a FPGA pode ser configurada com os mais diferentes tipos de projectos, tudo num ´unico chip. A figura 2.7 mostra os re-sultados que se obtiveram em termos de tempos de execu¸c˜ao de alguns algoritmos, quando

(22)

´e usada uma FPGA para co-processamento e quando, apenas, s˜ao utilizados processadores. Em [35], temos um exemplo da aplica¸c˜ao de algoritmos paralelos que, neste caso, passa pelo c´alculo da factorizar˜ao LU (lower-upper ), na utiliza¸c˜ao de equa¸c˜oes lineares representadas por matrizes e a implementa¸c˜ao em multiprocessadores do algoritmo BDB (Block-Diagonal-Bordered ). Podemos ver nas figuras 2.8 e 2.9 os resultados que conferem o aumento de desempenho usando a FPGA para a implementa¸c˜ao deste tipo de algoritmos.

Figura 2.8: Tempo de execu¸c˜ao em ciclos de rel´ogio, em software e hardware de opera¸c˜oes de v´ırgula flutuante na placa Nios [35].

Figura 2.9: Tempo de execu¸c˜ao de um pro-cessador para calcular a factoriza¸c˜ao LU e os resultados pela substitui¸c˜ao pela placa Nios [35].

A seguir, s˜ao apresentadas em maior detalhe outras implementa¸c˜oes de algoritmos par-alelos em FPGA, mostrando a sua cada vez maior expans˜ao e generalidade.

Algoritmo paralelo CA-CFAR implementado em FPGA

Na transmiss˜ao de dados o sinal emitido raramente ´e limpo, pois existem interferˆencias causadas pelo meio em que ´e inserido. Por isso, existem mecanismos para distinguir o que ´e informa¸c˜ao e n˜ao ´e. Em [24], ´e proposto o desenho para a implementa¸c˜ao de um algoritmo paralelo, que resolve o problema da detec¸c˜ao de sinal em ambientes com ru´ıdo. A detec¸c˜ao do sinal ´e feita a partir de um n´ıvel de decis˜ao fixo que separa o ru´ıdo do sinal em si, supondo que o n´ıvel de ru´ıdo ´e quase sempre menor do que o sinal. Para casos onde exista interferˆencia aleat´oria de ru´ıdos com n´ıveis de intensidade maiores que o sinal, n˜ao ´e garantido que se obt´em o sinal pretendido. Se o ru´ıdo for maior que o limiar de decis˜ao (threshold ), o ru´ıdo ir´a ser visto como sinal, isto ´e, falso alarme. Assim, um m´etodo como este n˜ao consegue que o False Alarm Ratio (FAR) seja constante, logo a probabilidade de haver falso alarme ´e alta. A solu¸c˜ao apresentada passa por construir um processador Constant False Alarm Ratio (CFAR). Este processador tem como fun¸c˜ao adaptar o n´ıvel de decis˜ao consoante a avalia¸c˜ao preliminar do n´ıvel de ru´ıdo. Em sistemas com radares e sistemas de GPS este tipos de implementa¸c˜ao ´e fortemente usada.

O ajuste do n´ıvel de decis˜ao, atrav´es da avalia¸c˜ao preliminar do ru´ıdo e, se poss´ıvel em tempo real, ´e um dos objectivos do algoritmo, o que implica recursos computacionais elevados. Em [24], ´e proposto em hardware reconfigur´avel k - Cell Average (CA) - CFAR em paralelo. A figura 2.10, ilustra como s˜ao aplicados dois CA-CFAR em paralelo, numa mistura de sinal com ru´ıdo Gaussiano. Ambas as janelas de execu¸c˜ao processam o sinal em paralelo e cada uma produz uma sa´ıda. Portanto tem-se dois valores de sa´ıda a cada ciclo de rel´ogio. Em rela¸c˜ao a um ´unico CA-CFAR, a velocidade de execu¸c˜ao vai duplicar, logo, se se tiver k CA-CFAR teremos um algoritmo k vezes mais r´apido.

Os resultados experimentais foram:

ˆ Foi implementado em hardware reconfigur´avel um CA-CFAR obtendo-se uma taxa de sa´ıda de 974Mbps e para 32 CA-CFAR em paralelo uma taxa 31 Gbps numa Virtex II

(23)

Figura 2.10: Dois CA-CFAR em paralelo em diferente ciclos de rel´ogio [24].

Figura 2.11: Estrutura de dos dois CA-CFAR em paralelo [24].

Pro XC2VP30 com uma frequˆencia de rel´ogio de 60 MHz.

ˆ Os recursos l´ogicos utilizados na implementa¸c˜ao atingiram os 1,4% para a implementa¸c˜ao de um ´unico CA-CFAR e 37,5% para 32 CA-CFAR na FPGA.

Implementa¸c˜ao de um algoritmo para processamento de imagem m´edica

Como foi dito anteriormente, as FPGAs j´a s˜ao utilizadas em muitas ´areas. Desta forma, em [34], ´e implementado em FPGA um m´etodo para a optimiza¸c˜ao de processamento de imagens m´edicas, como tomografias. Estes processamentos requerem alto tratamento de dados com alto desempenho. A explica¸c˜ao do algoritmo pode ser encontrada na referˆencia [34]. O algoritmo paralelo utiliza um sistema de coordenadas para localizar a radia¸c˜ao n˜ao absorvida pela estrutura interna do objecto em causa, atingindo uma s´erie de detectores. Os resultados do aumento do desempenho usando uma FPGA para este tipo de algoritmo pode-se ver na figura 2.12.

Figura 2.12: Resultados do desempenho usando uma FPGA ou apenas software no processamento de imagens m´edicas [34].

(24)

Algoritmo paralelo para ordena¸c˜ao de dados usando FPGA

Ao longo do tempo, muitos modelos de algoritmos de ordena¸c˜ao foram implementados consoante a rapidez necess´aria e mem´oria dispon´ıvel. No entanto, n˜ao existe um que satisfa¸ca todos estes aspectos para cada aplica¸c˜ao espec´ıfica: alguns podem ser r´apidos, mas em casos especiais, podem n˜ao ser eficazes. Em [22], ´e descrito um algoritmo de ordena¸c˜ao que tem em considera¸c˜ao a rapidez de execu¸c˜ao, bem como o hardware necess´ario para ser eficiente.

Geralmente, a ordena¸c˜ao consiste em ler, comparar e guardar os dados em mem´oria. O algoritmo em si ´e simples, mas para ser optimizado, ´e necess´ario reduzir o n´umero de opera¸c˜oes feitas mas, em contrapartida, a complexidade aumenta. Em computadores de uso geral, os processadores contˆem cache L1 e L2 que operam a frequˆencias altas, muito mais que um processador implementado numa FPGA. Logo, para este algoritmo ser mais r´apido do que processadores utilizados em computadores, este tem que ter alto n´ıvel de paralelismo.

Neste contexto, podem-se aplicar opera¸c˜oes em paralelo em redes de ordena¸c˜ao, que tˆem alto desempenho, mas s´o para um certo n´umero de dados, pois o hardware necess´ario au-mentaria exponencialmente. Uma outra forma de ordena¸c˜ao consiste em usar usar v´arios processadores com um mecanismo sofisticado de distribui¸c˜ao de dados. Estes processadores podem ser MicroBlaze ou PicoBlaze que, por exemplo numa Virtex-II 6000 podem ser im-plementados 8-12 MicroBlazes e muitos mais PicoBlaze.

Contudo, estas solu¸c˜oes est˜ao limitadas pela velocidade de entrada e sa´ıda de dados da mem´oria e dos recursos dispon´ıveis pela FPGA. Em [22], os dados de entrada s˜ao um conjunto de 256 MB, em que cada elemento ´e constitu´ıdo por 64 bits. Os dados tˆem que ser ordenados e guardados pela ordem A, R e B, como ilustra a figura 2.13.

Figura 2.13: Formato dos dados de entrada [22].

Desta maneira, tanto n´umeros inteiros de 32 bits ou de 64 bits podem ser comparados. Os dados de entrada s˜ao guardados a 100Mhz, numa mem´oria externa SDRAM de 64 bits wide, enquanto o processo paralelo de ordena¸c˜ao pode usar os blocos RAM internos da FPGA. A Virtex-II 6000 cont´em 144 blocos RAM, em que cada um ´e constitu´ıdo por 18Kbits, com a op¸c˜ao de serem dual-port, o que possibilita a leitura e escrita ao mesmo tempo, duplicando a rapidez de acesso `a mem´oria.

O algoritmo paralelo em si passa por dividir os elementos n˜ao ordenados em duas listas iguais. Por sua vez pode ordenar estas lista e uni-las (merge) numa ´unica s´o. Este algoritmo necessita de 2n posi¸c˜oes de mem´oria para ordenar n elementos. Os passos da ordena¸c˜ao est˜ao representados na figura 2.14, onde, inicialmente, os dados entram numa rede de ordena¸c˜ao de 8 elementos para reduzir a complexidade do algoritmo recursivo. Os elementos s˜ao escritos em 32 c´elulas merge pela rede anterior. Depois, os elementos s˜ao ordenados pelas 32 c´elulas em paralelo (cada uma com 512 elementos). Os 32x512 valores s˜ao ordenados por uma ´arvore bin´aria para posteriormente, serem armazenados numa mem´oria RAM tempor´aria. Enquanto ´e feita esta opera¸c˜ao, outros dados s˜ao postos a pronto para serem ordenados. Ao fim de se atingir 16384 elementos, na mem´oria RAM tempor´aria, estes s˜ao enviados e guardados na

(25)

mem´oria externa.

Figura 2.14: Esquema do algoritmo para ordena¸c˜ao dos dados visto em [22].

Eficiˆencia de algoritmos de multiplica¸c˜ao de matrizes usando novas FPGA Em [25], ´e dito que a multiplica¸c˜ao de matrizes ´e uma opera¸c˜ao fundamental no que diz re-speito ao processamento de imagem, sinais digitais e codifica¸c˜ao; da´ı a importˆancia da redu¸c˜ao do tempo computacional que ´e utilizado para se executar essas tarefas. Em muitas imple-menta¸c˜oes s˜ao utilizados tamanhos de matrizes relativamente pequenos, devido `a ausˆencia de recursos necess´arios para implementa¸c˜oes desse tipo. Com o aumento das dimens˜oes das matrizes, as FPGAs a utilizar ter˜ao de ser obrigatoriamente muito mais sofisticadas, de modo a suportar todos os recursos l´ogicos necess´arios. Nesta tese, a FPGA de prototipagem usada, que ser´a caracterizada mais `a frente, n˜ao tem componentes l´ogicos para dimens˜oes de ma-trizes algo elevadas, n˜ao sendo poss´ıvel implementar algoritmos paralelos de multiplica¸c˜ao de matrizes.

Na figura 2.15, ´e demonstrado o processo do algoritmo base para a multiplica¸c˜ao de matrizes. Os dados de entrada da matriz A e B s˜ao postos na mem´oria da FPGA de modo a que seja poss´ıvel a leitura de uma coluna da matriz A ou uma linha da matriz B. O resultado de um elemento da matriz de sa´ıda C, ´e feito num ´unico ciclo de rel´ogio.

Figura 2.15: Sequˆencia do algoritmo paralelo da multiplica¸c˜ao de matrizes [25].

A estrutura dos elementos do processo da multiplica¸c˜ao est´a representada na figura 2.16. αmcorresponde ao atraso do multiplicador, αa`a latˆencia do somador e αf ao atraso provocado

(26)

devido a caminhos dedicados desde os Blocos RAM `a entrada do multiplicador, o que torna esse tempo muito pequeno em rela¸c˜ao aos outros acima mencionados. Na leitura de uma determinada posi¸c˜ao de mem´oria do Bloco RAM, de um ciclo de rel´ogio para outro, os valores est˜ao prontos a serem utilizados correctamente.

Figura 2.16: Estrutura dos elementos de processo segundo [25].

Durante o c´alculo do elemento da matriz Cij, este, para estar pronto a ser guardado o

produto do termo Aik∗Bki, tem que estar dispon´ıvel na sa´ıda do somador e, ao mesmo tempo

(mesmo ciclo de rel´ogio), o produto do termo Ai(k+1)∗ B(k+1)i ´e feito no multiplicador.

Em rela¸c˜ao ao tempo total gasto pelo sistema, dado as matrizes de entrada Ann, Bnn e

uma matriz de sa´ıda Cnn, os valores de entrada s˜ao lidos em nk2 ciclos de rel´ogio (onde k ´e

um inteiro). Visto que o atraso do multiplicador ´e αm e do somador αa, a matriz resultado

C estar´a pronta segundo a equa¸c˜ao 2.1.

T empoT otalDec´alculo = nk2+ αm + αa[Ciloderel´ogio] (2.1)

2.4

Sistemas digitais reconfigur´

aveis

Com o passar dos anos, o desenvolvimento das aplica¸c˜oes fizeram com que a sua complex-idade aumentasse substancialmente. O uso de circuitos integrados com l´ogica padr˜ao como TTLs e CMOS apresentam um consumo de energia demasiado elevado devido ao aumento da ´area destes. Em alguns dispositivos, a l´ogica descrita neles j´a vinha pr´e-definida pelo fabricante, o que levava a muitos utilizadores a interligar v´arios circuitos integrados para al-can¸carem o desenho final pretendido. Como tal, foi necess´ario desenvolver mecanismos que contornassem estes problemas, at´e que surgiram dispositivos baseados em l´ogica program´avel (PLD), permitindo uma liberdade e flexibilidade ao projectista. Assim sendo, podemos dividir os PLDs nas seguintes categorias:

SPLD - Simple PLD CPLD - Complex PLD

FPGA - Fiel Programmable Gate Array e dentro dos SPLD podemos encontrar: PROM - Programmable ROM

(27)

PLA - Programmable Logic Array PAL - Programmable Array Logic GAL - Generic Array Logic

Os dispositivos SPLD, como o nome indica, s˜ao os mais simples, mas tamb´em os mais econ´omicos sendo, portanto, usados pelas demais aplica¸c˜oes comerciais ou industriais. Estes s˜ao constitu´ıdos por portas l´ogicas AND e OR e um FLIP-FLOP que integram cada macro-c´elula da SPLD. Assim, por cada macro-c´elula pode-se construir uma fun¸c˜ao l´ogica, em que o resultado da fun¸c˜ao l´ogica, devido a uma dada entrada, ser´a guardada no FLIP-FLOP at´e `

a pr´oxima transi¸c˜ao de rel´ogio.

PROM

Uma PROM (Programmable read-only memory) como a da figura 2.17, ´e um dispositivo que possibilita guardar informa¸c˜ao digital, e s´o pode ser programada uma vez pelo utilizador. Os bits da PROM s˜ao definidos pela destrui¸c˜ao de um fus´ıvel ou de um anti-fus´ıvel, tomando o valor ”0”ou ”1”respectivamente, logo, estas mem´orias, depois de programadas, s´o podem efectuar leituras. As principais aplica¸c˜oes deste tipo de dispositivos passam por armazenar permanentemente programas como jogos de computador. Posteriormente, sa´ıram para o mercado, mem´orias do tipo EPROM (Erasable Programmble Read Only Memory) e EEPROM (Electrically Erasable Programmble Read Only Memory), que possibilitam a reprograma¸c˜ao destas, tendo como principal diferen¸ca o processo de apagamento da mem´oria, em que no primeiro caso passa pela exposi¸c˜ao de raios ultravioletas e, no segundo, ´e feito electricamente [14].

Figura 2.17: Imagem de uma PROM [4].

PLA

PLAs s˜ao dispositivos que possibilitam a implementa¸c˜ao de fun¸c˜oes Booleanas na forma de soma de produtos. ´E formada por dois planos: o plano OR e o plano AND, que com a liga¸c˜ao de ambos permite executar uma fun¸c˜ao l´ogica. A estrutura interna de uma PLA est´a demonstrada na figura seguinte:

(28)

Figura 2.18: Estrutura de uma PLA [5].

PAL

A figura 2.19 representa uma estrutura de dispositivo PAL com 4 entradas e 3 sa´ıdas. As entradas s˜ao alimentadas com Buffers inversores e est˜ao ligadas `as entradas de portas AND que podem ser programadas. As sa´ıdas das portas AND est˜ao ligadas a um array de portas OR com liga¸c˜oes fixas. Portanto, s´o o plano AND ´e que ´e configur´avel, sendo o plano OR fixo, logo, tem-se na sa´ıda do dispositivo um conjunto de soma de produtos em que estes s˜ao program´aveis e as somas s˜ao fixas, perdendo-se liberdade em termos de implementa¸c˜ao em rela¸c˜ao `as PLAs.

Figura 2.19: Estrutura de um PAL [6].

GAL

Criado em 1983, este dispositivo tem as mesmas propriedades que uma PAL, mas com a vantagem de ser reprogramado, sendo muito ´util para testes de desenvolvimento de um projecto, visto que erros l´ogicos podem ser corrigidos no mesmo dispositivo.

(29)

Figura 2.20: Exemplo de uma GAL [7].

CPLD

Com a evolu¸c˜ao dos circuitos combinat´orios, o uso de recursos aumentou em diversas implementa¸c˜oes l´ogicas cada vez mais complexas. A solu¸c˜ao encontrada foi integrar v´arios PLDs (ou SPLD), interligadas por blocos Interconnect Array que, conforme a fun¸c˜ao l´ogica, ser˜ao activas ou n˜ao. Al´em disto, existem blocos de I/O para cada um dos blocos SPLD.

Figura 2.21: Estrutura de uma CPLD.

2.4.1 FPGA (Field Programmable Gate Array )

´

E o dispositivo mais avan¸cado no que toca a sistemas digitais reconfigur´aveis. Este, ´e constitu´ıdo por blocos l´ogicos configur´aveis (CLBs), ou seja, elementos b´asicos com fun¸c˜oes l´ogicas ligados por conex˜oes tamb´em elas configur´aveis (PI) e por blocos de entrada e sa´ıda, mais conhecidos por blocos IOB, como ilustra a figura 2.22. Desta maneira, a FPGA n˜ao est´a restringida a uma fun¸c˜ao qualquer em hardware, sendo esta configurada de acordo com a aplica¸c˜ao desejada. Hoje em dia, depois de ser implementado o projecto na FPGA, o hardware pode sofrer altera¸c˜oes dinamicamente, desde que o desenho o possibilite. Esta ´e tamb´em uma das vantagens em rela¸c˜ao aos ASICs, constru´ıdos para fazer fun¸c˜oes espec´ıficas, n˜ao possibilitando grande flexibilidade.

Os Blocos CLBs s˜ao a unidade l´ogica b´asica, que consiste numa matriz configur´avel de 4 ou 6 entradas, dependendo da FPGA, constitu´ıdas por LUTs(lookup Tables), funcionando

(30)

Figura 2.22: Arquitectura interna de uma FPGA [8].

em conjunto com elementos de selec¸c˜ao e flip-flops. Dentro da FPGA, os CLBs podem de-sempenhar v´arias fun¸c˜oes, como l´ogica combinat´oria para circuitos sequenciais, shift-registers e serem usados como mem´oria RAM distribu´ıda.

Como interface com os blocos l´ogicos, temos os blocos de input/output ligados aos portos de encapsulamento da FPGA. Estes podem ser configurados como entrada e/ou sa´ıda.

Para a liga¸c˜ao entre os v´arios CLBs e Blocos IOBS, existem os PIs. Estes asseguram as liga¸c˜oes de clock, sinais globais partilhados pelos blocos CLBs e sinais que est˜ao ligados aos blocos IOBs. Esta gest˜ao ´e feita pelas ferramentas de implementa¸c˜ao espec´ıfica, libertando-nos desta tarefa algo complicada. Em casos mais complexos, ´e poss´ıvel ao utilizador ser ele a configurar manualmente estas liga¸c˜oes.

As FPGAs fornecem-nos blocos funcionais embutidos com caracter´ısticas espec´ıficas, como por exemplo blocos RAM, importantes na gest˜ao de recursos (visto que utilizando estes, n˜ao estamos a usar CLBs para armazenar informa¸c˜ao), DCMs (Digital Clock Manager ) impor-tantes para assegurar o sincronismo entre blocos, possibilitando a escolha de frequˆencias e fases de trabalho (diferentes da frequˆencia do rel´ogio externo da FPGA) e, fundamental para este trabalho, multiplicadores com elementos com 18 bits cada, que ser˜ao melhor caracteriza-dos posteriormente.

Vantagens

Analisados os principais elementos disponibilizados pela FPGA, as vantagens s˜ao mais que evidentes:

ˆ Reutiliza¸c˜ao - Permite reconfigurar o circuito integrado com aplica¸c˜oes totalmente diferentes.

ˆ Paralelismo - Podemos executar opera¸c˜oes distintas ao mesmo tempo.

ˆ Eficiˆencia - Com a ajuda de software, a passagem da especifica¸c˜ao de um circuito para hardware ´e imediata, para al´em disso pode-se efectuar testes de projectos bastante r´apidos.

ˆ Capacidade - A disponibiliza¸c˜ao de milh˜oes de portas l´ogicas program´aveis permite-nos a implementa¸c˜ao de qualquer tipo de circuito.

(31)

2.4.2 Aplica¸c˜oes

Figura 2.23: Exemplos de aplica¸c˜oes de utiliza¸c˜ao das FPGAs [9].

A utiliza¸c˜ao de FPGA ´e cada vez mais vasta e implementada em diversas ´areas industrias e, actualmente, encontram-se em aparelhos electr´onicos usados diariamente. Os custos cada vez mais reduzidos possibilitaram tal ades˜ao. Por exemplo, temos [15] na industria autom´ovel sistemas de assistˆencia de condu¸c˜ao e sistemas de informa¸c˜ao. Na ind´ustria aeroespacial as FPGAs s˜ao utilizadas em processos de criptografia e comunica¸c˜oes r´adio para transmiss˜oes Broadcast ; em televisores digitais, s˜ao aplicadas na ind´ustria de automa¸c˜ao para controlo de motores; na medicina para processamento de imagem, comunica¸c˜oes sem fios, etc.

2.5

Fabricantes e placas de prototipagem

O maior fabricante e vendedor de FPGAs ´e a Xilinx. Foi esta empresa que inventou este dispositivo e det´em maior desenvolvimento nesta ´area. Segue-se a Altera que, em conjunto com a Xilinx, detˆem cerca de 80% do mercado. Apresenta-se, desta forma, uma lista com as fabricantes mais importantes [16]:

ˆ Xilinx ˆ Altera ˆ LsiLogic ˆ Actel ˆ Lattice

Restringindo-nos a FPGAs da Xilinx, n˜ao s´o porque a FPGA utilizada neste trabalho ´e deste fabricante, mas tamb´em porque cont´em uma vasta gama de produtos suficientes para conhecer as diferentes capacidades existentes actualmente.

(32)

Sucedendo a v´arias gera¸c˜oes anteriores, a Xilinx lan¸cou recentemente duas fam´ılias de FPGA (Virtex 6 e Spartan 6) respectivamente, uma visando o alto desempenho e outra, mais econ´omica mas tamb´em com bastantes capacidades. Na Virtex 6 a tecnologia usada ´e de 40nm e na Spartan 6 ´e de 45nm, diminuindo a ´area de sil´ıcio ocupada, reduzindo os custos em rela¸c˜ao `as anteriores fam´ılias. A figura 2.24, mostra a compara¸c˜ao destas duas FPGAs com anteriores fam´ılias:

Figura 2.24: Compara¸c˜ao das caracter´ısticas de FPGAs da Xilinx [10].

Placa de prototipagem

A placa usada para a execu¸c˜ao deste trabalho foi a Nexis 2, constru´ıda pela Digilent [11]. A figura 2.25 apresenta algumas caracter´ısticas da placa. De notar que a placa usada ´e igual `

a da imagem, com a diferen¸ca em que a FPGA utilizada neste trabalho tem 1200k portas e a do desenho apenas 500k portas de sistema.

Figura 2.25: Diagrama de blocos da placa Nexis 2 [11].

Caracter´ısticas da placa

(33)

ˆ Configura¸c˜ao atrav´es de uma liga¸c˜ao USB2.

ˆ Alimenta¸c˜ao por USB, bateria ou simples cabo de alimenta¸c˜ao ˆ Uma PROM Flash n˜ao vol´atil para configurar a FPGA. ˆ Oscilador externo de 50Mhz.

ˆ Interfaces PS/2, VGA (8 bit de cor) e RS232.

ˆ 60 liga¸c˜oes I/O da FPGA para conectores de expans˜ao. ˆ 8 LEDs, 4 displays de 7 segmentos, 4 bot˜oes, 8 interruptores.

Figura 2.26: Nexis 2 [11].

Como iremos ver mais `a frente, os recursos disponibilizados pela FPGA s˜ao importantes para a implementa¸c˜ao do projecto e, por isso, s˜ao apresentadas em detalhe algumas carac-ter´ısticas da FPGA Spartan3E 1200 da Xilinx.

O resumo dos recursos l´ogicos dispon´ıveis est˜ao representados na tabela 2.1 com os re-spectivos valores.

FPGA Total de CLBs Slices LUTs /Flip-Flops C´elulas l´ogicas RAM16 RAM Distribu´ıda em bits

XC3S1200E 2,168 8,672 17,344 19,512 8,672 138,752

Tabela 2.1: Recursos l´ogicos da Spartan3E 1200.

A tabela 2.2 apresenta os n´umeros dispon´ıveis de macro-blocos embutidos na FPGA. Em rela¸c˜ao aos blocos RAM da FPGA estes est˜ao agrupados em duas colunas, em que cada coluna contem 14 blocos e cada bloco RAM contem 18k bits. Os multiplicadores dedicados suportam a opera¸c˜ao P = A× B, em que A e B podem no m´aximo ter 18 bits cada e a sa´ıda P ´e composta por 36 bits. (Ver figura 2.27.)

(34)

Figura 2.27: Esquema de um multi-plicador embutido na FPGA [12].

FPGA Portas do sistema Block RAM bits Blocos RAM totais Multiplicadores18x18 dedicados DCMs

XC3S1200E 1200 504K 28 28 8

Tabela 2.2: Macro-blocos na Spartan3E 1200.

2.6

Multiplica¸

ao de matrizes e vectores

Nesta sec¸c˜ao, vamos rever alguns dos conceitos b´asicos sobre teoria de multiplica¸c˜ao de matrizes e vectores e algumas propriedades.

2.6.1 Defini¸c˜ao

Uma matriz ´e uma tabela de m× n n´umeros, representada sobre a forma de um quadro com m linhas e n colunas. As linhas horizontais s˜ao chamadas linhas, e as verticais colunas e m e n s˜ao as dimens˜oes das matrizes. Por exemplo,

A = ( a11 a12 a13 a21 a22 a23 ) = ( 1 2 3 4 5 6 ) (2.2) a matriz A = (aij) tem dimens˜ao 2× 3, e i=1,2 e j =1,2 e 3. ´E usual que as letras em

mai´usculas representem as matrizes e as letras min´usculas o ´ındice, para representar os seus elementos. O conjunto de todas as matrizes m× n com valores reais denota-se por ℜm×n.

A transposta de uma matriz denota-se por AT, que resulta da troca das linhas por colunas. Para o exemplo da equa¸c˜ao 2.2, temos:

AT =   12 45 3 6   (2.3)

Um vector ´e um conjunto de n´umeros contidos numa tabela uni-dimensional.

v =   12 3   (2.4)

(35)

A equa¸c˜ao 2.4 representa um vector com dimens˜ao 3. Para representar vectores usam-se letras min´usculas e os seus elementos pelo seu ´ındice, neste caso xi, com i =1, 2 e 3. Um

vector coluna corresponde a uma matriz de n× 1 elementos e um vector linha equivale a uma matriz de 1× n elementos. A transposta de um vector linha ´e um vector coluna e vice-versa.

vT =( 1 2 3 ) (2.5)

A multiplica¸c˜ao de matriz por um vector ´e definida como: partindo do pressuposto que o primeiro operando (do lado esquerdo do operador) e o segundo operando da multiplica¸c˜ao s˜ao compat´ıveis, isto ´e, o n´umero de colunas do primeiro operando ´e igual ao n´umero de linhas do segundo operando, (em geral, as express˜oes A× v, v × A ou v × c, assume-se logo que s˜ao compat´ıveis), tendo como possibilidades de multiplica¸c˜ao as seguintes:

Se A = (aij) ´e uma matriz m×n e v = (vj) um vector com dimens˜ao n×1, o resultado da

multiplica¸c˜ao ´e um vector c = A× v, com c de dimens˜ao m × 1. Se v = (vj) ´e um vector com

dimens˜ao 1× n e uma matriz A = (aji) com dimens˜ao n× m, o resultado de multiplica¸c˜ao ´e

um vector c = v× A, com c de dimens˜ao 1 × m.

Por fim, podemos ter a multiplica¸c˜ao entre dois vectores: seja um vector linha v com dimens˜ao m×1 e um vector coluna d com dimens˜ao 1×n, teremos o resultado da multiplica¸c˜ao uma matriz com dimens˜oes m× n ou um vector coluna v com dimens˜ao 1 × n e um vector linha d com dimens˜ao m×1, teremos o resultado da multiplica¸c˜ao uma matriz com dimens˜oes 1× 1 elementos.

Portanto, supondo uma matriz de n linhas e n colunas e um vector de n elementos:

A =    a11 · · · a1n .. . . .. ... an1 · · · ann    e v =    v1 .. . vn    (2.6)

a multpilica¸c˜ao entre eles denota-se:

Av =    a11v1+ · · · +a1nvn .. . ... ... an1v1+ · · · +annvn    =    ∑n j=1a1jvj .. . ∑n j=1anjvj    =    (Av)1 .. . (Av)n    (2.7)

logo o elemento i do vector Av ´e:

(Av)i = nj=1 aijvj (2.8) 2.6.2 Algoritmo

Os algoritmos s˜ao muito importantes para a eficiˆencia de um sistema computacional e, para tal, ´e necess´ario adapt´a-lo aos recursos que est˜ao ao nosso dispor. O algoritmo de multiplica¸c˜ao de matriz e vector, supondo o caso geral, uma matriz de dimens˜ao n× m e um vector com m elementos obtˆem um vector com n elementos, estando exemplificado na figura 2.28.

Em termos de n´umeros de opera¸c˜oes trata-se de um algoritmo que executa m× n multi-plica¸c˜oes e n× (m − 1) somas, que no total perfaz (m × n + n × m − 1) opera¸c˜oes, isto sem se ter em considera¸c˜ao que, na realidade, os elementos da matriz e do vector devem estar

(36)

Leitura do elemento (i,j) da matriz

Leitura do elemento (j) do vector

Multiplicação do elemento (i,j) da matriz pelo elemento (j) do vector

Armazenamento

do resultado no registo j j=m;

j=j+1;

Soma dos registos 1 até j

Armazenamento do resultado na posição (i) do vector resultado i=n; i=i+1; j=1; Sim Não Não Sim Inicio i=1; j=1; Fim

Figura 2.28: Diagrama do algoritmo da multiplica¸c˜ao de uma matriz por um vector.

em mem´oria e, portanto, existem opera¸c˜oes de acesso `a mem´oria para a leitura e escrita do vector resultado. Este n´umero de acessos vai depender do tipo de mem´oria usada (visto que h´a mem´orias em que se pode ler e escrever ao mesmo tempo) e do tipo de organiza¸c˜ao dos elementos em mem´oria.

2.6.3 Implementa¸c˜oes

Nesta sec¸c˜ao, s˜ao apresentadas algumas implementa¸c˜oes de multiplica¸c˜ao de matrizes por um vector em FPGA. Em [26],´e implementada a multiplica¸c˜ao de matriz por um vector utilizado no m´etodo finito de elementos. Neste caso, ´e assumido que a matriz e o vector s˜ao considerados esparsas. Por exemplo, numa matriz de 100 tipo de elementos somente 20 s˜ao diferentes de zero. Embora 100 elementos n˜ao sejam dif´ıceis de armazenar, se a matriz for maior, podendo ter milh˜oes de linhas e colunas, o n´umero total de elementos seria imposs´ıvel de armazenar na FPGA utilizada neste projecto. Contudo, o n´umero de elementos diferentes de zero ´e pequeno, o que quer dizer que ainda podemos guardar a matriz assumindo que o resto dos n´umeros s˜ao zeros. O armazenamento deste tipo de matrizes ´e feito por um sistema de coordenadas definido por trˆes arrays. O primeiro array guarda o n´umero das linhas de cada elemento diferente de zero; o segundo array guarda o n´umero das colunas que contˆem

(37)

elementos diferentes de zero e, por fim, o terceiro array guarda os valores dos elementos diferentes de zero. Assim, s´o se guarda a posi¸c˜ao dos elementos na matriz e o seu valor. Para o caso anterior, s´o se guardava 3∗(nelementosdiferentesdezero) = 60 elementos, em vez dos 100 elementos iniciais.

Uma maneira ainda mais eficiente para o armazenamento de matrizes, no sentido de poupar espa¸co de mem´oria, ´e o armazenamento em Compressed Sparse Row (CSR), existindo, para isso, um array que d´a o n´umero da coluna, um array que d´a cada elemento da coluna e um array que nos diz qual ´e o primeiro o n´umero do elemento numa dada linha. Esta implementa¸c˜ao tem como principal objectivo a resolu¸c˜ao de grandes sistemas de equa¸c˜oes atrav´es do m´etodo do elemento finito. Esta ´e baseada num array de elementos de processamento (PEs) em pipeline. Na tentativa de resolu¸c˜ao de problemas com sistemas de equa¸c˜oes lineares, estes caracterizam-se pelo facto do sistema ser composto por uma matriz (A) que, geralmente, tem grandes dimens˜oes e ´e esparsa. M´etodos iterativos como o m´etodo de gradiente conjugado (CG) s˜ao usados para resolver tais sistemas de equa¸c˜oes lineares, devido aos recursos necess´arios de armazenamento serem baixos. A principal opera¸c˜ao que caracteriza este m´etodo ´e a multiplica¸c˜ao de matriz (sparse) por um vector.

A matriz A tem dimens˜ao de N× N e o vector x e y de N × 1, em que y ´e o resultado da multiplica¸c˜ao. A implementa¸c˜ao recai sobre uma arquitectura baseada num array linear, o SMVM-pipeline, de forma a executar opera¸c˜oes SMVM, orientadas ao m´etodo finito de elementos (Finite Elementes Method ). A arquitectura desta implementa¸c˜ao est´a ilustrada na figura 2.29. O objectivo desta implementa¸c˜ao consiste em executar opera¸c˜oes SMVM em paralelo com elementos de processamento ligados em s´erie, em que cada um cont´em unidades aritm´eticas de v´ırgula flutuante, tais como somadores e multiplicadores. Os elementos da matriz A s˜ao distribu´ıdos algoritmicamente, que alimentam os elementos de processamento tal como os vectores X e Y que alimentam os elementos de processamento, mas na horizontal como mostra a figura 2.29.

Figura 2.29: Multiplica¸c˜ao de uma Sparse matriz por um vector em pipeline [26].

Uma outra implementa¸c˜ao que foi o primeiro trabalho dedicado a SpMVM (Sparse Matrix Vector Multiplication) de v´ırgula flutuante em FPGAs, est´a descrito em [27]. A proposta implementada foi uma implementa¸c˜ao simples e eficiente para SpMVM de v´ırgula flutuante, utilizando operadores em ´arvore bin´aria. Tamb´em neste caso, o formato de armazenamento das matrizes de entrada foi o CRS.

De notar, que o desempenho do desenho s´o depende do n´umero de elementos diferentes de zero em cada linha e n˜ao pela maneira como os elementos est˜ao distribu´ıdos pelas colunas. A arquitectura b´asica do desenho est´a representada na figura 2.30. Consiste numa ´arvore bin´aria com k folhas, neste caso k = 4. Cada folha cont´em um multiplicador de v´ırgula

(38)

flutuante e um local de armazenamento representados por n´os. Cada k− 1 n´os internos da ´

arvore tˆem somadores de v´ırgula flutuante.

A sa´ıda da ´arvore est´a ligada a um circuito de redu¸c˜ao que acumula resultados interm´edios. H´a tamb´em uma unidade de controlo alimentada por um vector len respons´avel por indicar quantos elementos diferentes de zero tem cada linha da matriz.

A matriz A e o vector x s˜ao inicialmente guardados numa mem´oria externa. Quando o processo iniciar, o vector ´e lido e carregado por todos n´os das folhas da ´arvore. Ap´os a inicializa¸c˜ao, a cada ciclo de rel´ogio s˜ao lidos os elementos da matriz e os multiplicadores s˜ao respons´aveis por ler na mem´oria local o valor do vector x correspondente `a multiplica¸c˜ao em causa. Esta estrutura b´asica executa nz (n´umero de elementos diferentes de zero) opera¸c˜oes

mais 2n opera¸c˜oes de I/O.

Outra implementa¸c˜ao de SpMVM com v´ırgula flutuante ´e descrita em [20],que no fundo ´e uma paraleliza¸c˜ao do CSR SpMVM que passa por fragmentar um conjunto de produtos em n pontos, ao longo de elementos de processamento.

Figura 2.30: Estrutura b´asica do desenho para k = 4 [27].

Em [31], ´e implementado um SpMVM mas com uma maior vertente na redu¸c˜ao da neces-sidade de largura de banda de I/O, que passa por partilhar os resultados pelos elementos de processamento. Atrav´es da redu¸c˜ao dos tempos de comunica¸c˜ao e v´arios overheads, obteve-se um desenho com melhor desempenho que os anteriores.

2.6.4 Resultados

Para o primeiro exemplo da multiplica¸c˜ao de matriz por um vector, foram implementados em FPGA 8 elementos de processamento, com uma frequˆencia de trabalho de 110 MHz,

(39)

obtendo-se um pico de desempenho de 1,76 GFLOPS. A figura 2.31 apresenta os resultados em MFLOPS para matrizes de teste de um FEM (Finite Elements Method ) e consoante a largura de banda da SDRAM utilizada. A figura 2.32 apresenta uma compara¸c˜ao entre diferentes plataforma computacionais a executar o SMVM.

Figura 2.31: Desempenho em MFLOPS em fun¸c˜ao da largura de banda da SDRAM [26].

Figura 2.32: Compara¸c˜ao do desempenho do SMVM com outros sistemas computacionais [26].

Para o segundo exemplo, foram realizados testes para diferentes matrizes em termos de dimens˜ao e n´umeros de elementos diferentes de zero. Os resultados atingidos est˜ao ilustrados na figura 2.33. Para este exemplo, n = 4134 e no m´aximo cada linha tem 81 elementos diferentes de zero.

Em [20], tem-se a utiliza¸c˜ao de v´arias FPGAs para o processamento do CSR SpMVM em paralelo. Os resultados est˜ao na figura 2.34.

Os resultados da implementa¸c˜ao em [31] foram bastantes positivos com speedups muito bons em rela¸c˜ao a um Pentium IV 2.8 GHz, representados na figura 2.35.

2.7

Multiplica¸

ao de matrizes

2.7.1 Defini¸c˜ao

´

E definido a multiplica¸c˜ao de matrizes como: partindo que A e B e s˜ao compat´ıveis, isto ´e, o n´umero de colunas da matriz A ´e igual ao n´umero de linhas da matriz B (em geral, a express˜ao A× B assume-se que do principio que s˜ao compat´ıveis). Se A = (aij) ´e uma matriz

m× n e B = (bjk) uma matriz com n× p, o produto entre elas ´e uma matriz C = A × B,

com C = (Cik), de m× p elementos. A f´ormula de multiplica¸c˜ao de matrizes ´e a seguinte:

A =    a11 · · · a1n .. . . .. ... am1 · · · amn    e B =    b11 · · · b1p .. . . .. ... bn1 · · · anp    (2.9)

(40)

Figura 2.33: Desempenho em MFLOPS em fun¸c˜ao da frequˆencia de tra-balho e largura de banda da mem´oria [27].

Figura 2.34: Desempenho em MFLOPS em paralelo [27].

AB =    a11b11+· · · + a1nbn1 · · · +a11b1p+· · · + a1nbnp .. . . .. ... am1b11+· · · + amnbn1 · · · +am1b1p+· · · + amnbnp    = (2.10) AB =    ∑n k=1a1kbk1 · · ·n k=1a1kbkp .. . . .. ... ∑n k=1amkbk1 · · ·n k=1amkbkp    =    (AB)11 · · · (AB)1p .. . . .. ... (AB)m1 · · · (AB)mp    (2.11) logo o termo ik da matriz A× B ´e:

(ab)ik = nj=1 aijbjk (2.12) com i =1,...,m e k =1,...,p.

(41)

Figura 2.35: Speedup em rela¸c˜ao ao Pentium IV 2.8 GHz [31].

2.7.2 Algoritmos

Para o caso de multiplica¸c˜oes de matrizes, existem algoritmos diferentes na ´algebra linear. Considerando duas matrizes A e B de n× n, estas podem ser multiplicadas em tempos O(lgn))usando O(n3) processadores [30].

O algoritmo mais simples para a execu¸c˜ao da multiplica¸c˜ao ´e o do diagrama 2.36 que executa n3 multiplica¸c˜oes e (n)2× (n − 1) somas, supondo uma matriz A e uma matriz B de n× n.

Por´em, existe um outro algoritmo que reduz o n´umero de multiplica¸c˜oes, o algoritmo de Strassen. Para calcular a matriz C (a matriz resultado), entre a matriz A (m× n) e a matriz B(n× p), este algoritmo requer que m,n e p sejam potˆencias de 2. ´E descrito a seguir um exemplo da aplica¸c˜ao deste algoritmo, a multiplica¸c˜ao entre duas matrizes 2× 2 [32].

Seja, A = ( a11 a12 a21 a22 ) , B = ( b11 b12 b21 b22 ) , (2.13) e a matriz resultado, C = ( c11 c12 c21 c22 ) (2.14) temos as seguintes matrizes interm´edias:

M 1 = (a11+ a22)(b11+ b22) M 2 = (a21+ a22)b11 M 3 = a11(b21− b11) M 4 = a22(b21+ b11) M 5 = (a11+ a12)b22 M 6 = (a21+ a11)(b11+ b12)

(42)

Leitura do elemento (i,j) da matriz

Leitura do elemento (j,k) da matriz B

Multiplicação do elemento (i,j) da matriz pelo elemento (j,k) da matriz B

Armazenamento

do resultado no registo j j=n;

j=j+1;

Soma dos registos 1 até j

Armazenamento do resultado na posição (i,k) da matriz resultado k=n; k=k+1; j=1; Sim Não Não Sim Inicio i=1; j=1; k=1; Fim i=n; k=1; i=i+1; j=1; Não Sim

Figura 2.36: Fluxograma do algoritmo de multiplica¸c˜ao de duas matrizes n× n.

M 7 = (a12+ a22)(b21+ b22)

para construir a matriz resultado C usando as matrizes interm´edias, temos: c11= M1+ M4− M5+ M7

c12= M3+ M5

c21= M2+ M4

c22= M1− M2+ M3+ M6

Para aplicar este algoritmo em matrizes de dimens˜ao maior que dois, basta aplic´a-lo re-cursivamente, dividindo a matrizes iniciais em matrizes mais pequenas at´e obtermos uma matriz 2× 2. Aplicando o algoritmo, e construindo uma nova matriz 2 × 2, hierarquicamente vamos conseguir multiplicar as matrizes na sua totalidade. Com este algoritmo, considerando a matriz A e matriz B, ambas de n× n, a multiplica¸c˜ao ´e realiz´avel com 4.7 × nlog7opera¸c˜oes aritm´eticas, em vez das habituais 2× n3 opera¸c˜oes. Para o exemplo anterior, em que con-sider´amos matrizes 2× 2, s˜ao feitas 7 multiplica¸c˜oes e 18 somas ou subtrac¸c˜oes, em vez das 8 multiplica¸c˜oes e das 4 somas. Infelizmente, este exemplo n˜ao ilustra o melhor desempenho

(43)

deste algoritmo, mas pela f´ormula ´e not´orio que para valores de n elevados este algoritmo ´e bem mais r´apido. No entanto, em alguns sistemas computacionais, s´o o facto de se realizar menos uma multiplica¸c˜ao o algoritmo j´a se torna mais r´apido, devido a esta opera¸c˜ao demorar mais tempo a se realizar, de que somas ou subtrac¸c˜oes.

Um algoritmo com uma implementa¸c˜ao em FPGA de multiplica¸c˜oes de matrizes tem por tr´as o seguinte teorema [25]:

A multiplica¸c˜ao de duas matrizes de dimens˜ao n× n pode ser realizada em n2+ 2n ciclos de rel´ogio, usando n elementos de processamento em que cada um ´e caracterizado por um MAC (multiplier and accumulator ), 4 registos e um local de armazenamento de dados com capacidade de n palavras e 2 portas I/O.

O algoritmo usado ´e o seguinte: For t=1 to m do

For all j, 1 <= j <= n, do in parallel PE_{j} shifts data in BU right to PE_{j+1} If (BU=b_{kj}), copy it into BM

For t=n+1 to n^{2}+n do

For all j, 1 <= j <= n, do in parallel

PE_{j} shifts data in A, BU right to PE_{j+1}

If (BU=b_{kj}), copy it into BL or BM (alternately) If (A=a_{ik}), c_{ij} := c_{ij} + a_{ik} * b_{kj} (b_{kj} is in either BM or BL)

Para uma consequente implementa¸c˜ao de um segundo algoritmo, temos outro teorema: Duas matrizes de n×n podem ser multiplicadas em (n2/r +2n/r) ciclos de rel´ogio, usando

n/r elementos de processamento com r2 MACs, r2 posi¸c˜oes de mem´oria com n/r palavras com 4r registos e 2r portas I/O.

O algoritmo descrito em pseudoc´odigo ´e: For t=1 to n/2 do

For all j do in parallel

PE_{j} shift words in BU1 & BU2 to the right (to PE_{j+1}) If (BU1=b_{11}), copy it into BM1

If (BU2=b_{12}), copy it into BM2

For t=n/2 to (n/2)^2 + n/2 do For all j do in parallel

PE_{j} shift words in A1,A2,BU1,BU2 to the right (to PE_{j+1})

If (BU1=b_{11kj}), copy it into BM1 after moving the word in BM1 into BL1 If (BU2=b_{12kj}), copy it into BM2 after moving the word in BM2 into BL2

If (A1=a_{11ik}), REG11_{i} = REG11_{i} + a_{11ik} * b_{11kj} REG12_{i} = REG12_{i} + a_{11ik} * b_{12kj}

Referências

Documentos relacionados

Este mecanismo de abertura interior foi projetado para permitir destravar o fecho desde o interior da caixa do camião num fechamento acidental (contanto que não esteja bloqueado

Por LEONARDO VIEIRA RIO – (...) Dois em cada três estudantes de 15 anos no Brasil não sabem trabalhar operações matemáticas simples como frações, porcentagem e

Dividiu o de milho em 18 partes e, quatro horas depois, o de chocolate em

(UFSM-RS) Sabe-se que o preço a ser pago por uma corrida de táxi inclui uma parcela fixa, que é denominada bandeirada, e uma parcela variável, que é função da distância percorrida.

Solução. Igualando a expressão ao salário final, temos:.. Em uma loja de som e imagem, cada vendedor recebe R$80,00 por semana e mais a comissão de R$5,00 por aparelho de DVD

Um baralho tem 12 cartas, das quais 4 são ases. Retiram‐se 3 cartas ao acaso. Qual a probabilidade de haver pelo menos um ás entre as cartas retiradas?.. 3. Joga‐se um dado

Desde a sua criação, em 1946, o Laboratório Nacional de Engenharia Civil (LNEC) tem dado um apoio significativo ao projeto e à constru- ção de barragens de betão e obras

I - declarar, junto à Organização Militar (OM) em que servir (OM de origem) na data de início do processo de transferência para a inatividade remunerada, o local do Território