métodos de decomposição de domínios para a solução ...guilherme/pesq/tcc_galante.pdf · ano...

96
Unioeste – Universidade Estadual do Oeste do Paraná CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS Colegiado de Informática Curso de Bacharelado em Informática Métodos de Decomposição de Domínios para a Solução Paralela de Sistemas de Equações Lineares Guilherme Galante CASCAVEL Fevereiro/2004 ANO LETIVO 2003

Upload: buidiep

Post on 09-Nov-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Unioeste – Universidade Estadual do Oeste do Paraná

CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICASColegiado de Informática

Curso de Bacharelado em Informática

Métodos de Decomposição de Domínios para a SoluçãoParalela de Sistemas de Equações Lineares

Guilherme Galante

CASCAVEL

Fevereiro/2004

ANO LETIVO

2003

GUILHERME GALANTE

MÉTODOS DE DECOMPOSIÇÃO DE DOMÍNIOS PARA A SOLUÇÃOPARALELA DE SISTEMAS DE EQUAÇÕES LINEARES

Trabalho apresentado como requisitoparcial para obtenção do grau deBacharel em Informática.Curso de Bacharelado em Informática.Centro de Ciências Exatas eTecnológicas. Universidade Estadual doOeste do Paraná - Campus de Cascavel.

Orientador: Prof. Dr. Rogério Luis RizziCo-Orientador: André Luis Martinotto

Cascavel

Fevereiro/2004

Ano Letivo

2003

GUILHERME GALANTE

MÉTODOS DE DECOMPOSIÇÃO DE DOMÍNIOS PARA A SOLUÇÃOPARALELA DE SISTEMAS DE EQUAÇÕES LINEARES

Trabalho apresentado como requisito parcial para obtenção do Título de Bacharel emInformática, pela UNIOESTE - Universidade Estadual do Oeste do Paraná, Campus de

Cascavel, aprovada pela Comissão composta pelos professores:

Prof. Dr. Rogério Luis Rizzi (Orientador)Colegiado de Matemática, UNIOESTE

Prof. Francisco Sérgio SambattiColegiado de Informática, UNIOESTE

Prof. MSc. Ivonei Freitas da SilvaColegiado de Informática, UNIOESTE

Cascavel, 17 de Fevereiro de 2004.

iv

“ Do you believe in fate or chancesDesign or coincidencesWould you say that all the peopleLive their life for good and evilSome have reached the end of patienceStart to play with God's creationThey know youControl youIn a game we shouldn't playCorrupt your heartAnd make you partOf a game we shouldn't play”

Andi Deris

v

AGRADECIMENTOS

Gostaria de agradecer primeiramente a minha família, em especial meus pais

Sinval e Luiza, que sempre me incentivaram nos estudos... É graças a eles que pude vencer mais

esta etapa da minha vida.

Agradeço também a minha namorada Juliana pelos bons momentos que

passamos juntos, pelo carinho e compreensão.

Gostaria de agradecer também:

Todos colegas que compartilharam suas horas de trabalho, de risadas e de

preocupações, em especial o pessoal do LSDP e do GMCPAR.

Meus amigos que sempre estiveram comigo tanto nas difíceis e nas horas de lazer.

Os professores do Colegiado de Informática pelos conhecimentos que me foram

transmitidos. Um agradecimento especial ao professor Rogério por me orientar neste trabalho e em todos

os demais, que passaram e que estão por vir.

O meu co-orientador André Martinotto pelas muitas ajudas ao longo deste trabalho.

Os funcionários Carin e Nelson, por serem sempre prestativos em seu trabalho.

vi

LISTA DE FIGURAS

FIGURA 2.1: CLASSIFICAÇÃO DE FLYNN ..................................................................................................... 16FIGURA 2.2: PANORAMA GERAL DAS CLASSIFICAÇÕES DAS ARQUITETURAS PARALELAS........................... 18FIGURA 2.3: RESUMO DAS ARQUITETURAS PARALELAS (DEROSE, 2001)................................................... 19FIGURA 2.4: CARACTERÍSTICAS DO MCR LINUX CLUSTER (TOP500)....................................................... 21FIGURA 2.5: CARACTERÍSTICAS DO CLUSTER CORPORATE (TOP500)........................................................ 22FIGURA 2.6: CARACTERÍSTICAS DO CLUSTER LABTEC UFRGS................................................................. 22FIGURA 2.7: MODELO DE EXECUÇÃO OPENMP........................................................................................... 28FIGURA 2.8: NÍVEIS DA BIBLIOTECA BLAS ................................................................................................ 29FIGURA 2.9: ORGANIZAÇÃO DA BIBLIOTECA PETSC.................................................................................. 30FIGURA 3.1: REPRESENTAÇÃO PARA FASES DO PARADIGMA MESTRE-ESCRAVO ........................................ 33FIGURA 3.2: REPRESENTAÇÃO PARA FASES DO PARADIGMA SPMD........................................................... 34FIGURA 3.3: REPRESENTAÇÃO PARA FASES DO PARADIGMA PIPELINE......................................................... 34FIGURA 3.4: REPRESENTAÇÃO PARA FASES DO PARADIGMA DIVISÃO E CONQUISTA .................................. 35FIGURA 3.5: ESTRUTURA DA METODOLOGIA PCAM (FOSTER, 1995)........................................................ 37FIGURA 4.1: DOMÍNIO (AZUL) E RESPECTIVA MALHA. ................................................................................ 41FIGURA 4.2: GRAFO REFERENTE À MALHA DA FIGURA 4.1.......................................................................... 41FIGURA 4.3: (A) DOMÍNIO INICIAL . (B) DOMÍNIO PARTICIONADO APÓS UM PASSO DO RCB. (C) DOMÍNIO

APÓS DOIS PASSOS DO RCB................................................................................................................. 43FIGURA 4.4: EXEMPLO DE REFINAMENTO POR KL ...................................................................................... 44FIGURA 4.5: ESQUEMA MULTINÍVEL (KUMAR, 2003)................................................................................. 45FIGURA 5.1: ESTÊNCIL DE 5-PONTOS (MOLÉCULA COMPUTACIONAL) ......................................................... 49FIGURA 5.2: GERAÇÃO DE SISTEMAS DE EQUAÇÕES................................................................................... 49FIGURA 5.3: ALGORITMO DO GRADIENTE CONJUGADO.............................................................................. 52FIGURA 6.1: ILUSTRAÇÃO PARA O ESQUEMA GERAL DE MDDS .................................................................. 55FIGURA 6.2: DOMÍNIO FORMADO PELA UNIÃO DE UM DISCO E UM RETÂNGULO. ......................................... 56FIGURA 6.3: ESQUEMA DE TROCA DE DADOS ENTRE AS FRONTEIRAS.......................................................... 58FIGURA 6.4: EXEMPLO DE MATRIZ ARMAZENADA NO FORMATO CSR......................................................... 59FIGURA 6.5: ALGORITMO DO MDD ADITIVO DE SCHWARZ........................................................................ 60FIGURA 6.6: PARTICIONAMENTO DE DOMÍNIO............................................................................................. 60FIGURA 6.7: DOMÍNIO PARTICIONADO COM SOBREPOSIÇÃO........................................................................ 60FIGURA 6.8: MATRIZ GERADA A PARTIR DO SUBDOMÍNIO S1 DA FIGURA 6.7.............................................. 61FIGURA 6.9: ARQUIVO DE ENTRADA DA MATRIZ ILUSTRADA NA FIGURA 6.8.............................................. 61FIGURA 6.10: ESQUEMA DE NUMERAÇÃO DO MÉTODO DO COMPLEMENTO DE SCHUR ............................... 62FIGURA 6.11: MATRIZ GERADA A PARTIR DO DOMÍNIO DA FIGURA 6.10..................................................... 63FIGURA 6.12: CÁLCULO DE D NO MÉTODO DO COMPLEMENTO DE SCHUR.................................................. 67FIGURA 6.13: CÁLCULO DE Q NO MÉTODO DO COMPLEMENTO DE SCHUR........................................... 67FIGURA 6.14: CÁLCULO DE X NO MÉTODO DO COMPLEMENTO DE SCHUR.................................................. 68FIGURA 8.1: NÚMERO DE ITERAÇÕES DO MDD ADITIVO DE SCHWARZ: 11.506 INCÓGNITAS .................... 72FIGURA 8.2: NÚMERO DE ITERAÇÕES DO MDD ADITIVO DE SCHWARZ: 184.096 INCÓGNITAS .................. 73FIGURA 8.3: TEMPO DE EXECUÇÃO DO MDD ADITIVO DE SCHWARZ: 11.506 INCÓGNITAS........................ 74FIGURA 8.4: TEMPO DE EXECUÇÃO DO MDD ADITIVO DE SCHWARZ: 184.096 INCÓGNITAS...................... 74FIGURA 8.5: SPEEDUP DO MDD ADITIVO DE SCHWARZ: 11.506 INCÓGNITAS ........................................... 75FIGURA 8.6: SPEEDUP DO MDD ADITIVO DE SCHWARZ: 184. 096 INCÓGNITAS......................................... 76FIGURA 8.7: EFICIÊNCIA DO MDD ADITIVO DE SCHWARZ: 11.506 INCÓGNITAS........................................ 77FIGURA 8.8: EFICIÊNCIA DO MDD ADITIVO DE SCHWARZ: 184.096 INCÓGNITAS...................................... 77FIGURA 8.9: EXECUÇÃO DO MDD ADITIVO DE SCHWARZ.......................................................................... 78FIGURA 8.10: TEMPOS DE EXECUÇÃO: IMPLEMENTAÇÕES COM E SEM BLAS ............................................. 79FIGURA 8.11: SPEEDUP: IMPLEMENTAÇÕES COM E SEM BLAS .................................................................. 79FIGURA 8.12: PROCESSOS VERSUS THREADS NO MDD ADITIVO DE SCHWARZ ........................................... 80FIGURA 8.13: DECOMPOSIÇÃO DE DOMÍNIOS VERSUS DECOMPOSIÇÃO DE DADOS: TEMPO DE EXECUÇÃO 82FIGURA 8.14: EXECUÇÃO DO MDD ADITIVO (A) EXECUÇÃO DO GC PARALELO (B).................................. 83FIGURA 8.15: TEMPO DE EXECUÇÃO DO MÉTODO DO COMPLEMENTO SCHUR............................................ 83FIGURA 8.16: SPEEDUP DO MÉTODO DO COMPLEMENTO DE SCHUR........................................................... 84FIGURA 8.17: EFICIÊNCIA ........................................................................................................................... 84FIGURA 8.18: ERROS DO MDD ADITIVO DE SCHWARZ............................................................................... 86

vii

LISTA DE SIGLAS E ABREVIATURAS

ATLAS Automatically Tuned Linear Algebra Software

BLAS Basic Linear Algebra Subprograms

CC Condições de Contorno

CSR Compressed Sparse Row

EDP Equação Diferencial Parcial

GC Gradiente Conjugado

GMCPAR Grupo de Matemática Computacional e Processamento Paralelo

GMRES Método do Resíduo Mínimo Generalizado

KL Kernigham-Lin

LabTec Laboratório de Tecnologia em Clusters

MDD Métodos de Decomposição de Domínio

MIMD Multiple Instruction Multiple Data

MISD Multiple Instruction Simple Data

MPI Message Passing Interface

MPP Massively Parallel Processors

NORMA Non-Remote Memory Access

NOW Network of Workstations

NUMA Non-Uniform Memory Access

ORB Ortogonal Recursive Bisection

PC Computador Pessoal

PCAM Partitioning, Communication, Agglomeration e Mapping

PETSc Portable, Extensible Toolkit for Scientific Computation

POSIX Portable Operating System Interface

PVP Parallel Vector Processor

PVM Parallel Virtual Machine

RCB Recursive Coordinate Bisection

SCI Scalable Coherent Interface

SDP Simétrica-Definida Positiva

SEL Sistema de Equações Lineares

SIMD Simgle Instruction Multiple Data

SISD Simgle Instruction Simple Data

SMP Symmetric Multiprocessors

SOR Successive Overrelaxation

UFRGS Universidade Federal do Rio Grande do Sul

UMA Uniform Memory Access

viii

SUMÁRIO

1. INTRODUÇÃO ................................................................................................................................ 11

1.1 Organização do Trabalho........................................................................................................... 13

2. AMBIENTE DE COMPUTAÇÃO PARALELA: HARDWARE E SOFTWARE ..................... 15

2.1 Classificação das Arquiteturas Paralelas.................................................................................... 152.1.1 Modo de controle............................................................................................................... 152.1.2 Compartilhamento de memória.......................................................................................... 16

2.2 Tendências de Sistemas Paralelos.............................................................................................. 182.2.1 Clusters de PCs.................................................................................................................. 20

2.3 Bibliotecas.................................................................................................................................. 242.3.1 Bibliotecas de troca de mensagem..................................................................................... 242.3.2 Bibliotecas de threads........................................................................................................ 262.3.3 Bibliotecas de álgebra linear e resolução de sistemas........................................................ 28

2.4 Conclusão................................................................................................................................... 31

3. PROCESSAMENTO PARALELO ................................................................................................ 32

3.1 Paradigmas de Programação...................................................................................................... 323.1.1 Mestre-Escravo................................................................................................................... 333.1.2 Single-Program Multiple-Data (SPMD)............................................................................. 333.1.3 Pipeline de dados................................................................................................................ 343.1.4 Divisão e conquista............................................................................................................ 34

3.2 Estratégias para a Extração do Paralelismo................................................................................ 353.2.1 Técnicas para a solução paralela de sistemas de equações................................................. 36

3.3 Metodologia de desenvolvimento de programas paralelos......................................................... 363.4 Métricas para Avaliação de Desempenho Computacional......................................................... 38

3.4.1 Tempo de execução............................................................................................................ 383.4.2 Speedup.............................................................................................................................. 383.4.3 Eficiência............................................................................................................................ 39

3.5 Conclusão................................................................................................................................... 39

4. PARTICIONAMENTO DE DADOS E DE DOMÍNIO ................................................................ 40

4.1 Malhas e Grafos......................................................................................................................... 404.2 O Problema de Particionamento de Grafos................................................................................ 414.3 Heurísticas e Métodos de Particionamento................................................................................ 42

4.3.1 Métodos globais................................................................................................................. 424.3.2 Métodos locais................................................................................................................... 43

4.4 Métodos Multiníveis.................................................................................................................. 454.5 Pacotes de Particionamento........................................................................................................ 46

4.5.1 METIS................................................................................................................................ 464.6 Critérios para Escolha do Algoritmo.......................................................................................... 474.7 Conclusão................................................................................................................................... 47

5. SISTEMAS DE EQUAÇÕES.......................................................................................................... 48

5.1 Geração de Sistemas de Equações.............................................................................................. 485.2 Métodos Diretos e Métodos Iterativos....................................................................................... 50

5.2.1 Métodos iterativos do subespaço de Krylov....................................................................... 505.3 Métricas para Avaliação da Qualidade da Solução em Paralelo................................................ 525.4 Conclusão................................................................................................................................... 53

6. MÉTODOS DE DECOMPOSIÇÃO DE DOMÍNIO .................................................................... 55

6.1 Métodos de Schwarz.................................................................................................................. 566.1.1 MDD Aditivo de Schwarz.................................................................................................. 576.1.2 Implementação do MDD Aditivo de Schwarz................................................................... 58

6.2 Métodos do Complemento de Schur.......................................................................................... 626.2.1 Implementação do Método do Complemento de Schur..................................................... 65

ix

6.3 Conclusão................................................................................................................................... 68

7. METODOLOGIA DE DESENVOLVIMENTO ........................................................................... 69

8. RESULTADOS OBTIDOS ............................................................................................................. 71

8.1 Método MDD Aditivo de Schwarz: Análise de Desempenho Computacional........................... 718.1.1 Número de iterações........................................................................................................... 718.1.2 Tempo de execução............................................................................................................ 738.1.3 Speedup do MDD Aditivo de Schwarz.............................................................................. 758.1.4 Eficiência............................................................................................................................ 768.1.5 Comportamento do MDD Aditivo de Schwarz.................................................................. 788.1.6 MDD Aditivo de Schwarz: BLAS...................................................................................... 788.1.7 MDD Aditivo de Schwarz: processos versus threads........................................................ 808.1.8 MDD Aditivo de Schwarz versus decomposição de dados................................................ 81

8.2 MDD do Complemento de Schur: Análise de Desempenho Computacional............................. 838.3 Análise da Qualidade Numérica................................................................................................. 858.4 Conclusão................................................................................................................................... 86

9. CONCLUSÕES................................................................................................................................ 88

9.1 Contribuições............................................................................................................................. 889.2 Trabalhos Futuros....................................................................................................................... 89

REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................................... 90

APÊNDICE A ........................................................................................................................................... 96

x

RESUMO

As soluções de sistemas de equações lineares estão entre os problemas

mais comuns encontrados em Computação Científica. Tais sistemas são gerados pela

discretização de equações diferenciais parciais (EDPs), e são parte integrante de

modelos matemáticos de fenômenos físicos e tecnológicos. Geralmente, tais sistemas de

equações são de grande porte e esparsos e demandam soluções a cada passo de tempo.

Requerem abordagens e estratégias numérico-computacionais eficientes, de tal modo

que é imprescindível o uso de computação de alto desempenho, que é oferecida, por

exemplo, por arquiteturas de memória distribuída não compartilhada. O objetivo deste

trabalho é a obtenção de soluções em paralelo para sistemas de equações lineares

esparsos e de grande porte. As soluções são obtidas empregando decomposição de

domínio, de modo que, ao explorar o paralelismo em clusters de PCs multiprocessados,

tais soluções possam ser atingidas em tempo significativamente menor do que aquele

obtido com abordagens seqüenciais. Foram implementados dois métodos de solução:

Método de Decomposição de Domínio Aditivo de Schwarz e o Método do

Complemento de Schur. Os resultados do Método Aditivo foram satisfatórios tanto no

que diz respeito ao desempenho quanto a qualidade numérica. Já o Método de Schur

apresentou resultados apenas regulares.

Palavras-chave: Clusters de PCs, Decomposição de Domínio, Sistemas de Equações lineares.

11

1. INTRODUÇÃO

Através de modelagem computacional é possível realizar simulações

computacionais de fenômenos naturais, tecnológicos e industriais, que seriam irrealizáveis ou

antieconômicos se efetivados por métodos experimentais. Tais fenômenos podem, em geral, ser

modelados de modo acurado através de equações diferenciais parciais (EDPs), que são definidas

sobre domínios contínuos, necessitando que sejam discretizadas, para poderem ser tratadas

computacionalmente.

Conforme o esquema de discretização empregado na aproximação de uma

determinada EDP, pode-se originar sistemas de equações que são lineares. Estes sistemas são,

de modo geral, esparsos e de grande porte, onde as incógnitas podem ser da ordem de milhares,

ou até mesmo de milhões (Canal, 2000).

Considerando tais características, uma solução com alta qualidade numérica

pode requerer grande capacidade de processamento e de armazenamento, o que torna

imprescindível o uso de ambientes computacionais de alto desempenho. Sob tais ambientes,

simulações computacionais podem ser realizadas com um nível de detalhe que não seria viável

em abordagens computacionais seqüenciais (Rizzi, 2002).

Tais ambientes podem ser oferecidos por clusters de PCs, que têm se

mostrado uma opção acessível e eficiente para se ter os recursos computacionais requeridos à

solução dos problemas, de modo a reduzir o tempo de processamento. Um cluster de PCs pode

ser definido como sendo um conjunto de computadores (homogêneos ou não) conectados em

rede, e que servem à execução de processamento em paralelo.

O processamento paralelo (ou paralelismo) é uma técnica usada em tarefas

grandes e complexas para obter resultados mais rápidos, dividindo-as em tarefas pequenas que

serão distribuídas em vários processadores para serem executadas simultaneamente. Esses

processadores se comunicam entre si para que haja sincronização na execução das diversas

tarefas executadas em paralelo (Cenapad, 2003).

Os sistemas de equações lineares, que são resolvidos utilizando-se de

paralelismo, estão presentes em várias aplicações como, por exemplo: programação linear;

dinâmica dos fluidos computacional; modelagem climática; previsão meteorológica; etc. (Saad,

1996). Para a solução desses sistemas de equações lineares, existem duas classes de métodos: a

classe dos métodos diretos e a classe dos métodos iterativos.

Os métodos diretos apresentam solução exata, exceto por erros de

arredondamento devido às operações de ponto flutuante, em um número finito de passos.

Métodos iterativos, por sua vez, utilizam-se de sucessivas aproximações dos valores das

incógnitas para obter uma solução cada vez mais acurada. Estas aproximações são feitas até que

se obtenha um limite de erro aceitável ou um número máximo de iterações (Martinotto, 2002).

12

Os métodos iterativos são os mais apropriados na solução de sistemas de

equações esparsos de grande porte, pois estes métodos trabalham apenas sobre os elementos não

nulos da matriz de coeficientes, não destruindo, portanto, a sua esparsidade. Essa questão é

importante, pois esse fato permite que se possa fazer otimizações no armazenamento, nas

estratégias de solução e de comunicação, de modo que se obtém soluções eficientes.

Uma das abordagens encontradas na literatura técnica para a solução de

sistemas de equações em paralelo é aquela que emprega métodos de decomposição de domínio

(MDDs). Os MDDs são baseados no particionamento do domínio computacional em

subdomínios, de modo que a solução global do problema é obtida pela combinação apropriada

das soluções obtidas em cada um dos subdomínios.

Uma vez que diferentes subdomínios podem ser tratados independentemente,

exceto nos pontos de sincronismo, tais métodos são atrativos para ambientes computacionais de

memória distribuída, como é o caso dos clusters de PCs. Os MDDs podem ser divididos em

duas grandes classes: métodos de Schwarz, onde os subdomínios apresentam uma região de

sobreposição, e métodos de Schur, onde os subdomínios não apresentam região de

sobreposição.

Na paralelização dos métodos numéricos para serem executados em clusters

de PCs multiprocessados, pode-se explorar dois níveis de paralelismo. Em um primeiro nível

explora-se o paralelismo intra-nodal, onde a memória é compartilhada e o paralelismo é

explorado usando threads ou processos escalonados pelo sistema operacional. Já em um

segundo nível explora-se o paralelismo inter-nodal através da troca de mensagem, utilizando

uma biblioteca de troca de mensagens.

Assim, o objetivo deste trabalho é desenvolver e analisar o desempenho

computacional e a qualidade numérica das soluções paralelas resultantes de dois métodos de

decomposição de Domínio, com e sem sobreposição. Especificamente, são desenvolvidas

estratégias, estruturas de dados e implementações para o MDD Aditivo de Schwarz, e para o

Método do Complemento de Schur.

As aplicações utilizam para teste arquivos de dados gerados no modelo

HIDRA e pelo software GERATRIZ. HIDRA é o modelo computacional paralelo bi e

tridimensional, com balanceamento dinâmico de carga para a hidrodinâmica e para o transporte

de substâncias desenvolvido por Rogério Luis Rizzi (Rizzi, 2002) e Ricardo Vargas Dorneles

(Dorneles, 2003). GERATRIZ é um software desenvolvido pelo Grupo de Matemática

Computacional e Processamento Paralelo (GMCPAR) (Perlin, 2003) para a geração de dados de

entrada a partir de domínios estabelecidos pelo usuário.

Outros trabalhos exploraram a paralelização de métodos de solução de

sistemas lineares. Dentre esses, estão aqueles realizados pelo Grupo de Processamento Paralelo

e Distribuído da UFRGS:

13

• Ana Paula Canal, que desenvolveu a dissertação intitulada de

“Paralelização de Métodos de Solução de Sistemas Lineares

Esparsos com o DECK em Clusters de PCs”, onde foram

implementadas versões paralelas do Método do Gradiente

Conjugado (GC) e do Método de Thomas para matrizes do tipo

banda.

• Delcino Picinin Junior, que desenvolveu o trabalho individual de

mestrado sobre a paralelização do GC utilizando MPI e threads e em

sua dissertação implementou e analisou a paralelização do método

do GC e do Método do Resíduo Mínimo Generalizado (GMRES),

utilizando MPI, DECK e Pthreads.

• André Luis Martinotto, desenvolveu o Trabalho de Conclusão de

Curso intitulado “Paralelização de Métodos Numéricos de Solução

de Sistemas Esparsos de Equações Utilizando MPI e Pthreads” e o

trabalho individual de mestrado sobre a paralelização de pré-

condicionadores para o GC.

Além destes, outros trabalhos relativos a este assunto foram desenvolvidos

pelos bolsistas Guilherme Galante e Jeysonn I. Balbinot, do GMCPAR, como pode ser visto na

bibliografia mencionada.

1.1 Organização do Trabalho

Este texto está organizado em sete capítulos. Nesse inicial, é realizada uma

introdução do trabalho.

No segundo capítulo, apresenta-se o ambiente de programação paralela,

abordando os quesitos de hardware e software.

No terceiro capítulo aborda-se os paradigmas, técnicas e metodologias para o

desenvolvimento de aplicações paralelas. Também são apresentadas algumas métricas para

avaliação de desempenho de programas paralelos.

O quarto capítulo refere-se ao problema de particionamento de dados e de

domínios, onde são mostrados alguns algoritmos e heurísticas existentes, e os softwares

disponíveis no mercado.

O capítulo 5 refere-se as questões relativas aos sistemas de equações

lineares. Inicialmente é dada uma introdução aos sistemas de equações lineares, em seguida é

mostrado como são gerados, e quais são os métodos pelos quais podem ser resolvidos. Ao final

14

do capítulo são apresentadas métricas para a avaliação da qualidade numérica dos métodos de

solução.

O capítulo 6 abrange os métodos de decomposição de domínio, suas

características, funcionalidades e aplicações, além de um panorama geral das implementações

contidas neste trabalho, com explicações dos algoritmos, estruturas de dados empregadas e

exemplos dos mesmos.

A metodologia empregada na implementação e testes dos algoritmos deste

trabalho é mostrada no capítulo 7.

No capítulo 8 apresentam-se os resultados obtidos com os testes das

implementações feitas neste trabalho. Os resultados são mostrados através de gráficos de tempo

de execução, speedup, eficiência e número de iterações. Ainda são mostrados alguns gráficos do

comportamento dos algoritmos obtidos com a ferramenta de perfilamento Jumpshot.

No capítulo 9 capítulo são discutidas as conclusões do trabalho, e algumas

contribuições e propostas para trabalhos futuros.

15

2. AMBIENTE DE COMPUTAÇÃO PARALELA: HARDWARE ESOFTWARE

Este capítulo refere-se ao ambiente utilizado no desenvolvimento de

aplicações paralelas. A descrição desse ambiente está dividida em duas partes: a primeira se

refere à parte física (hardware) e a segunda se refere à parte lógica (software).

Na primeira parte deste capítulo, são apresentados critérios de classificação

das máquinas paralelas e as tendências em sua construção, dando maior ênfase aos clusters de

PCs. Em um primeiro momento, é dado um panorama geral, apresentando uma definição de

cluster, os tipos de arquiteturas existentes e as principais redes de interconexão. Em um segundo

momento serão colocados exemplos de clusters de alto desempenho do ranking do Top500

(TOP500, 2003), e também o cluster LabTec do Instituto de Informática da UFRGS.

Na segunda parte, são abordadas as bibliotecas de troca de mensagens, de

threads, de álgebra linear e de resolução de sistemas de equações.

2.1 Classificação das Arquiteturas Paralelas

Existem, uma grande variedade de arquiteturas paralelas, que diferem tanto

nas características do hardware, quanto nos propósitos para que foram projetadas. Para

classificar estas arquiteturas existem vários critérios, dentre os quais aborda-se, neste trabalho, o

modo de controle e o compartilhamento de memória.

2.1.1 Modo de controle

Para se classificar as arquiteturas quanto ao modo de controle, pode-se

utilizar a classificação genérica de Flynn (Flynn, 1972). Esta classificação baseia-se no número

de fluxos de dados (data stream) e de fluxos de instruções (instruction stream). Segundo esta

abordagem, os computadores são divididos em quatro classes: SISD, SIMD, MISD E MIMD,

conforme visto na Figura 2.1.

• SISD (Single Instruction Single Data): São as máquinas convencionais,

que processam uma instrução operando sobre itens de dados simples.

Nesta categoria incluem-se os computadores seriais convencionais, que

executam instruções de modo seqüencial, não havendo nenhum tipo de

paralelismo.

16

SD ( )Single Data MD ( )Multiple Data

SI ( )Single Instruction

MI ( )Multiple Instruction

SISD

MISD

SIMD

MIMD

Figura 2.1: Classificação de Flynn

• SIMD (Single Instruction Multiple Data): São os chamados sistemas de

processamento vetorial, com uma mesma instrução operando

simultaneamente sobre dados distintos. Nesta classe, estão enquadradas

as máquinas Array CM-2 e MasPar (Hwang, 1993).

• MISD (Multiple Instruction Single Data): São máquinas que executam

diversos fluxos de instruções sobre itens de dados simples. Esta

arquitetura não existe na prática, sendo incluída apenas para tornar a

classificação de Flynn completa.

• MIMD (Multiple Instruction Multiple Data): Sistema paralelo de

processamento com diversas instruções operando simultaneamente sobre

dados distintos. É nesta classe que se encontram os computadores

paralelos. São representantes desta classe as máquinas CM-5 (Hwang,

1993), nCUBE, Intel Paragon e Cray T3D (Culler, 1999).

2.1.2 Compartilhamento de memória

As máquinas do tipo MIMD podem ser classificadas pelo critério de

compartilhamento de memórias em três classes: máquinas com memória compartilhada,

máquinas com memória distribuída e máquinas híbridas. São classificadas apenas as máquinas

MIMD, porque é nesta classe que estão as máquinas paralelas, que são o foco deste capítulo.

2.1.2.1 Memória compartilhada

Neste tipo de máquinas todos os processadores compartilham um único

espaço de endereçamento de memória. Máquinas deste tipo, também são chamadas de

multiprocessadores.

17

Levando em consideração o tipo de acesso à memória, os multiprocessadores

podem ser classificados como em (Hwang, 1993):

• UMA (uniform memory acess): a latência de acesso à memória é

uniforme para todos os processadores.

• NUMA (non-uniform memory acess): a latência de acesso à memória

depende da localização do processador em relação ao endereço de

memória.

Ainda quanto ao modo de acesso à memória, é importante ressaltar a

importância da coerência de cache. Mais informações podem ser encontradas em (Hwang,

1993).

2.1.2.2 Memória distribuída

Estas máquinas também são chamadas de multicomputadores. Inclui-se nesta

classe máquinas formadas por várias unidades de processamento, cada qual com sua memória

local, não acessível a outras máquinas. A troca de informações é efetuada pelo envio de

mensagens através da rede de interconexão.

O tipo de acesso à memória utilizada pelos multicomputadores é conhecido

como NORMA (non-remote memory access). Como todos os componentes de uma arquitetura

tradicional foram replicados na construção deste tipo de máquinas, cada nodo não tem acesso a

endereçamentos remotos de memória.

2.1.2.3 Memória híbrida

São máquinas que possuem tanto memória distribuída quanto memória

compartilhada simultaneamente. Um exemplo deste tipo de máquinas são os clusters com nodos

multiprocessados. Clusters são tratados detalhadamente na seção 2.3.1.

A Figura 2.2 mostra um panorama geral das classificações das arquiteturas

paralelas.

18

Arquiteturas de computadores

SISD SIMDMISD MIMD

Computadores Seriais

Computadores Vetoriais

Multiprocessadores Multicomputadores

Figura 2.2: Panorama geral das Classificações das arquiteturas paralelas

2.2 Tendências de Sistemas Paralelos

Segundo (De Rose, 2001), as principais tendências para a construção dos

sistemas paralelos baseiam-se em máquinas da classe MIMD. A seguir são apresentados os

modelos e suas respectivas características:

• PVP (Parallel Vector Processor): Sistemas constituídos de máquinas

paralelas com processadores vetoriais, que se comunicam através de

memória compartilhada. A desvantagem desta classe de máquinas é o

alto custo de seus processadores.

• SMP (Symmetric Multiprocessors): Sistemas constituídos de

processadores comerciais1. São conectados a uma memória

compartilhada através de um barramento de alta velocidade. O adjetivo

simétrico (symmetric) refere-se ao fato de que todos os processadores

têm igual acesso à memória, não ocorrendo nenhum privilégio por parte

do sistema operacional. No entanto o uso de um único barramento

impede a construção de uma máquina com grande quantidade de

processadores, já que o canal é compartilhado por todos os

processadores, e conseqüentemente o desempenho global das máquinas

é afetado pela contenção do mesmo.

• MPP (Massively Parallel Processors): Máquinas paralelas com grande

número de processadores comerciais, variando desde algumas dezenas

até milhares de unidades de processamento, e memória distribuída. O

uso de memória distribuída torna factível a construção de máquinas com

grande número de processadores.

1 Processadores para uso comum, não tendo como principal finalidade o uso em arquiteturas paralelas.

19

• NOW (Network of Workstations): São sistemas constituídos por várias

estações de trabalho comuns interligadas com tecnologia tradicional,

como por exemplo, redes Ethernet e ATM. Uma rede local pode ser vista

como uma máquina paralela, onde existem vários processadores, cada

qual com seu espaço de endereçamento de memória local, interligados

por uma rede, formando uma máquina NORMA de baixo custo. O

principal problema das NOWs é que as redes tradicionais não são

otimizadas para as comunicações de uma aplicação paralela, resultando

em uma alta latência nas operações, comprometendo o seu desempenho.

Uma evolução das NOWs são os Clusters de PCs. Estes possuem

hardware e software otimizados para a execução de aplicações paralelas.

É possível observar um resumo das características dos modelos apresentados

na Figura 2.3.

Tipo PVP SMP MPP NOW Clusters

Estrutura MIMD MIMD MIMD MIMD MIMD

Comunicação Memóriacompartilhada

Memóriacompartilhada

Troca demensagens

Troca demensagens

Troca demensagens

Número deNodos ~10 ~50 100 a 5000 2 a 5000 2 a 1000

Processador Específico Comum Comum Comum Comum

Acesso àmemória UMA UMA NORMA NORMA NORMA

Figura 2.3: Resumo das arquiteturas paralelas (DeRose, 2001)

É importante salientar que o paralelismo é explorado também no nível de

instrução, onde diversas instruções são executadas simultaneamente por meio da sobreposição

dos diferentes estágios do ciclo de execução de cada instrução (pipelining), e também pelo uso

de processadores superescalares, onde as unidades funcionais do processador são duplicadas de

modo que várias instruções são processadas ao mesmo tempo. Maiores detalhes sobre pipelining

e processadores superescalares podem ser encontrados em (Stallings, 1996), (Tanenbaum, 1999)

e (Patterson, 1998).

20

2.2.1 Clusters de PCs

Um cluster de PCs é um conjunto de computadores (heterogêneos ou não)

conectados em rede para o desenvolvimento de processamento paralelo. Ou seja, as máquinas

são conectadas via rede para formar um único computador.

O projeto pioneiro em clusters de PCs foi desenvolvido no CESDIS (Center

of Excellence in Space Data and Information Sciences) em 1994 (Pitanga, 2002). Contava com

16 máquinas 486 rodando GNU/Linux.

O uso de clusters é uma alternativa ao uso de supercomputadores e

mainframes. Entre as principais vantagens do uso de clusters pode-se citar:

• Ótima relação custo x benefício: possui um dos menores custos por

Mflops/s em comparação a outras arquiteturas paralelas, devido à sua

composição feita basicamente por componentes comuns (De Rose,

2001);

• Alto Desempenho: possibilidade de se resolver problemas muito

complexos através de processamento paralelo;

• Escalabilidade: possibilidade de que novos componentes sejam

adicionados ou trocados conforme a necessidade (Pitanga, 2002);

• Disponibilidade: se um nodo falhar, os outros podem continuar

fornecendo serviços (Carvalho, 2002).

Um cluster é dito homogêneo quando todos os nodos de um cluster possuem

as mesmas características (processador, memória, discos rígidos), e mesma rede de

comunicação interligando os nodos. Se o cluster possui nodos com diferentes características ou

diferentes redes de comunicação entre grupos de nodos, o cluster é dito heterogêneo.

Segundo (Dorneles, 2001), os nodos de um cluster podem ser

monoprocessados quando possuem apenas um processador ou multiprocessados, quando

possuem mais de um processador.

Segundo (Buyya, 1999 apud Martinotto, 2003), em clusters

multiprocessados, o paralelismo intra-nodal e inter-nodal pode ser explorado das seguintes

formas:

• Troca de mensagens: troca de mensagens são um padrão no

desenvolvimento de aplicações para clusters. Quando usado em

clusters multiprocessados, os processadores de um mesmo nodo

comunicam-se entre si através do uso de troca de mensagens.

• Memória compartilhada: mecanismos DSM, implementados em

software ou hardware, são uma alternativa ao uso de troca de

mensagens em clusters. Mecanismos DSM permitem simular

21

ambientes de memória compartilhada em ambientes com memória

distribuída. A comunicação inter-nodos é implícita ao programador.

Esse tipo de mecanismos introduz um custo adicional para o

gerenciamento de endereços e coerência de dados.

• Troca de mensagens em conjunto com memória compartilhada: para

uma melhor exploração do paralelismo em clusters

multiprocessados é adequado explorar as vantagens de ambas as

arquiteturas. Para a exploração do paralelismo inter-nodos o utiliza-

se troca de mensagens e para a exploração do paralelismo intra-

nodos utiliza-se multithreading.

Bibliotecas de threads e troca de mensagens são abordadas na seção 2.3.

2.2.1.1 Exemplos de clusters de PCs

Atualmente, diversas empresas e instituições de pesquisa possuem clusters

com o número de nodos que variam de dois até alguns milhares. No site

http://clusters.top500.org é possível encontrar os clusters de maior capacidade de processamento

do mundo. Nas Figuras 2.4 e 2.5 são mostrados detalhes de dois clusters pertencentes à lista

Top 500.

MCR Linux ClusterProprietário Lawrence Livermore National LaboratoryPaís e Localização Livermore, CA – USANúmero de Nodos 1.152Processadores 2.304 Intel Xeon 2.4 GHzTotal de Processadores 2.304Performance (Gflops) 11.174Memória Total (GB) 4.600Disco Rígido Total (GB) 100.000Sistema Operacional LinuxRede de Conexão QsNetAno de Instalação 2002Área de Aplicação Pesquisa Científica

Figura 2.4: Características do MCR Linux Cluster (TOP500)

22

CorporateProprietário GX Technology CorporationPaís e Localização Houston, Texas – USANúmero de Nodos 1792Processadores 528 Sun U-2 450 MHz

112 AMD Thunderbird 1.0 GHz84 AMD Palomino 1.2 GHz254 Intel Pentium III 1.1 GHz1726 Intel Pentium III 1.4 GHz880 Intel Pentium IV 2.4 GHz

Total de Processadores 3.264Performance (Gflops) 5.091Memória Total (GB) 3.084Disco Rígido Total (GB) 237.952Sistema Operacional LinuxRede de Conexão Gigabit EthernetAno de Instalação 2003Área de Aplicação Simulações Sísmicas

Figura 2.5: Características do Cluster Corporate (TOP500)

Na vigésima primeira edição da lista (2002), 80 clusters encontram-se entre

os 500 computadores mais rápidos do mundo.

Para os testes das aplicações desenvolvidas é utilizado o cluster LabTec do

Instituto de Informática da UFRGS. As características são mostradas na Figura 2.6.

LabTeC UFRGS – DELLNúmero de Nodos 21Processadores 40 Intel Pentium III 1.1 GHz

2 Intel Pentium Xeon IV 1.8 GHzTotal de Processadores 42Performance (Gflops) ~24Memória Total (GB) 21Disco Rígido Total (GB) 396Sistema Operacional LinuxRede de Conexão Gigabit/Fast EthernetAno de Instalação 2002Área de Aplicação Pesquisa Científica e Acadêmica

Figura 2.6: Características do Cluster LabTec UFRGS

23

2.2.1.2 Redes de interconexão

A adoção de uma tecnologia de rede com baixa latência2 e grande largura de

banda3 é muito importante para o desempenho final do sistema como um todo. Dentre as

possibilidades de redes de interconexão utilizadas em cluster, destacam-se:

• Gigabit Ethernet : é uma extensão dos padrões de rede Ethernet e Fast-

Ethernet, tendo sido definido em junho de 1998 pelo padrão IEEE

802.3.3z (Gigabit Ethernet Alliance, 1997). O padrão Gigabit Ethernet

oferece alta performance, e boa escalabilidade a baixos custos.

Apresenta boa largura de banda, mas uma alta latência.

• Myrinet: desenvolvida pela empresa Myricom (Myricom, 2003), tem

como objetivo ser uma tecnologia de interconexão, baseada em

chaveamento e comunicação por pacotes, de baixo custo e de alta

performance. As características que distinguem a Myrinet das demais

são especialmente links full-duplex alcançando 2 Gbps para cada um,

pacotes de tamanho variável (permitindo qualquer tipo de pacote),

controle de fluxo, de erro, monitoramento contínuo dos links, baixa

latência, suporte a qualquer configuração de topologia.

• SCI (Scalable Coherent Interface): definido pelo padrão IEEE/ANSI

1596-1992 (SCI, 2003), foi a primeira tecnologia de rede a ser

desenvolvida especialmente para propósitos de computação em clusters.

O padrão oferece baixa latência e alta taxa de transmissão de dados

(cerca de 8 Gbps). A comunicação em SCI pode ser feita através de troca

de mensagens e memória compartilhada distribuída, implementada em

um espaço de endereçamento físico de 64 bits que permite operações de

escrita e leitura. O desempenho é garantido pelo acesso à memória que é

feito por instruções LOAD/STORE implementadas em hardware (SCI,

2003).

• QsNet: Produzida pela Quadrics, é uma tecnologia para computadores

com multiprocessamento simétrico, oferece largura de banda nominal de

400Mbps e baixa latência (Petrini, 2002).

• Infiniband : tecnologia de interligação apoiada por fabricantes como

Intel, IBM, Sun, HP e Microsoft, e que especifica uma arquitetura de

2 A latência é dada pelo tempo necessário para transmitir uma mensagem de uma máquina origem a umdestino.3 É o número máximo de bits que podem ser transmitidos por segundo pela rede.

24

hardware para a interligação de alto desempenho intra e inter-nodal

(Infiniband Trade Association, 2003).

2.3 Bibliotecas

Como visto na seção 2.2, muitos sistemas paralelos são formados por

computadores independentes interligados por uma rede veloz. Estas máquinas são ditas de

memória distribuída. Nestes sistemas, pode-se executar tarefas de modo paralelo, e

eventualmente estas tarefas necessitam de mecanismos de compartilhamento de dados e

sincronização.

Sendo que cada processo possui acesso somente a sua memória local, a

comunicação entre os processos é feita através do envio e recebimento de mensagens, onde os

dados são enviados da memória local de um processo para a memória local de um processo

remoto. A distribuição dos dados entre os processos é feita de forma explícita pelo programador.

2.3.1 Bibliotecas de troca de mensagem

A utilização de compartilhamento de dados via troca de mensagens é

bastante popular e são encontradas na bibliografia diversas ferramentas disponibilizando estes

recursos de programação. Entre elas podemos citar o PVM e o MPI, que serão descritos nas

seções 2.4.1.1 e 2.4.1.2, respectivamente.

Pode-se relacionar dois principais fatores que justificam a grande aceitação

do paradigma de troca de mensagens:

• Pode ser executado em uma grande variedade de plataformas, inclusive

em arquiteturas multiprocessadas com memória compartilhada ou ainda

em um único processador;

• Adequa-se naturalmente a arquiteturas ampliáveis, ou seja, a capacidade

de aumentar o poder computacional proporcionalmente ao aumento de

componentes do sistema (boa escalabilidade);

A principal limitação do paradigma é a sobrecarga causada pela

comunicação entre os processos e pela sincronização entre eles. O custo da comunicação entre

processos pode tornar inviável o uso de troca de mensagens em determinados ambientes (Palha,

2000).

25

2.3.1.1 PVM

PVM (Parallel Virtual Machine), é um conjunto integrado de bibliotecas e

ferramentas de software, que permitem que um conjunto de máquinas heterogêneas conectadas

em rede seja utilizado como uma arquitetura paralela de memória distribuída, formando uma

máquina paralela virtual.

PVM foi desenvolvida pelo Oak Ridge National Laboratory em conjunto

com diversas universidades. A intenção inicial era facilitar a implementação de programas

científicos de alto desempenho explorando o paralelismo sempre que possível.

O PVM é constituído por dois componentes: um daemon4 residente (pvmd) e

a biblioteca de comunicação (libpvm). Ambos devem estar disponíveis em cada nodo da

máquina virtual paralela. O primeiro componente, pvmd, é a interface de troca de mensagens

entre a aplicação de cada máquina local e o restante da máquina virtual. O segundo componente,

libpvm fornece à aplicação local todas as funcionalidades que necessita para que possa

comunicar-se com os outros nodos.

O download do PVM, e informações adicionais podem ser encontrados em:

http://www.csm.ornl.gov/pvm/pvm_home.html.

2.3.1.2 MPI

O MPI (Message Passing Interface) é um padrão, e não uma biblioteca,

criado em um fórum aberto constituído de aproximadamente 80 pessoas, representando 40

organizações. É importante ressaltar que, enquanto o PVM é uma implementação, o MPI é

apenas uma especificação sintática e semântica de rotinas constituintes da biblioteca de

comunicação (Cenapad, 2003).

O principal objetivo do MPI é garantir a portabilidade de aplicações que

utilizem troca de mensagens para diferentes arquiteturas de computadores. Isso permite que

aplicações desenvolvidas em MPI sejam executadas em diferentes arquiteturas sem a

necessidade de alterações. O documento que define o padrão "MPI: A Message-Passing

Standard" foi publicado pela Universidade de Tennesee e encontra-se em

http://www.mcs.anl.gov/mpi/.

A versão 1.1 de MPI possui ao todo 129 funções, mas com um número

reduzido (6) é possível resolver uma grande variedade de problemas (Pacheco, 1997). O MPI

define funções para:

4 Serviço permanentemente ativo em um sistema que aguarda instruções para disparar ações específicas.

26

• Comunicação ponto a ponto;

• Comunicação coletiva (de grupo);

• Grupos de processos;

• Gerenciamento de processos.

Atualmente o MPI possui diversas implementações comerciais ou de

domínio público. Neste trabalho utilizou-se a implementação de domínio público MPICH (MPI

Chameleon), do Argonne National Laboratory. Seu download e documentação completa pode

ser encontrada em: http://www-unix.mcs.anl.gov/mpi/mpich/download.html.

2.3.2 Bibliotecas de threads

Um thread pode ser definido como um fluxo de execução dentro de um

processo e consiste em um contador de instruções, um conjunto de registradores e um espaço de

pilha (Silberschatz, 2001).

Devido ao alto custo envolvido na criação de novos processos, a utilização

de múltiplos threads, ou multithreading, em um programa pode apresentar vantagens. Na

criação de um novo processo o sistema operacional copia todos os atributos do processo

corrente para o processo que está sendo criado. Já os threads compartilham os atributos do

processo. Deste modo a criação de um novo thread é menos custosa pois não é necessário

efetuar uma cópia dos atributos, bastando inicializar seus ponteiros de modo que referenciem os

atributos do processo (Picinin, 2001) (Silberschatz, 2001).

Além disso, os programas com múltiplos threads podem ter ganhos de

desempenho significativos tirando partido de arquiteturas multiprocessadas, de modo que

diferentes threads podem ser executados simultaneamente em diferentes processadores.

Mais informações sobre uso de threads e ganhos de desempenho com seu

uso podem ser encontrados em (Martinotto, 2001), (Picinin, 2001) e (Picinin, 2002).

Pode-se notar também o aumento do throughput5 do sistema. A execução de

um programa com um só thread resulta freqüentemente em tempo de CPU livre. Isto ocorre

quando o programa faz alguma chamada ao sistema operacional e tem que esperar que o serviço

esteja totalmente atendido antes de poder continuar. Em um programa multithread, se um thread

faz uma chamada ao sistema e fica bloqueado à espera que este seja totalmente atendido, outro

thread pode executar. Esta sobreposição permite uma melhor utilização da CPU mesmo em

máquinas monoprocessadas.

5 Quantidade de tarefas completadas por unidade de tempo.

27

Embora existam bons argumentos para o uso de múltiplos threads nas

aplicações, a adição de threads também introduz complexidade e a possibilidade de encontrar

uma nova classe de erros (deadlock, starvation, etc.) que não fazem parte dos problemas da

programação com thread único. Também se pode fazer necessário o uso de sincronização intra-

nodal, que pode ocasionalmente acarretar em sobrecarga extra, podendo afetar o desempenho da

aplicação.

Existem vários modelos de programação com threads. Nas plataformas

originárias do UNIX predominam Pthreads e o OpenMP.

2.3.2.1 Pthreads

O Pthreads (Lewis, 1998) é especificado pelo padrão POSIX 1003.1c. Esta

especificação define uma API para o desenvolvimento de ferramentas de suporte à programação

utilizando threads.

Em Pthreads, os threads são criados e eliminados dinamicamente, conforme

a necessidade. Além disso, o padrão oferece mecanismos de sincronização, como semáforos,

mutexes e variáveis condicionais.

Para utilizar a biblioteca Pthreads no Linux não é necessária a instalação de

nenhum componente, já que a mesma é padrão para este sistema operacional.

2.3.2.2 OpenMP

OpenMP (OpenMP, 2003) é uma especificação para um conjunto de

diretivas de compilador, biblioteca de rotinas e variáveis de ambiente que podem ser usadas

para especificar paralelismo em memória compartilhada.

O padrão OpenMP foi definido por um grupo de empresas que inclui:

Compaq, IBM, Intel, Silicon Graphics, Kuck & Associates, Sun Microsystems e US Department

of Energy ASCI Program.

OpenMP foi desenvolvido para ser um padrão flexível e de fácil

implementação em diferentes plataformas. Sua API pode ser dividida em 6 categorias: regiões

paralelas, compartilhamento de trabalho, sincronização, ambiente de dados, biblioteca de

funções e variáveis de ambiente.

28

O modelo de execução paralelo adotado em OpenMP é o fork-join. Como

mostrado na Figura 2.7, o programa inicia a execução com uma simples thread, chamado de

mestre. Quando esta atinge um construtor paralelo, ela cria um conjunto de n threads e o

trabalho continua em paralelo ao longo destas. Ao sair do construtor paralelo os threads

sincronizam e se juntam ao thread mestre, que segue sozinha a execução.

Para o uso do OpenMP é necessário o uso de um compilador especial, já que

compiladores comuns não suportam as diretivas do OpenMP.

Um compilador disponível gratuitamente para OpenMP é o OMNI. O pacote

disponibiliza um compilador e todas as bibliotecas necessárias. O compilador OMNI e sua

documentação podem ser obtido em http://phase.etl.go.jp/Omni/.

serial serial serialparalelo paralelo

thread 0

thread 1

thread 2

thread 0

thread 1

thread 2

início fim

Figura 2.7: Modelo de execução OpenMP

2.3.3 Bibliotecas de álgebra linear e resolução de sistemas

Sistemas de equações lineares e problemas que utilizam álgebra linear para

sua solução estão entre os maiores consumidores de tempo de processamento dos programas

científicos. No intuito de tornar a resolução desses sistemas cada vez mais rápidos e eficientes,

foram desenvolvidas diversas bibliotecas com diversas operações e métodos para a resolução

dos mesmos.

Esta seção tem como objetivo mostrar as características e funcionalidades de

duas bibliotecas gratuitas, uma para operações de álgebra linear e a outra para solução de

sistemas de equações, que são as mais utilizadas atualmente no meio científico: BLAS e PETSc,

respectivamente.

29

2.3.3.1 BLAS

BLAS (Basic Linear Algebra Subroutines) é um conjunto de rotinas de

operações vetoriais e matriciais básicas. É muito usada como camada em diversos softwares

matemáticos, como por exemplo, a biblioteca PETSc.

A versão inicial da BLAS destinava-se ao uso da linguagem Fortran.

Atualmente pode ser utilizada com C e C++ em diversas arquiteturas. A biblioteca BLAS

consiste em 3 níveis, cujas funcionalidades podem ser vistas na Figura 2.8.

BLAS utiliza convenção de nomes para identificar uma operação e o tipo de

dado envolvido na mesma. Exemplos desta convenção são:

• CSUM: soma de dois vetores (SUM) de números complexos (C);

• DTRMM: multiplicação de matrizes (MM) entre duas matrizes

triangulares (TR) de dupla precisão (D).

Uma completa referência das operações disponível na BLAS pode ser

encontrada em http://padmin2.ncsa.uiuc.edu/auxdocs/mkl/mklqref/index.htm.

Nível Complexidadedas Operações Exemplos de operações

BLAS 1 O vetores, produto escalar, norma de vetores

BLAS 2 O(n2) Multiplicação matriz-vetor, transposição de matrizes,solução de sistemas tridiagonais

BLAS 3 O(n3) Multiplicação matriz-matriz, fatorização LU

Figura 2.8: Níveis da biblioteca BLAS

Segundo (Dongarra, 2000), os ganhos de desempenho no nível 1 da BLAS

são de no máximo 15%. Neste nível os ganhos de desempenho ficam a cargo das otimizações

das operações de ponto flutuante e estruturas de repetição. Já nos níveis 2 e 3 os ganhos de

desempenho variam entre 10 e 300%. Esse fato se deve às otimizações de laços de repetição e

técnicas de acessos rápidos de memória, além da otimização das operações de ponto flutuante,

também presente no nível 1.

Várias implementações da BLAS estão disponíveis no mercado, muitas delas

são versões otimizadas para uma arquitetura específica. A versão utilizada é parte integrante do

pacote ATLAS6 (Automatically Tuned Linear Algebra Software). Este pacote fornece os 3

níveis com uma importante funcionalidade: no início da instalação, é feita a verificação da

arquitetura hospedeira e o pacote é otimizado automaticamente (Automatically Tuned).

6 math-atlas.sourceforge.net

30

2.3.3.2 PETSc

PETSc (The Portable, Extensible Toolkit for Scientific Computation) (Balay,

2003) é um conjunto de bibliotecas para a solução em paralelo de problemas relacionados à

discretização de equações diferenciais parciais e afins. Permite resolver sistemas de equações

lineares e não-lineares, tanto densos como esparsos, além de possuir um abrangente controle de

erros e funções para gráficos simples.

As estruturas de dados básicas e operações relacionadas são transparentes ao

usuário, sendo apenas acessadas através de tipos genéricos e funções. PETSc também fornece

um grande número de opções que podem ser selecionadas em tempo de execução.

Um exemplo destas opções é a seleção do resolvedor em tempo de execução.

Qualquer resolvedor de sistemas lineares poderá ser escolhido através da opção de linha de

comando -ksp_type seguido pela opção desejada. No exemplo a seguir o método escolhido é o

gradiente conjugado (GC).

mpirun -np 2 program_name –ksp_type cg

Esta característica é extremamente útil no desenvolvimento de programas de

propósito geral, que podem ser usados para resolver uma variedade de tipos diferentes de

problemas simplesmente escolhendo um resolvedor para cada uma delas.

PETSc utiliza MPICH em todas as comunicações de troca de mensagens, e

BLAS e LAPACK7 para operações de álgebra linear. A organização do pacote PETSc é

mostrado na Figura 2.9.

Figura 2.9: Organização da Biblioteca PETSc

O pacote e a documentação podem ser obtidos em: http://www-

unix.mcs.anl.gov/petsc/.

7 www.netlib.org/lapack

31

2.4 Conclusão

Neste capítulo foram tratados as questões referentes ao hardware e software

utilizado para a implementação de aplicações paralelas.

Em relação ao hardware, os clusters têm se mostrado uma opção acessível de

ambiente paralelo. Atualmente, com o avanço dos processadores comuns e das redes, pode-se

obter desempenho equivalente ao de PVPs e MPPs por um custo muito menor.

Em clusters, pode-se explorar o paralelismo intra-nodal e o inter-nodal,

fazendo-se necessário o uso de bibliotecas threads e de troca de mensagens respectivamente.

Nesse contexto, foram apresentadas duas bibliotecas de troca de mensagens: MPICH e PVM, e

para multithreading: Pthreads e OpenMP.

Buscou-se também proporcionar uma visão geral da biblioteca de álgebra

linear BLAS e da biblioteca de resolução de sistemas PETSc, mostrando suas principais

características.

32

3. PROCESSAMENTO PARALELO

O paralelismo em nível de programa pode ser explorado tanto

explicitamente, como implicitamente. A exploração do paralelismo explícito tem como principal

desvantagem o fato de requerer um projeto (e/ou um projetista) mais sofisticado do que o

necessário para explorar o paralelismo implícito. Porém, possui como principal vantagem à

obtenção de melhor desempenho, já que o projeto pode atentar às peculiaridades da arquitetura e

do algoritmo.

De fato, a programação paralela explícita requer que o projetista do

algoritmo paralelo especifique como os processadores devem operar e interagir para resolver um

problema específico. A tarefa do compilador é, nesses aspectos, apenas gerar as instruções

especificadas pelo programador, pois todo trabalho na paralelização das tarefas fica a cargo do

programador.

Já a programação paralela implícita emprega uma programação seqüencial, e

utiliza um compilador que insira automaticamente as instruções necessárias para executar o

programa de forma paralela. Essa abordagem é, sob o ponto de vista da programação, mais fácil.

Porém, a conversão automática de programas seqüenciais para paralelos é, via de regra, mais

satisfatória em arquiteturas vetoriais do que em arquiteturas com memória distribuída.

Além disso, em clusters multiprocessados, como o utilizado para executar os

experimentos computacionais desenvolvidos neste trabalho, tem-se memória compartilhada e

memória distribuída e, assim, pode-se explorar os dois níveis de paralelismo, o intra e o inter-

nodal. Então, neste trabalho, emprega-se a abordagem explícita, já que inexistem ferramentas

apropriadas para extrair o paralelismo implicitamente desse tipo de arquitetura (Picinin, 2001).

3.1 Paradigmas de Programação

Sob o ponto de vista de programação, os paradigmas de programação

paralela podem ter diversas classificações, e estas divergem de autor para autor. Uma

classificação é aquela de (Silva, 2003), onde se têm os seguintes paradigmas:

• Mestre-Escravo;

• Single Program Multiple Data;

• Pipeline de Dados;

• Divisão e Conquista.

33

3.1.1 Mestre-Escravo

O paradigma Mestre-Escravo, como o próprio nome sugere, consiste em

duas entidades: mestre e múltiplos escravos. O mestre é responsável pela decomposição do

problema em pequenas tarefas, em distribuir estas tarefas entre os escravos, e reunir os

resultados parciais obtidos. Estes resultados quando reunidos geram a solução total do

problema. Os processos escravos recebem as mensagens com a tarefa, processam esta tarefa e

enviam o resultado ao mestre. Geralmente a comunicação é efetuada apenas entre mestre e

escravos. Uma representação deste paradigma pode ser encontrada na Figura 3.1.

Figura 3.1: Representação para fases do paradigma Mestre-Escravo

Este paradigma pode alcançar bons speedups, (ver seção 3.5), e uma boa

escalabilidade. No entanto, o controle centralizado para um número elevado de processadores

pode tornar o processo mestre um gargalo para a aplicação. Isso pode ser resolvido estendendo o

controle para um conjunto de mestres, onde cada mestre controla um conjunto de escravos

distintos.

3.1.2 Single-Program Multiple-Data (SPMD)

O paradigma SPMD é o paradigma mais comumente utilizado. Cada

processo executa basicamente o mesmo trecho de código, mas em diferentes partes dos dados.

Isso envolve a divisão dos dados da aplicação entre os processadores disponíveis. Após a

divisão, os processos podem necessitar de comunicação ou/e sincronização. Os dados podem ser

inicializados pelo próprio processo ou podem ser lidos de um disco durante o estágio de inicial.

Veja uma representação na Figura 3.2.

As aplicações SPMD podem ser muito eficientes se tiverem seus dados bem

distribuídos e o sistema hospedeiro for homogêneo. Se os processos apresentam diferentes

34

cargas de trabalho ou capacidades, então o paradigma pode exigir algum esquema de

balanceamento de carga capaz de adaptar a distribuição de dados em tempo de execução.

Figura 3.2: Representação para fases do paradigma SPMD

3.1.3 Pipeline de dados

Neste paradigma, os processos são organizados em um pipeline, onde cada

processo corresponde a um estágio do pipeline e é responsável por uma tarefa específica, como

representado na Figura 3.3.

Figura 3.3: Representação para fases do paradigma pipeline

O padrão de comunicação neste paradigma é simples, de modo que pode ser

visto como um fluxo dos dados de um processo para o outro. Por este motivo este tipo de

paralelismo é referenciado como paralelismo de fluxo. A eficiência deste paradigma depende

diretamente do balanceamento de carga entre os estágios do pipeline.

3.1.4 Divisão e conquista

O paradigma de divisão e conquista é bem conhecido no desenvolvimento de

algoritmos seqüenciais. Um problema é dividido em dois ou mais subproblemas. Cada um

destes subproblemas é resolvido independentemente e seus resultados são combinados para se

35

chegar ao resultado final. Muitas vezes, os subproblemas são instâncias do problema original,

dando origem a uma execução recursiva.

No paradigma de divisão e conquista paralelos, os subproblemas podem ser

resolvidos simultaneamente de forma paralela. Além disso, pouca ou nenhuma comunicação

entre processos é necessária, já que os subproblemas são independentes. Veja uma

representação na Figura 3.4.

Figura 3.4: Representação para fases do paradigma Divisão e Conquista

Em algumas aplicações, pode-se misturar elementos de diferentes

paradigmas. Métodos híbridos podem combinar elementos de diversos paradigmas em

diferentes partes de um mesmo programa.

3.2 Estratégias para a Extração do Paralelismo

A construção de aplicações paralelas pode ser orientada por duas estratégias

principais, como segue:

1. Paralelismo de dados: onde as tarefas possuem a mesma função

operando sobre porções de dados diferentes, ou seja, utilizam-se do

paradigma de programação SPMD ou mestre-escravo;

2. Paralelismo funcional: onde as tarefas da aplicação possuem

diferentes funções, cada uma responsável por uma etapa do trabalho.

O paralelismo funcional pode ser implementado utilizando tanto o

paradigma mestre-escravo, quanto pipeline de dados.

Em geral, a decomposição funcional reduz a complexidade de projeto. Um

exemplo disso é o caso de modelos computacionais de sistemas complexos, que podem ser

estruturados como conjuntos de modelos mais simples, conectados por interfaces. Veja um

36

exemplo em (Foster, 1994) do emprego do paralelismo funcional para um modelo

meteorológico, que contém como “sub-modelos” o modelo hidrológico, oceânico e o da

superfície da Terra.

Neste trabalho, as estratégias de implementações para a obtenção da solução

em paralelo enfocam o paralelismo de dados, cujos modelos mais utilizados são a decomposição

ou particionamento de dados, onde as operações e os dados são distribuídos entre os processos

disponíveis e são resolvidos em paralelo, e a decomposição de domínio, onde se obtém a

solução do problema global combinando as soluções de subproblemas locais.

3.2.1 Técnicas para a solução paralela de sistemas de equações

Para a solução de sistemas de equações em paralelo são duas as abordagens

mais exploradas: a paralelização de métodos numéricos, e o emprego de métodos de

decomposição de domínio. É importante frisar que ambas abordagens se encaixam na estratégia

de paralelismo de dados. Na primeira abordagem gera-se um único sistema de equações para

todo o domínio, que é resolvido através de um método numérico paralelizado. Na segunda

abordagem emprega-se um método de decomposição de domínio (MDDs). MDDs designam um

conjunto de técnicas matemáticas e computacionais que fornece a solução global do problema

pela combinação apropriada das soluções obtidas em cada um dos subdomínios (Rizzi, 2003).

Neste trabalho são empregados métodos de decomposição de domínio. Uma

vez que diferentes subdomínios podem ser tratados independentemente, exceto nos pontos de

sincronismo, tais métodos são atrativos para ambientes computacionais de memória distribuída,

como é o caso dos clusters de PCs. Tais MDDs podem ser divididos em duas grandes classes:

métodos de Schwarz, onde os subdomínios apresentam uma região de sobreposição, e métodos

de Schur, onde os subdomínios não apresentam região de sobreposição (Smith, 1996). Mais

detalhes sobre os métodos são apresentados e discutidos no capítulo 6.

3.3 Metodologia de desenvolvimento de programas paralelos

A metodologia PCAM (Partitioning, Communication, Agglomeration e

Mapping) proposta por Foster (Foster, 1995), constitui um bom método para o desenvolvimento

de programas paralelos. O objetivo declarado desta proposta é projetar algoritmos

independentes de uma arquitetura particular fornecendo estratégias para maximizar as

37

alternativas de paralelismo visando minimizar os problemas que podem ocorrer nas etapas do

desenvolvimento do projeto.

A estrutura metodológica de Foster é composta por quatro fases: o

particionamento, a comunicação, a aglomeração e o mapeamento. Nas primeiras duas fases, são

enfocadas a concorrência e a escalabilidade e procura-se descobrir algoritmos que tenham estas

qualidades; no terceiro e quarto estágios, os enfoques são a localidade e outros aspectos

relacionados ao desempenho. Estes quatro estágios podem ser sintetizados como representado

na Figura 3.5 e, como detalhado a seguir.

Figura 3.5: Estrutura da Metodologia PCAM (Foster, 1995)

• Particionamento: a computação a ser executada e o seu respectivo

conjunto de dados, devem ser decompostos em pequenas tarefas.

Como a abordagem é genérica, ignoram-se questões como o número

de processadores e características específicas de máquinas em

particular. O enfoque neste passo é reconhecer as oportunidades para

execução paralela. Existem duas formas de gerar partições: através

da divisão dos dados ou das funções, tal como mostrado na seção

3.2;

• Comunicação: deve-se determinar a comunicação necessária para

coordenar a execução das tarefas e as estruturas mais apropriadas

para a realização desta tarefa;

• Aglomeração: deve-se avaliar as estruturas das tarefas e das

comunicações, definidas nos dois primeiros estágios do projeto, com

respeito às exigências de desempenho e aos custos de

implementação. Se necessário, as tarefas podem ser combinadas em

38

tarefas maiores para aumentar o desempenho e/ou reduzir os custos

de projeto/implementação;

• Mapeamento: cada tarefa é endereçada para um processador na

tentativa de satisfazer os objetivos de maximizar a utilização de cada

um deles e minimizar os custos de comunicação. Este mapeamento

pode ser especificado de forma estática, ou determinado em tempo

de execução, por algoritmos de balanceamento de carga.

Assim, o projeto metodológico PCAM para desenvolvimento de programas

paralelos é estruturado, ou seja, inicia com uma especificação do problema; depois se

desenvolve uma estratégia de particionamento; em seguida se determinam as necessidades de

comunicação e aglomeração de tarefas e realiza-se mapeamento destas para os processadores.

3.4 Métricas para Avaliação de Desempenho Computacional

O desempenho de um programa em uma arquitetura pode ser mensurado de

diversos modos. As medidas mais utilizadas são: tempo de execução, speedup e eficiência.

3.4.1 Tempo de execução

O tempo de execução de um programa paralelo é o tempo que decorrido

desde o primeiro processador iniciar a execução do programa até o último terminar. A fórmula

para determinar o tempo de execução é dada por:

inicialfinalexec TTT −=

3.4.2 Speedup

O Speedup (S) obtido por um algoritmo paralelo executando sobre p

processadores é a razão entre o tempo levado por aquele computador executando o algoritmo

serial mais rápido (Ts) e o tempo levado pelo mesmo computador executando o algoritmo

paralelo usando p processadores (Tp). Esta definição é representada pela expressão:

S Ts Tp=

À medida que o número de processadores é incrementado, o speedup de uma

aplicação também é incrementado. No entanto, pode ocorrer em alguns casos a saturação do

sistema. A partir desse ponto a adição de novos processadores não resulta em ganho de

39

desempenho, podendo acontecer até mesmo o reverso (speeddown). Isso se deve a sobrecarga

causada pelo aumento de comunicação entre os processadores e o aumento de tarefas de

sincronização.

3.4.3 Eficiência

A eficiência (E) é a razão entre o speedup obtido com a execução com p

processadores e p. Esta medida mostra o quanto o paralelismo foi explorado no algoritmo.

Quanto maior a fração inerentemente seqüencial menor será a eficiência.

E S p=

3.5 Conclusão

Apesar da literatura ser um tanto confusa em relação aos paradigmas de

programação, apresentou-se neste trabalho alguns deles de acordo com a abordagem de (Silva,

2003). Segundo o autor, podemos citar os paradigmas Mestre-Escravo, Single Program Multiple

Data, Pipeline de Dados e Divisão e Conquista.

Num segundo momento, foram abordadas as estratégias para a extração do

paralelismo e as técnicas, paralelização de métodos numéricos e decomposição de domínio, para

a Solução Paralela de Sistemas de Equações.

Ainda neste capítulo, apresentou-se a metodologia PCAM (Partitioning,

Communication, Agglomeration e Mapping) proposta por Foster (Foster, 1995).

Finalizando o capítulo encontram-se algumas métricas de avaliação de

desempenho computacional, que são utilizadas para avaliar os ganhos de desempenho de uma

determinada aplicação em relação ao seu algoritmo seqüencial. Com isso pode-se saber se a

paralelização foi vantajosa ou não.

40

4. PARTICIONAMENTO DE DADOS E DE DOMÍNIO

Para a solução em paralelo de um determinado sistema de equações

utilizando-se da abordagem de decomposição de domínio ou da abordagem de paralelização de

métodos numéricos (estratégias discutidas no capítulo 3), é necessário que o domínio global ou

os dados do problema sejam “divididos” em partes menores, e cada parte atribuída a um

processo. Desse modo, o processo pode ser resolvido de modo simultâneo por uma coleção de

processadores.

O domínio computacional deve ser particionado entre os processadores

disponíveis atendendo pelo menos dois requisitos básicos (Dorneles, 2001):

• A carga de trabalho deve ser bem balanceada entre os processadores;

• A comunicação entre os processadores deve ser minimizada;

Uma distribuição desigual do domínio entre os processadores faz com que

alguns terminem antes sua tarefa, permanecendo ociosos até que os outros processadores

cheguem nos pontos de sincronização e os primeiros recebam os dados necessários para

executar uma nova carga de tarefas, o que resulta em redução da eficiência. Para minimizar a

comunicação entre os processos deve-se diminuir o número de células nos contornos dos

subdomínios, visto que as aplicações paralelas são, geralmente, síncronas, e as comunicações

são restritas às essas fronteiras dos subdomínios.

O problema de particionamento de domínio em subdomínios, considerando-

se a arquitetura disponível e exigindo o balanceamento de carga e a minimização da

comunicação dos processos, durante tempo de execução, é uma das etapas mais importantes da

Computação Científica Paralela (Rizzi, 2002). No entanto, apesar de ser um fator de grande

relevância na paralelização de uma aplicação, não existe um algoritmo que determine um

particionamento ótimo, pois este é um problema NP-difícil (Garey; Johnson, 1979). Assim, para

se ter aproximações razoavelmente boas, são empregados algoritmos heurísticos, como os

apresentados e discutidos na seção 4.3.

4.1 Malhas e Grafos

O domínio para aplicações paralelas é, geralmente, representado por uma

malha bi ou tri-dimensional, como mostrado na Figura 4.1. A execução eficiente da aplicação

requer um mapeamento da malha entre os processadores, de forma que cada processador receba

uma quantidade de nodos (ou células computacionais) proporcional a sua capacidade de

processamento, e de tal modo que a comunicação entre os processadores seja minimizada.

41

Figura 4.1: Domínio (azul) e respectiva malha.

Para que seja possível particionar uma malha, utilizando-se de algoritmos de

grafos, é preciso antes transformá-la em um grafo. Em diversos tipos de aplicações os nodos

representam as coordenadas em um espaço bi ou tridimensional, ou seja, as células

computacionais, e as arestas representam a comunicação ou dependência entre nodos vizinhos,

ou seja, a dependência de dados entre as células computacionais.

4.2 O Problema de Particionamento de Grafos

O problema de particionamento de domínio pode ser modelado como um

problema de particionamento de grafos (Rizzi, 2002). Uma aplicação pode ser vista como um

grafo G=(V, A, pv, pa), onde: V = 0,...,n-1) é o conjunto dos n vértices; A ⊆ V×V é o conjunto

de arestas; pv é o peso dos vértices, e; pa é o peso das arestas.

Sob esse ponto de vista, o domínio mostrado na Figura 4.1 pode ser

representado por grafo (ou, uma malha cartesiana regular) como mostrado na Figura 4.2.

Figura 4.2: Grafo referente à malha da Figura 4.1.

Note-se que se pode ter distintos significados para a terminologia “nodos” e

“arestas”. Por exemplo, nodos podem descrever processos ou dados, arestas podem significar

dependências de dados ou necessidades de comunicação.

Sob o ponto de vista de grafos o problema do particionamento de dados ou

de domínio conhecido como o “problema de k-particionamento de grafos”, que consiste em

42

dividir um grafo em k subgrafos, de modo que cada subgrafo contenha um número semelhante

de vértices, e que o número arestas entre os subgrafos seja o menor possível (Karypis, 1996).

4.3 Heurísticas e Métodos de Particionamento

Sendo o problema de k-particionamento um problema NP-difícil sua solução

pode ser aproximada por algoritmos heurísticos. Existem, pelo menos, duas grandes classes de

heurísticas, dependendo das informações disponíveis sobre o grafo, que são as geométricas e as

combinatórias (Santos, 2001). Note-se que existem outras abordagens para o particionamento de

grafos, mas estas fogem do escopo do trabalho. Entre elas pode-se citar redes neurais e

algoritmos genéticos (Bhargava, 1993).

A primeira classe é utilizada quando estão disponíveis informações sobre as

coordenadas de cada vértice do grafo. Isto ocorre freqüentemente em grafos derivados da

discretização de um domínio físico. Os algoritmos geométricos são bastante rápidos, mas

tendem a gerar partições de qualidade relativamente inferiores, pois calculam as mesmas

baseadas nas coordenadas dos vértices (juntando aqueles que estão mais perto no espaço) e não

na sua conectividade.

Já a segunda classe é utilizada quando o grafo não possui coordenadas

associadas aos vértices, isto é, não há identificação de um nodo com um ponto físico no espaço.

Estes algoritmos calculam as partições baseadas nas adjacências do grafo, juntando vértices que

são altamente conectados, sem se importar com sua localização. Estes tipos de algoritmos são

mais lentos que os geométricos, mas geram partições com corte de arestas menor, sendo menos

provável que haja subdomínios desconexos.

Além disso, as heurísticas de particionamento ainda podem ser divididas em

métodos globais, locais ou multiníveis (Dorneles, 2001).

4.3.1 Métodos globais

Métodos globais são algumas vezes chamados de heurísticas de construção,

uma vez que utilizam a descrição do grafo como entrada e geram várias partições.

Existem diversos algoritmos, baseados nas heurísticas, para realizar o

particionamento global de um grafo. Destes podemos citar o particionamento em faixas, o

particionamento em blocos, a bissecção recursiva ortogonal (ORB), a bissecção recursiva por

43

coordenada (RCB), a bissecção inercial, as curvas de preenchimento do espaço, a bissecção

espectral, e a bissecção nivelada.

Neste trabalho será discutido apenas o RCB, por ser um dos algoritmos

utilizados no particionamento no modelo HIDRA. Os demais algoritmos são detalhados em

(Dorneles, 2001) e (Santos, 2001).

4.3.1.1 Bissecção recursiva por coordenada (RCB)

Nestes algoritmos, as divisões (bissecções) são feitas recursivamente e

sempre de modo ortogonal à sua maior dimensão, como ilustrado na Figura 4.3. Desse modo,

objetiva-se diminuir o número de elementos das fronteiras e gerar subdomínios com carga

aproximadamente equivalentes.

(a) (b) (c)

Figura 4.3: (a) Domínio Inicial. (b) Domínio Particionado após um passo do RCB. (c) Domínio apósdois passos do RCB.

O algoritmo consiste basicamente nos seguintes passos: a) determinar a

maior dimensão do domínio (direção x, y ou z); b) atribuir metade dos vértices para cada

subdomínio; c) repetir recursivamente até que seja alcançado o número de partições requerido.

O RCB é um método rápido, requer pouca memória, e segundo (Schloegel,

2000 e Santos, 2001) é fácil de ser paralelizado. Note-se, porém, que o algoritmo RCB usado

neste trabalho é o implementado no modelo HIDRA que é empregado de modo seqüencial.

4.3.2 Métodos locais

Apesar de alguns dos métodos globais produzirem bons cortes,

freqüentemente há um potencial grande de melhora através de rearranjos locais. Os métodos

locais são os responsáveis por esta melhora. Estes métodos recebem como entrada um grafo e

44

suas respectivas partições e fazem um refinamento destas através da troca de vértices (nodos)

entre elas. Por isso as heurísticas dessa classe são, também, são chamadas de heurísticas de

melhoramento.

Desta classe, destacam-se os algoritmos Kernighan-Lin (Kernigham, 1970) e

Fiduccia-Mattheyses (Fiduccia, 1982).

O método Kernighan-Lin (KL) consiste em selecionar pares de vértices, que

quando trocados entre os subdomínios resultem na melhora da qualidade das partições. O ganho

é calculado pela redução do corte de arestas. Quanto menos arestas cortadas, maior o ganho

obtido. Se o ganho sobre um par de vértices é positivo, claramente é desejável fazer a troca, mas

em alguns casos pode-se mover vértices com ganhos negativos, pois estes podem trazer

benefícios nas próximas iterações do algoritmo, por exemplo, movendo a partição de um

mínimo local.

O principal inconveniente deste método é sua complexidade: requer O(N3)

operações por iteração. Porém, este método merece destaque por ser utilizado na fase de

refinamento nos métodos multinível, descrito na seção 4.4. O método Fiduccia-Mattheyses

(FM) é uma modificação do algoritmo KL. Este algoritmo move apenas um vértice por vez

entre os subdomínios, ao invés de um par, como no KL.

Na Figura 4.4 se ilustra a aplicação do algoritmo KL. Na parte (a) mostra-se

uma partição gerada de modo não apropriado, dado que os vértices que estão em destaques na

Figura 4.4(a) devem ser trocados entre os subdomínios, mas sobre estes é associada uma

quantidade excessiva de comunicação. Já na Figura 4.4(b) mostra-se o refinamento que pode ser

feito empregando o algoritmo KL.

Figura 4.4: Exemplo de refinamento por KL

Pode-se notar, que em (a) os subdomínios necessitam comunicar-se seis

vezes entre si. Em (b), após a execução do algoritmo KL, as comunicações necessárias foram

reduzidas pela metade.

45

4.4 Métodos Multiníveis

Estes métodos podem ser vistos como uma combinação de algoritmos

globais e locais. É o principal método utilizado pelo pacote de particionamento METIS, que é

empregado no modelo HIDRA e pelo software GERATRIZ para fazer o particionamento. O

pacote METIS é discutido na seção 4.5.1.

A idéia básica dos algoritmos multiníveis de particionamento de grafos

consiste basicamente de três fases:

• Encolhimento: o grafo é reduzido a um grafo menor através da contração

de arestas (agrupamento de vértices) até que o número de vértices do

grafo seja um múltiplo pequeno do número buscado de partições;

• Particionamento inicial: o grafo menor é particionado utilizando alguma

técnica como bissecção inercial ou espectral. Este particionamento é

bastante rápido, pois é realizado no grafo reduzido;

• Fase de refinamento e crescimento: o grafo é expandido, e suas partições

são melhoradas através de um método local.

Figura 4.5: Esquema Multinível (Kumar, 2003)

Os métodos multinível apresentam bons resultados por duas razões: a

primeira é que com um número reduzido de arestas, é mais fácil calcular uma partição com boa

qualidade. A segunda e devido ao fato de que os métodos locais se tornam muito mais

poderosos, porque movendo um único vértice é como se mover um grande número deles no

grafo original, porém só que de forma muito mais rápida.

Uma grande variedade de alternativas e esquemas de encolhimento,

particionamento inicial e refinamento foram estudados e avaliados em (Karypis, 1996).

46

4.5 Pacotes de Particionamento

Dentre os pacotes e bibliotecas para particionamento de grafos, os mais

conhecidos e utilizados são: o METIS, JOSTLE (Walshaw, 2000), CHACO (Hendrickson,

1995), SCOTCH (Pellegrini, 1996).

O METIS, por ser o pacote mais popular e um dos softwares utilizados no

particionamento no modelo HIDRA e no software GERATRIZ, receberá uma descrição mais

detalhada. O pacote METIS está disponível no endereço http://www.cs.umn.edu/~karypis/metis,

não sendo necessária licença de uso.

4.5.1 METIS

O software METIS é um pacote de particionamento de grafos e

reordenamento de matrizes esparsas desenvolvido na University of Minessota por George

Karypis e Vipin Kumar (Karipys, 1998). O pacote é composto por vários programas diferentes,

cada qual com uma finalidade específica:

• pmetis e kmetis, para o particionamento de grafos;

• partnmesh e partdmesh, para o particionamento de malhas;

• oemetis e onmetis, para ordenação de matrizes esparsas;

• mesh2nodal, mesh2dual, graphchk e mtest, programas auxiliares.

Destes programas, os de relevância para este trabalho são o pmetis e o

kmetis.

O pmetis utiliza um algoritmo de particionamento baseado em bissecção

recursiva multinível, como mostrado na seção 3.4, e o kmetis é baseado em um algoritmo de k-

particionamento multinível, descrito em (Karipys, 1998). O pmetis garante um balanceamento

perfeito a cada nível da recursão, enquanto o kmetis permite um desbalanceamento de até 3%.

Segundo (Karipys, 1998) o kmetis mais é indicado para particionamento de

um grafo em mais de 8 partes. Já o pmetis é mais rápido que o kmetis em particionamento de um

grafo em um número pequeno de partes (menor que 8).

Além de ser usado como programa independente, o METIS pode ser

utilizado como biblioteca. Através da biblioteca metislib, o usuário pode acessar todos os

algoritmos de particionamento do METIS. A biblioteca metislib está disponível para C e

Fortran.

47

4.6 Critérios para Escolha do Algoritmo

Vários fatores devem ser levados em consideração na escolha de um

algoritmo para o particionamento. Estes fatores estão relacionados tanto coma aplicação como

com a arquitetura onde os algoritmos serão executados.

Segundo (Bhargava, 1993), dentre os aspectos mais importantes que podem

ser analisados, destacam-se:

• Custo x qualidade: quanto maior o custo de um algoritmo, em relação a

tempo de execução, melhor a qualidade das partições geradas. Uma boa

estratégia é aquela que possui custo e qualidade equilibrados.

• Paralelizabilidade: este fator é muito importante quanto são considerados

grafos de grande porte.

• Custo de implementação: similarmente ao custo de execução, os

algoritmos que geram partições melhores também são mais complexos

de implementar. Deve-se ponderar muito este fator, pois muitas vezes

aplicações não exigem uma alta qualidade, sendo mais adequado a

implementação de um método mais simples.

4.7 Conclusão

Neste capítulo abordou-se o particionamento de dados e domínio. O

particionamento de domínio pode ser tratado como um problema de particionamento de grafos.

Por ser um problema NP-difícil, não existe um algoritmo que defina um particionamento ótimo,

assim faz-se necessário o uso de heurísticas para se ter aproximações razoavelmente boas.

As heurísticas podem ser classificadas como métodos globais, locais e

multiníveis. Os métodos globais tomam um grafo e geram um particionamento. Já os métodos

locais servem para o refinamento de grafos já particionados. Os métodos multiníveis são uma

combinação de métodos globais e locais.

A escolha de um algoritmo de particionamento é muito importante, pois a

divisão do domínio influencia na carga de trabalho para cada processo, e na quantidade de

comunicação entre eles, afetando diretamente o tempo de solução do problema.

48

5. SISTEMAS DE EQUAÇÕES

Um sistema de equações lineares pode ser definido como um conjunto de n

equações com m variáveis independentes entre si, na forma genérica, como:

11 1 12 2 1 1

21 1 22 2 2 2

1 1 2 2

n n

n n

m m mn n m

a x a x a x b

a x a x a x b

a x a x a x b

+ + + =+ + + =

+ + + =

⋯⋯⋮ ⋮ ⋱ ⋮ ⋮⋯ (5.1)

na qual ija (i,j = 1, 2, 3, ..., n) são os coeficientes do sistema de equações ix (i = 1, 2, 3, ..., n)

são as n incógnitas e ib (i = 1, 2, ...,m) são os termos independentes (Shigue, 2003).

As equações representadas em (5.1) podem ser descritas na forma matricial

como:

Ax b= (5.2)

para o qual se tem:

11 12 1 1 1

21 22 2 2 2

1 2

, ,

m

m

n n nm m m

a a a x b

a a a x bA x b

a a a x b

= = = ⋯⋯⋮ ⋮ ⋱ ⋮ ⋮ ⋮⋯A solução de um sistema de equações lineares é obtida através do cálculo de

um vetor x, formado por valores que satisfaçam a igualdade (5.2) (Steinbruch, 1999).

O estudo de sistemas de equações é de grande importância, pois estes

resultam de modelos discretos provenientes de vários tipos de aplicação, como programação

linear, dinâmica dos fluídos, modelagem do clima e previsão meteorológica, etc. (Saad, 1996).

5.1 Geração de Sistemas de Equações

Um modelo matemático que não possui solução analítica deve ser resolvido

numericamente. Além disso, tais modelos são, algumas vezes, definidos em uma região cujo

porte obriga o emprego de computação de alto desempenho. O processo de transformação do

modelo contínuo em um modelo discreto, que pode ser construído considerando-se um

determinado método de aproximação e um dado domínio de definição, gera sistemas de

equações que podem ser lineares ou não lineares (Galante, 2002).

49

No caso específico de sistemas gerados pela discretização de equações

diferenciais parciais (EDPs), pode-se aproximar cada uma das derivadas parciais do modelo

usando métodos de discretização como, por exemplo, o de diferenças finitas. Para essas

aproximações deve-se considerar, em geral, ao valores das células adjacentes. E nesse caso, o

nível de dependência de dados entre as células da malha, após a discretização, pode ser

representada usando um estêncil (molécula computacional). O estêncil empregado é aquele de

5-pontos, representado na Figura 5.1.

Figura 5.1: Estêncil de 5-pontos (molécula computacional)

Com a discretização usando o estêncil de 5-pontos, o valor de cada célula

depende da sua posição e dos quatro vizinhos. Ou seja, o valor de uma célula no domínio

depende de seu valor central (C) e do valor de seus quatro vizinhos, que são: esquerdo (E),

direito (D), superior (S) e fundo (F). O estêncil computacional define a posição e valor de cada

elemento na matriz e a estrutura e regularidade da mesma (Picinin, 2002). A Figura 5.2 mostra a

construção de uma matriz a partir da aplicação do estêncil ao domínio (cinza).

Figura 5.2: Geração de Sistemas de Equações

50

A geometria do domínio ou dos subdomínios determina a localidade dos

elementos não-nulos da matriz. Na Figura 5.2, pode-se notar que um domínio não-retangular

gerou consequentemente uma matriz irregular. Da mesma forma um domínio retangular geraria

uma matriz regular, cujos elementos estão posicionados em forma de diagonais.

5.2 Métodos Diretos e Métodos Iterativos

Para a solução de sistemas de equações lineares, existem, basicamente, duas

classes de métodos que os resolvem: a classe dos métodos diretos e a classe dos métodos

iterativos.

Os métodos diretos apresentam a solução exata em um número finito de

passos, exceto por erros de arredondamento, que surgem devido a operações de ponto flutuante.

Métodos iterativos, por sua vez, utilizam-se de sucessivas aproximações dos valores das

incógnitas para obter uma solução cada vez mais acurada. Estas aproximações são feitas até que

se obtenha um limite de erro aceitável ou um número máximo de iterações (Martinotto, 2002).

Os métodos iterativos são os mais apropriados na solução de sistemas de

equações esparsos de grande porte, pois estes métodos trabalham apenas sobre os elementos não

nulos da matriz de coeficientes, não destruindo, portanto, a sua esparsidade. Essa questão é

importante, pois esse fato permite que se possa fazer otimizações no armazenamento, nas

estratégias de solução e de comunicação, de modo que se obtém soluções computacionalmente

eficientes.

5.2.1 Métodos iterativos do subespaço de Krylov

Os métodos iterativos podem ser classificados em estacionários ou não

estacionários. Nos estacionários, cada iteração não envolve informações da iteração anterior e

manipulam variáveis do sistema de equações lineares durante a resolução, através de operações

elementares entre linhas e colunas da matriz. Alguns exemplos são Jacobi, Gauss-Seidel e SOR

(Diverio, 1990). Os não estacionários trabalham sob a ótica da minimização da função

quadrática ou por projeção, manipulando os vetores e matrizes inteiros, e incluem a

hereditariedade em suas iterações, a cada iteração. Desse modo calcula-se um resíduo que é

usado na iteração subseqüente (Canal, 2000).

Dentre os métodos não estacionários, a classe mais promissora é a dos

métodos do subespaço de Krylov, pois são robustos e computacionalmente eficientes em

51

ambientes paralelos. Essa eficiência decorre do fato de que esses métodos são construídos sobre

operações básicas de álgebra linear e, portanto, são altamente paralelizáveis (Rizzi, 2002).

O método do subespaço de Krylov mais proeminente é o gradiente

conjugado (GC), que objetiva encontrar uma aproximação da solução para o sistema de

equações lineares (5.2) num subespaço de Krylov de k-dimensões. Considerando uma solução

inicial dada por x0 uma solução aproximada é obtida através de: 0kx K+ , onde kK é o

subespaço de Krylov de k-dimensões formado a partir de do subespaço gerado como:

10 0 0( , ,..., )k kK gerado r Ar A r−= , para k ≥ 1. O vetor r0 corresponde ao resíduo inicial e é

calculado a partir de 0 0r b Ax= − .

5.2.1.1 Método do gradiente conjugado

Para sistemas de equações cujas matrizes são simétricas e definidas-positivas

(SDP), o método do subespaço de Krylov mais eficiente é o gradiente conjugado (GC)

(Shewchuk, 1994).

O método baseia-se na minimização de uma dada função quadrática, e não

na interseção de hiperplanos como os métodos iterativos clássicos. Parte do princípio de que o

gradiente, que é um campo vetorial, aponta sempre na direção mais crescente da função

quadrática. Assim, as direções de procura devem buscar a solução na direção oposta do

gradiente.

Levando em consideração a característica SDP da matriz, o algoritmo do

GC, ao buscar minimizar essa função quadrática, tem a importante característica de calcular o

gradiente da função quadrática, )(xf∇ , que se pode mostrar ser definido por Axbxf −=∇ )( .

Então, como o objetivo é minimizar )(xf∇ , deve-se determinar o vetor solução x tal que

Axbxf −=∇ )( , ou seja o sistema de equações (5.2). Isso significa que ao encontrar a solução

do GC encontra-se a solução do sistema de equações a ele associado.

Existem diferentes algoritmos do GC que apresentam algumas modificações

em relação ao algoritmo original (Picinin, 2002). Neste trabalho a versão do algoritmo do GC

adotada é a apresentada em (Shewchuk, 1994), mostrado na Figura 5.3.

Nesse algoritmo, como entrada tem-se a matriz dos coeficientes A, o vetor b,

uma aproximação inicial de x0, o número máximo de iterações itmax e a tolerância do erro ε

(critério de parada). A idéia do Gradiente Conjugado é, então, ir efetuando novas iterações na

direção oposta à do gradiente (campo vetorial), de tal forma que as direções já pesquisadas não

seja repetidas, até encontrar o mínimo global. A minimização ocorre sobre certos espaços de

52

vetores, chamados de subespaço de pesquisa (espaço de Krylov), gerados a partir dos resíduos

(r) de cada iteração (Canal, 2000).

it ⇐ 0 (inicialização das iterações)r ⇐ b − Ax (subtração de vetores (produto matriz vetor))d ⇐ rδ_novo ⇐ rTr (produto escalar)δ_o ⇐ δ_novoenquanto I< itmax e δ_novo >ε2δ_o façaq⇐ Ad (produto matriz vetor)α ⇐ δ_novo / d

Tq (divisão (produto escalar))x ⇐ x + αd (adição de vetores (multiplicação escalar vetor))r ⇐ r − αq (subtração de vetores (multiplicação escalarvetor))δ_velho ⇐ δ_novoδ_new ⇐ rTr (produto escalar)β ⇐ δ_velho / δ_novod ⇐ r + βd(adição de vetores (multiplicação escalar vetor))it ⇐ it + 1

Figura 5.3: Algoritmo do Gradiente Conjugado

5.3 Métricas para Avaliação da Qualidade da Solução em Paralelo

Soluções numéricas são obrigatoriamente aproximadas relativamente às

soluções exatas. Essas soluções têm, além dos erros que podem eventualmente ser introduzidos

na etapa de programação, três tipos de erros que surgem de forma sistemática (Rizzi, 2002):

• erros de modelagem: que são os erros que surgem da diferença entre

o problema real e a solução exata do modelo matemático, que quase

sempre é aproximado;

• erros de discretização: que são aqueles de aproximação ou de

truncamento, e que surgem da diferença entre a solução exata das

equações na forma analítica, e a solução exata do sistema de

equações algébricas obtida quando da discretização das equações

analíticas;

• erros de arredondamento: que são os erros introduzidos nos cálculos

que são constantemente arredondados quando do uso de aritmética

de ponto flutuante.

Pode-se analisar e avaliar a qualidade da aproximação do modelo discreto e

os erros de arredondamento gerados pela solução desse modelo discreto, através do emprego de

métricas apropriadas. Essas métricas verificam a conservatividade de determinadas propriedades

53

físicas e/ou numéricas do esquema numérico e, em geral, consideram a diferença entre o valor

arredondado e o valor exato.

Assim, se i

*ϕ e e

iϕ são, respectivamente, a solução numérica e a solução discreta

exata, define-se o erro absoluto AE como * eA i iE = −ϕ ϕ e o erro relativo RE como

* *eR i i iE = −ϕ ϕ ϕ , se *

0i

ϕ ≠ , para calcular o erro relativo à solução exata, ou como

* e eR i i iE = −ϕ ϕ ϕ , se 0

e

iϕ ≠ , para calcular o erro relativo à solução numérica.

Erros relativos são mais apropriados já que é mais significativo saber se o erro

relativo é pequeno ou grande comparando-o com, por exemplo, 1,0 pois nesse caso 1,0RE = significa

que o erro absoluto é da mesma magnitude que o número que está sendo aproximado. Por exemplo, se o

erro relativo de i

*ϕ é da ( )5O 10− , diz-se que i

*ϕ tem precisão (ou acurácia) de cinco dígitos decimais.

Neste trabalho a solução exata, não disponível, será substituída na métrica do

erro relativo por aquela solução numérica fornecida pelo MATLAB, que servirá como um

benchmark. Assim serão calculados os erros relativos entre a solução fornecida pelo benchmark

MATLAB e a solução numérica fornecida pela versão seqüencial (monoprocessada) do

algoritmo do Gradiente Conjugado implementado. Essa abordagem indicará a qualidade

numérica entre a solução “exata” e a solução numérica. Agora, para avaliar a qualidade

numérica da solução seqüencial (monoprocessada) em relação à solução numérica obtida em

paralelo, será feita uma avaliação, usando a métrica do erro relativo, entre a solução gerada pela

versão seqüencial e a solução gerada versão biprocessada. Essa abordagem é suficiente dado

que a abordagem empregada neste trabalho para se obter o paralelismo é aquela que usa o

método de decomposição de domínio Aditivo de Schwarz. Nessa abordagem as trocas de dados

são restritas às fronteiras e, desse modo, basta avaliar as diferenças entre as soluções seqüencial

e paralela nas células adjacentes às fronteiras artificiais geradas pelo algoritmo ou pacote de

particionamento.

Note-se que, além das métricas destacadas nessa seção, existem outras mais

que podem ser adotadas e podem ser encontradas em (Rizzi, 2002).

5.4 Conclusão

Conforme o esquema de discretização empregado na transformação do

modelo contínuo para o modelo discreto, podem se originar sistemas de equações que são

lineares, esparsos e SDP. Os sistemas de equações lineares estão entre os mais freqüentes

problemas que são abordados pela computação científica.

54

Uma vez gerados, os sistemas de equações podem ser resolvidos

empregando dois tipos de métodos: os diretos e os iterativos. Os métodos iterativos são os mais

apropriados na solução de sistemas de equações esparsos de grande porte, pois estes métodos

trabalham apenas sobre os elementos não nulos da matriz de coeficientes, não destruindo a sua

esparsidade. Neste trabalho será utilizado um método iterativo do subespaço de Krylov, o

Gradiente Conjugado, dada as características intrínsecas da matriz dos coeficientes.

Para avaliar a acurácia das soluções numéricas encontradas pode-se utilizar

métricas específicas, conforme mostrado na seção 5.3.

55

6. MÉTODOS DE DECOMPOSIÇÃO DE DOMÍNIO

Métodos de decomposição de domínio (MDD) designam um conjunto de

técnicas e métodos matemáticos, numéricos e computacionais para resolver problemas em

computadores paralelos. Um MDD é caracterizado pela divisão do domínio computacional, que

é particionado em subdomínios empregando algoritmos de particionamento. A solução global

do problema é, então, obtida através da combinação dos subproblemas que são resolvidos

localmente. Cada processador é responsável por encontrar a solução local de um ou mais

subdomínios, que a ele são alocados e, então, essas soluções locais são combinadas para

fornecer uma aproximação para a solução global. No caso da resolução de sistemas de equações

de a combinação das soluções resume-se em intercalar corretamente o vetor de solução.

Uma ilustração para o emprego de métodos de decomposição de domínio na

solução de sistemas de equações lineares (SELs) é como mostrado na Figura 6.1.

Figura 6.1: Ilustração para o esquema geral de MDDs

Abordagens paralelas via decomposição de domínio baseiam-se no fato de

que cada processador pode fazer grande parte do trabalho de forma independente (Saad, 1994).

E, uma vez que os subdomínios podem ser tratados independentemente, tais métodos são

atrativos para ambientes de memória distribuída.

De fato, alguns dos principais atrativos para o uso de MDDs são: a

necessidade de pouca comunicação, a qual, em geral, fica restrita às fronteiras dos subdomínios;

a versatilidade para trabalhar com distintos modelos matemáticos que são definidos em

diferentes subregiões do domínio global; e o fato de que podem ser utilizados para a construção

de pré-condicionadores para métodos iterativos (Smith, Bjorstad e Gropp, 1996).

Os MDDs podem ser divididos em duas classes: os métodos de Schwarz,

onde os subdomínios apresentam uma região de sobreposição, que pode variar de acordo com o

tipo de aproximação empregada para resolver os modelos matemáticos já discretizados, e

métodos de Schur, onde os subdomínios não apresentam região de sobreposição.

56

6.1 Métodos de Schwarz

O uso pela primeira vez de decomposição do domínio como método de

solução foi aquele proposto por Hermann Amandus Schwarz em 1869. Schwarz empregou essa

abordagem para resolver analiticamente uma EDP elíptica definida em um domínio não

retangular, formado pela união de dois subdomínios regulares sobrepostos, como, por exemplo,

os domínios formados pela união de um disco e de um retângulo como mostrado na Figura 6.2.

O método desenvolvido por Schwarz foi o de obter a solução do problema

global de modo alternado em cada subdomínio, sendo que os valores calculados em um

subdomínio, em uma determinada iteração, são utilizados como condição de contorno para o

outro subdomínio na iteração seguinte. Este algoritmo é conhecido na literatura como MDD

Alternado de Schwarz (Flemish, 2001).

Em 1936 Sobolov propõe uma formulação matemática abstrata para o

método original de Schwarz colocando-o em rigorosas bases matemáticas. Com essa nova

formulação matemática, o método original de Schwarz, passou a ser conhecido na literatura

técnica como MDD multiplicativo de Schwarz. Posteriormente, Dryja e Widlund (Dryja, 1987)

ao analisarem as características matemáticas do MDD multiplicativo de Schwarz,

desenvolveram um novo MDD, o Aditivo de Schwarz. Tal abordagem será abordada neste

trabalho para resolver EDPs em paralelo, dado que tem maior potencial de paralelismo (Müller,

2003).

Figura 6.2: Domínio formado pela união de um disco e um retângulo.

A notação empregada na Figura 6.2 decorre do fato que os MDDs de

Schwarz caracterizam-se pela decomposição do domínio global Ω em N subdomínios

sobrepostos iΩ , tal que ii 1,s

Ω Ω=

=∪ com i jΩ Ω ≠∩ ∅ . As fronteiras artificiais são denotadas

por iΓ , e ∂Ω denota a fronteiras reais de Ω . A fronteira artificial iΓ é parte de iΩ que é

interior do domínio Ω , e \∂Ω Γ i são os pontos de ∂Ω que não estão em iΓ .

57

6.1.1 MDD Aditivo de Schwarz

No MDD Aditivo de Schwarz os subdomínios utilizam condições de

contorno do tipo Dirichlet (Rizzi, 2002), que são obtidas através do conhecimento dos valores

das células adjacentes aos subdomínios vizinhos na iteração anterior. Assim, os subdomínios,

durante uma iteração, podem ser resolvidos independentemente. O método Aditivo de Schwarz

pode ser escrito, na forma discreta, como:

1

,

, \

,

ni i i i

ni i

n ni

Lu f u

u g u

u g u−

= ∈Ω = ∈∂Ω Γ = ∈Γ (6.1)

onde em (6.1), ,ni i i iL u f u= ∈Ω representa a solução no interior de Ω ; , \n

i iu g u= ∈ ∂Ω Γ

representa a solução na fronteira real de Ω ; e 1n niu g −= solução na fronteira artificial Γ de Ω .

Note-se que para resolver (6.1) no nível de tempo n é necessário o

conhecimento dos valores das células de contorno no nível de tempo anterior (n-1), como pode

ser visto em 1n niu g −= . Assim, para resolver o problema em paralelo em arquiteturas de

memória distribuída deve-se trocar informações entre os subdomínios. A forma de como é feita

a troca dessas informações, que são chamadas de condições de contorno (CC), entre as

fronteiras artificiais geradas pelo particionamento determinam o particular MDD.

Na versão aditiva, utilizada neste trabalho, todos os subdomínios usam a

solução da última iteração em cada subdomínio como CC para os subdomínios adjacentes, de

modo que cada um deles pode ser resolvido independentemente, ficando as comunicações

restritas às fronteiras. Além disso, supondo que Ωi∩Ωj∩Ωk≠∅, ∀i≠j≠k, pode-se mostrar que o

algoritmo converge, e a presença de regiões sobrepostas assegura a continuidade da solução e de

suas derivadas (Debreu, 1998).

O nível de sobreposição mínima requerida depende do particular método

usado para aproximar as EDPs, e o uso do MDD Aditivo de Schwarz requer troca de

informações a cada iteração do método de Schwarz (ciclo de Schwarz), a fim de estabelecer CC

homogêneas. Como as matrizes locais são simétricas definidas positivas (SDP) empregou-se

como resolvedor local o GC seqüencial, de modo que a cada ciclo do método de Schwarz

trocam-se as CCs até que seja satisfeito um determinado critério de convergência global. Essas

questões serão melhores discutidas na seção 6.1.2. Na Figura 6.3 é mostra-se um exemplo de

como são feitas as trocas de dados entre os subdomínios.

58

Figura 6.3: Esquema de troca de dados entre as fronteiras

Este esquema de troca de dados permite que um sistema de equações

Ax b= possa ser escrito como extAx b b= + , onde extb denota a contribuição dada pelos

subdomínios vizinhos.

Pode-se notar na Figura 6.3 a presença de uma região diferenciada (em azul),

esta área é chamada de região de sobreposição, que é a área sobreposta entre dois domínios.

Observa-se que esta área é numerada após as demais células.

6.1.2 Implementação do MDD Aditivo de Schwarz

Para que possa ser resolvido em paralelo o domínio computacional deve ser

particionado, conforme discutido no capítulo 4. O particionamento de domínios e o processo de

geração dos arquivos de dados referente a cada subdomínio são feitos pelo modelo HIDRA.

Uma vez que os sistemas de equações gerados são de grande porte e

esparsos, pode-se economizar um espaço significativo de memória se forem armazenados

apenas os termos diferentes de zero. Desse modo, os arquivos de entrada para cada subdomínio

utilizam-se do formato CSR (Compressed Sparse Row) (Saad, 1996). O formato CSR armazena

apenas os elementos não nulos de uma matriz esparsa e sua estrutura é baseada em quatro

vetores, como pode ser visto no exemplo ilustrado pela Figura 6.4 onde dois vetores são de

ponto flutuante e dois vetores são de inteiro, de modo que:

59 4800

0520

0193

00110

Figura 6.4: Exemplo de matriz armazenada no formato CSR

1. diag: armazena os valores da diagonal principal da matriz;

2. elems: armazena os demais valores da matriz;

3. cols: armazena a coluna da qual os valores contidos em “elems” foram

obtidos na matriz;

4. ptrs: armazena os ponteiros que indicam quantos valores não nulos cada

linha possui. A primeira posição desse vetor recebe “0”, a segunda posição

recebe o valor da posição anterior somado com o número de elementos não

nulos da primeira linha do vetor (exceto os elementos da diagonal) e assim

sucessivamente.

O formato CSR não considera qualquer informação sobre a estrutura da

matriz, armazenando os elementos não nulos em posições contíguas na memória. Com a

utilização deste formato de armazenamento ao invés de se armazenar N2 elementos, são

necessários apenas n+N+1 posições (onde N é a dimensão da matriz e n é o número de

elementos não nulos). Note-se, porém, que o formato CSR não é computacionalmente eficiente

para matrizes de dimensões pequenas, pois necessita de endereçamento indireto para quaisquer

operações.

O arquivo de dados possui ainda os vetores x e b e algumas estruturas

auxiliares necessárias para a comunicação entre subdomínios vizinhos. Estas estruturas

consistem da identificação dos subdomínios vizinhos, sendo que para cada vizinho são

armazenadas duas listas. A primeira armazena as posições do vetor das incógnitas x a serem

enviadas. A segunda armazena as posições em que serão recebidos os valores enviados pelos

subdomínios vizinhos. Uma vez lidos, os dados dos arquivos de entrada são armazenados em

memória através de vetores alocados dinamicamente. Na seqüência, cada processo calcula

independentemente a solução do sistema de equações referente ao seu subdomínio, conforme o

algoritmo da Figura 6.5.

diag 10 9 5 4elems 1 3 1 2 8cols 1 0 2 1 2ptrs 0 1 3 4 5

60

Figura 6.5: Algoritmo do MDD Aditivo de Schwarz

Faz-se a seguir um exemplo para ilustrar os detalhes para uma

implementação efetiva do MDD Aditivo em paralelo. Na Figura 6.6 o domínio D1 é

particionado em dois subdomínios S1 e S2. Neste trabalho esta etapa é feita no modelo HIDRA,

que emprega o pacote de particionamento de grafos como METIS, conforme visto no capítulo 4.

Figura 6.6: Particionamento de domínio

Como no MDD Aditivo de Schwarz é necessário criar uma região de

sobreposição entre os subdomínios, gera-se esta sobreposição de uma célula para cada

subdomínio, representado por O1 e O2, como pode ser visto na Figura 6.7. A região O1

corresponde à região de sobreposição de S1 em S2 e a região O2 é a região de sobreposição de S2

em S1.

Figura 6.7: Domínio particionado com sobreposição

Inicialização: escolha uma solução inicial 0( )

iu em cada subdomínio iΩ ;

Resolva o sistema com a solução inicial 0( )

iu ;

k=1;faça

enviar dados das fronteiras da iteração 1−(k )

iu para os vizinhos;

receber dados das fronteiras da iteração 1−(k )

iu dos vizinhos;

resolver via GC o sistema utilizando os novos valores da fronteirarecebidos;

obter (k )

iu ;

k++;até que ( )1 2 2−− ≤(k) (k ) (k)

i i imax u u u ε ,onde ε é a acurácia desejada.

61

Uma vez particionado o domínio computacional, e com suas regiões de

sobreposição já criadas, as EDPs são discretizadas via métodos de discretização e de

aproximação. O resultado desse procedimento pode ser representado por um estêncil

computacional, como visto na seção 5.1. Nesta representação utilizou-se como estêncil o valor 4

para a célula central e –1 para as demais.

Nas Figuras 6.8 e 6.9 são mostrados a matriz gerada pela discretização do

domínio S1 e o arquivo de entrada gerado a partir dela, respectivamente. Note que no arquivo de

entrada a matriz está armazenada em formato CSR e que já estão inclusos os dados adicionais

necessários para a comunicação entre os subdomínios vizinhos.

4 -1 0 -1 0 0 0 0 0-1 4 -1 0 -1 0 0 0 00 -1 4 0 0 -1 0 0 0-1 0 0 4 -1 0 -1 0 00 -1 0 -1 4 -1 0 -1 00 0 -1 0 -1 4 0 0 -10 0 0 -1 0 0 4 -1 00 0 0 0 -1 0 -1 4 -10 0 0 0 0 -1 0 -1 4

Figura 6.8: Matriz gerada a partir do subdomínio S1 da Figura 6.7

Figura 6.9: Arquivo de entrada da matriz ilustrada na Figura 6.8

Domínio S1Ordem9Número de Elementos24Ponteiros0 2 5 7 10 14 17 19 22 24Colunas1 3 0 2 4 1 5 0 4 6 1 3 5 7 2 4 8 3 7 4 6 8 5 7Diagonal4 4 4 4 4 4 4 4 4Valores-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 –1Qtde Vizinhos1ID do Vizinho2Índices a enviar2 5 8Índices a receber3 6 9Vetor X0 0 0 0 0 0 0 0 0Vetor B1 1 1 1 1 1 1 1 1

62

Após a geração do arquivo, cada processo carrega o arquivo pelo qual é

responsável e calcula a solução utilizando o algoritmo mostrado na Figura 6.4.

6.2 Métodos do Complemento de Schur

Métodos de Schur são empregados em computação científica paralela para o

desenvolvimento de soluções para aplicações nas quais a malha numérica é não estruturada, ou

não ocorre o emparelhamento das submalhas entre os diversos subdomínios, ou ainda, quando

os diferentes subdomínios possuem diferentes modelos matemáticos (Martinotto, 2003).

Os métodos de Schur foram desenvolvidos na década de 70. Nestes MDDs o

domínio Ω é particionado em subdomínios sem sobreposição, da forma que:

ii 1,s

Ω Ω=

=∪ com i jΩ Ω = ∅∩A continuidade da solução entre os subdomínios é garantida através da

solução de um sistema de interface (sistema correspondente às células pertencentes às fronteiras

artificias criadas pelo particionamento). O sistema de interface é conhecido na literatura como

complemento de Schur (Smith, 1996).

Existem diversas variantes do Método do Complemento de Schur, cada uma

diferencia-se de outra pela forma de particionamento. Neste trabalho será utilizada o

particionamento feito através de cortes nos nodos fronteiras (Saad, 1996). Neste tipo de

particionamento células locais de todos os domínios são numeradas primeiro. Em seguida todas

as células de fronteira são numeradas, conforme pode ser visto na Figura 6.10.

Figura 6.10: Esquema de numeração do Método do Complemento de Schur

Com este esquema de numeração, o domínio da Figura 6.10 gera uma matrizmostrada na Figura 6.11.

63

Figura 6.11: Matriz gerada a partir do domínio da Figura 6.10

Para explicar as notações introduzidas na Figura 6.11, considere um sistema

de equações escrito na forma matricial como Ax b= , onde A é a matriz dos coeficientes, x é

o vetor das incógnitas e b o vetor dos termos independentes. Um modo de escrever a matriz A

é como:

i ii

i i

B FA

E C

=

onde iB é uma matriz associada às células internas do subdomínio, iE e iF representam as

interações das células internas com as células da fronteira e iC representa as interações entre as

células de fronteira.

De modo análogo, o vetor das incógnitas x também pode ser particionado

em duas partes:

ii

i

xx

y

=

onde ix representa as incógnitas referentes ao interior do subdomínio e iy representa as

incógnitas das fronteiras. E, da mesma forma, o vetor dos termos independentes b pode ser

particionado como:

ii

i

fb

g

=

64

Com isso, as equações locais podem ser escritas, para 1,..,i n= processos,

como:

i i i i i

i i i i i

B x F y f

E x C y g

+ = + =Isolando-se o termo ix na primeira equação do sistema acima obtém-se:

1( )i i i i ix B f F y−= − (6.2)

Através da substituição da variável ix na segunda equação obtém-se

1 1 1

1 1

( ( ))i i i i i i i i i i i i i i i i i i

i i i i i i i i i i

E B f F y C y g E B f E B F y C y g

C y E B F y g E B f

− − −

− −

− + = ⇒ − + =⇒ − = −

Fazendo 1i i i i iS C E B F−= − , onde essa matriz iS é conhecida na literatura

como complemento de Schur, tem-se que o sistema acima pode ser escrito na forma compacta

como:

1i i i i i iS y g E B f−= − (6.3)

Resolvendo (6.3) encontra-se o valor das incógnitas do vetor iy , que são as

incógnitas das regiões de fronteira. Desse modo substituindo iy pelos valores encontrados em

(6.2) pode-se encontrar os valores de ix em (6.1), que são os valores das incógnitas referentes à

parte interna dos subdomínios.

Note-se, porém, que para a construção da matriz de complemento de Schur

e, também para o cálculo do lado direito da equação (6.3) é necessário o cálculo de inversas

locais de matrizes. Essa necessidade é o principal obstáculo do método do complemento de

Schur, pois se efetivado acabaria destruindo a esparsidade das submatrizes, além de que têm um

alto custo computacional (Charão, 2003).

Para contornar o problema da inversão das matrizes locais iB , serão

utilizadas métodos para obter apenas aproximações para 1iB− , onde tais métodos possuem custo

computacional reduzido (Rizzi, 2002). Note-se, porém, que decorre dessa abordagem que a

acurácia numérica não é suficientemente boa para simulações computacionais que requerem alta

qualidade numérica. No entanto, neste trabalho a opção foi privilegiar o desempenho

computacional às custas da qualidade numérica. Em trabalho futuro outras aproximações

(Cholesky incompleto, etc.) pode ser empregadas para se obter soluções mais acuradas.

O métodos empregados neste trabalho baseiam-se na série de Neumann para

obter uma aproximação 1iM − para 1

iB− . Truncando-se a série com 1k = , tem-se:

1 1 1 1( )TM D D L L D− − − −= − +

65

onde, 1D− é a inversa da diagonal principal, L é a parte inferior à diagonal principal e TL é

denota a transposta de L . Neste caso o método é chamado de polinomial.

Se a série é truncada com 0=k , o método é chamado de diagonal (ou

Jacobi), e é dado por:

1 1M D− −=O método diagonal apresenta um menor custo computacional que o

polinomial, no entanto sua aproximação possui pior qualidade numérica.

6.2.1 Implementação do Método do Complemento de Schur

Levando em consideração o esquema de numeração mostrado no início da

seção 6.2, e consequentemente o formato das matrizes e sua divisão em blocos, optou-se por

armazenar as submatrizes iB , iE e iF em estruturas CSR distintas e a submatriz iC no

formato diagonal, onde cada diagonal é armazenada em um vetor, já que a mesma possui a

característica de ser sempre uma matriz tridiagonal. Os subvetores ix , iy , if e ig também são

armazenados em estruturas separadas. Dessa forma cada processo receberá um arquivo

contendo os seus respectivos iB , iE e iF , ix e if . A matriz iC e os vetores iy e ig são

carregadas apenas pelo processo 0.

É importante salientar que os domínios para o Método do Complemento de

Schur não serão gerados pelo modelo HIDRA como no MDD Aditivo, já que uma inclusão do

MDD de Schur no modelo HIDRA acarretaria a necessidade de desenvolver um algoritmo

paralelo mais geral, que extrapolaria o objetivo deste trabalho. Desse modo, os domínios e o

respectivos sistemas de equações são gerados pelo software GERATRIZ, desenvolvido pelo

GMCPAR (Perlin, 2003).

Uma vez divididos as submatrizes e subvetores entre os i processadores

disponíveis, o primeiro passo é calcular o lado direito da equação (6.3) fazendo

1i i i id g E B f−= − . Primeiramente cada processador encontra seu 1

iB− através do método

diagonal ou polinomial, e na seqüência calcula-se 1i i iE B f− . A subtração é feita centralizada no

processador 0, após uma comunicação para informar os valores encontrados da operação

1i i iE B f− .

Agora, com o valor de d calculado pode-se calcular o complemento de

Schur. O cálculo do complemento de Schur é feito utilizando o método do gradiente conjugado

(GC) já que a matriz do complemento de Schur é SDP. A matriz complemento de Schur é

66

calculada no passo q Ad= do método GC, onde a matriz A corresponde ao complemento de

Schur iS , e d é o valor calculado anteriormente. Sendo 1i i i i iS C E B F−= − , tem-se que

1i i i iq C d E B Fd−= − , que é calculado de forma análoga a d , sendo que iC d é calculado no

processo 0 e os termos 1i i iE B Fd− são calculados em seus respectivos processos. Como saída do

algoritmo do GC tem-se iy .

Conhecendo-se o valor de iy pode-se retornar ao sistema (6.2), de modo que

por substituição encontra-se os valores dos elementos ix , que são a solução desejada do

sistema. Fazendo-se:

1( )i i i i ix B f F y−= −

e tomando i i i iw f F y= − , tem-se:

iii wxB =

o qual é um sistema de equações, e pode ser também resolvido localmente por um GC

seqüencial.

Este procedimento é repetido até que se alcance a precisão desejada (ε ), da

mesma forma feita no MDD Aditivo de Schwarz.

6.2.1.1 Exemplo de resolução do Método do Complemento de Schur

Dado o domínio apresentado na Figura 6.10 e a respectiva matriz resultante

na Figura 6.11, o primeiro passo para a solução é distribuir os arquivos de entrada para os

respectivos processos, conforme descrito na seção 6.2.1.

Após a distribuição dos dados deve-se calcular 1i i i id g E B f−= − , mais

especificamente para este exemplo com apenas dois subdomínios deve-se calcular

1 10 0 0 1 1 1id g E B f E B f− −= − − . Os processo 0 e 1 devem calcular inicialmente o valor de 1

iB−

através do método diagonal ou polinomial. O valor de 1iB− será utilizado para o cálculo de

1i i iE B f− .

Uma vez 10B− e 1

0 0 0E B f− calculados pelo processo 0 e 11B− e

11 1 1E B f− calculados pelo processo 1, o processo 1 deve enviar o resultado de 1

1 1 1E B f− para o

processo 0, para que possa ser calculado o valor de d , conforme mostrado na Figura 6.12.

67

Processo 0 Processo 1

Cálculo de

Cálculo de 11B-

11 1 1E B f-1

0 0 0E B f-Cálculo de

10B-Cálculo de

1 10 0 0 1 1 1id g E B f E B f- -= - -Cálculo de

Figura 6.12: Cálculo de d no Método do Complemento de Schur

Na seqüência é necessário o emprego do método do GC para encontrar o

valor de iy . Para isso ao invés de se utilizar Ax b= , utiliza-se Sy f= . Desse modo, no passo

q Ad= do método do GC, tem-se que 1i i i i iA S C E B F−= = − e d é o valor calculado

anteriormente.

Assim, pode-se obter o valor de q , calculando-se

1 10 0 0 1 1 1iq C d E B F d E B F d− −= − − . Os cálculos de q , iC d e 1

0 0 0E B F d− são efetuados no

processo 0 e 11 1 1E B F d− é calculado no processo 1. A subtração dos termos também é feita no

processo 0. O cálculo de q é ilustrado na Figura 6.13.

Cálculo de

Processo 0 Processo 1

iC d

Cálculo de 10 0 0E B F d-

1 10 0 0 1 1 1iq C d E B F d E B F d- -= - -Cálculo de

Cálculo de 1

1 1 1E B F d-

Figura 6.13: Cálculo de q no Método do Complemento de Schur

É importante salientar que este processo do cálculo de q é necessário para

cada iteração do método do GC, ou seja, deverá ser calculado várias vezes. Os demais passos do

GC são calculados no processo 0 e são idênticos ao apresentado na seção 5.2.1.1.

Finalizado o cálculo do GC, como resultado obtém-se o vetor iy , que será

utilizado para o cálculo de ix , ou seja, a solução final do sistema de equações. E, para que se

calcule ix , o processo 0 envia o vetor iy para os demais processos. Estes por sua vez devem

calcular i i iB x w= através de um GC local, onde i i i iw f F y= − , como mostrado na Figura 6.14.

68

Processo 0 Processo 1

Cálculo de Envia

Cálculo de 0 0 0 iw f F y= -iy

1 1 1 iw f F y= -

0 0 0B x w=Cálculo via GC de Cálculo via GC de 1 1 1B x w=

Solução final encontrada Solução final encontrada

Figura 6.14: Cálculo de x no Método do Complemento de Schur

6.3 Conclusão

Este capítulo apresentou uma visão geral dos métodos de decomposição de

domínios. A ênfase foi dada aos métodos implementados neste trabalho: o método Aditivo de

Schwarz e o Método do Complemento de Schur. Para cada método apresentou-se a idéia geral

do método, seu funcionamento e questões relativas à implementação, como estruturas de dados,

estratégias de comunicação, distribuição de processamento, entre outros.

Esta seção foi escrita de maneira didática, contendo alguns exemplos e

ilustrações, para que sirva como material de apoio para os integrantes do GMCPAR.

69

7. METODOLOGIA DE DESENVOLVIMENTO

Esta seção tem o objetivo de mostrar a metodologia empregada durante o

desenvolvimento das implementações contidas neste trabalho. No Apêndice A, encontram-se os

endereços de todas as ferramentas utilizadas.

Todas as implementações foram desenvolvidas em linguagem C, sobre o

sistema operacional Mandrake GNU/Linux 8.1.

7.1 Metodologia de Desenvolvimento

Foram implementadas 3 versões para o MDD Aditivo de Schwarz:

1. MDD Aditivo com MPI;

2. MDD Aditivo com MPI e threads;

3. MDD Aditivo com MPI e BLAS.

Para a primeira implementação foi necessário instalar a biblioteca de troca

de mensagens MPICH 1.2.5. A sua instalação é simples, bastando seguir os passos contidos no

arquivo README que vem junto ao pacote.

O próximo passo foi implementar o MDD Aditivo de Schwarz, como

descrito na seção 6.1.2. Para compilar utiliza-se a linha de comando:

mpicc –o aditivo aditivo.c –lm

O comando segue a mesma sintaxe do compilador gcc. É importante

salientar a necessidade de incluir a biblioteca math.h (-lm).

Para a execução de um programa que utiliza MPICH, usa-se a linha de

comando:

mpirun –np 2 aditivo

onde mpirun é a instrução para a execução do programa, e -np <num_procs> é o parâmetro que

informa a quantidade de processos a ser utilizada.

Para adicionar threads à aplicação, utilizou-se OpenMP. Como os

compiladores padrão do Linux não suportam suas diretivas, foi necessário instalar um

compilador especial. Após pesquisa efetuada para descobrir compiladores disponíveis optou-se

pelo Omni 1.4a, por ser de distribuição gratuita.

A instalação do compilador Omni também é muito simples, seguindo os

passos descritos em seu arquivo README, no entanto este compilador necessita de um

compilador Java instalado, e com seu classpath configurado corretamente.

Para compilar as aplicações utilizando OpenMP, utiliza-se a linha de

comando:

70

mpicc –cc=omcc –o aditivo aditivo_opmp.c –lm

onde o parâmetro –cc=omcc define a utilização do compilador Omni. Para a execução das

aplicações com OpenMP, o processo é o mesmo das aplicações sem OpenMP.

Para a terceira implementação, foi necessário a instalação da biblioteca

BLAS. A distribuição escolhida foi a oferecida no pacote ATLAS. A sua instalação segue o

mesmo padrão anteriormente citado, no entanto a compilação da biblioteca é demorado,

podendo demorar aproximadamente 3 horas. Todo este tempo é utilizado para a otimização da

biblioteca.

Para compilar utilizando a biblioteca BLAS, utiliza-se a linha de comando:

mpicc –cc=omcc –o aditivo aditivo_blas.c –lm –cblas -latlas

Para a execução, utiliza-se o mesmo procedimento das demais.

Em relação ao processo de depuração, pode-se dizer que é a parte mais

complexa do processo, já que não existem ferramentas eficientes de depuração paralela todo

processo é feito através da impressão de mensagens na tela.

A metodologia empregada na implementação do Método do Complemento

de Schur é análoga à utilizada no MDD Aditivo de Schwarz utilizando apenas MPICH.

7.2 Metodologia dos Testes

Uma vez terminado a etapa de implementação, faz-se os testes de

desempenho e qualidade numérica dos algoritmos.

Todos os testes foram efetuados no cluster LabTec apresentado na seção

2.2.1.1.

A análise de desempenho é feita avaliando-se o tempo de execução, o

speedup e a eficiência do algoritmo.

A tomada de tempo é feita tomando-se o tempo de dez execuções,

eliminando-se o maior e menor tempo obtido, de modo a eliminar possíveis anomalias nos

tempos. O tempo considerado é a média aritmética das oito tomadas de tempos restantes.

Tendo-se os tempos de execução é possível calcular o speedup e a eficiência

de cada algoritmo.

Os resultados dos testes efetuados são encontrados no capítulo 8.

Em relação a qualidade numérica, utiliza-se o erro relativo e a norma do sup.

Mais informações e exemplo da utilização podem ser encontradas na seção 8.3.

71

8. RESULTADOS OBTIDOS

Neste capítulo são apresentados os resultados obtidos com as paralelizações

desenvolvidas.

Já para o Método do Complemento de Schur utilizou-se um domínio

quadrado de 128x128 células, que resulta em sistemas de equações com 16.384 incógnitas.

Para a solução dos sistemas locais, ou seja, em cada subdomínio, utilizou-se

o método iterativo do GC usando como critério de parada a norma do resíduo kr , tal que

0kr r≤ ε , onde 610−≃ε e 0r é o resíduo inicial. Para a solução global via MDD Aditivo

de Schwarz utilizou-se como critério de parada a norma do sup, ou seja,

( )1 1

2 2sup n n n

i i ix x x− −− ≤ ε , onde nix denota a solução na i-ésima célula do domínio no n-

ésimo passo de tempo, e ε a acurácia que foi tomada como 0,1, 0,01 e 0,001. Para os métodos

de Schur utilizou-se acurácia de 0,01. Tais acurácias foram escolhidas de modo empírico, de

modo a avaliar a influência das mesmas sobre os desempenho dos algoritmos.

A tomada de tempo foi feita tomando-se o tempo de dez execuções,

eliminando-se o maior e menor tempo obtido, de modo a eliminar possíveis anomalias nos

tempos. O tempo considerado é a média aritmética das oito tomadas de tempos restantes.

Primeiramente são mostrados os resultados da paralelização do MDD

Aditivo de Schwarz, e em seguida são mostrados resultados referentes ao Método do

Complemento de Schur. Apresenta-se ainda, uma comparação entre paralelizações do método

do GC, utilizando as abordagens de decomposição de domínio e decomposição de dados.

8.1 Método MDD Aditivo de Schwarz: Análise de Desempenho Computacional

Para a análise de desempenho do MDD Aditivo considerou-se o número de

iterações, tempo de execução, speedup e eficiência, conforme visto na seção 3.4. Os resultados

são mostrados para o MDD Aditivo com acurácia de 0,1, 0,01 e 0,001. O uso de tal acurácia é

mostrada na Figura 6.5 e é referenciada como ε .

8.1.1 Número de iterações

Na Figura 8.1 e 8.2 pode-se ver o número de iterações do MDD Aditivo com

acurácia de 0,1, 0,01 e 0,001, para domínio de 11.506 e 184.096 incógnitas, respectivamente.

72

Os experimentos mostrados nas seções 8.1.1, 8.1.2, 8.1.3, 8.1.4, 8.1.6 e 8.1.8

foram executados com até 20 processadores, por ser a quantidade de nodos disponíveis no

cluster utilizado. Utilizou-se nos testes apenas um processador de cada nodo do cluster de modo

a eliminar possíveis influências de contenção de memória. Assim, cada processo é responsável

por um subdomínio.

A quantidade de iterações necessárias para a convergência do método está

fortemente relacionada com a acurácia do método, e com a quantidade de domínios utilizados.

A quantidade de iterações é importante, pois influencia diretamente no tempo de execução do

algoritmo.

0

1

2

3

4

5

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Itera

ções

Processos

LegendaAcurácia 0,1 Acurácia 0,01 Acurácia 0,001

Figura 8.1: Número de iterações do MDD Aditivo de Schwarz: 11.506 incógnitas

Para o sistema de equações com 11.506 incógnitas utilizando acurácia de

0,1, que é uma acurácia grosseira, a qualidade numérica da solução oferecida não é boa,

oferecendo como solução apenas uma aproximação ruim, por este motivo o método converge

em apenas uma iteração para todas as quantidades de processos testadas. Já com acurácia igual a

0,01 e 0,001, a qualidade numérica é mais acurada, fazendo com que mais iterações sejam

necessárias para a convergência do método, conforme se pode observar na Figura 8.1.

73

0

1

2

3

4

5

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Itera

ções

Processos

LegendaAcurácia 0,1 Acurácia 0,01 Acurácia 0,001

Figura 8.2: Número de iterações do MDD Aditivo de Schwarz: 184.096 incógnitas

Para o sistema de equações com 184.096 incógnitas, o número de iterações

se manteve estável em uma iteração para os testes com acurácia 0,1 e em duas iterações para os

testes com acurácia 0,01. Já com acurácia 0,001 houveram alguns picos com a execução

utilizando 11, 13 e 14 processos.

8.1.2 Tempo de execução

Nas Figuras 8.3 e 8.4 são apresentados os resultados em relação ao tempo de

execução, utilizando acurácia de 0,1, 0,001 e 0,001, para sistemas de 11.506 e 184.096

incógnitas, respectivamente. O tempo de execução é dado em segundos.

Os resultados obtidos com a paralelização foram satisfatórios, apresentando

uma boa escalabilidade. Pode-se perceber a presença de picos. Estes picos são causados pelo

aumento da quantidade de iterações, como pode ser visto na seção 7.1.1.

74

0

0.005

0.01

0.015

0.02

0.025

0.03

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Tem

po d

e E

xecu

ção

Processos

LegendaAcurácia 0,1 Acurácia 0,01 Acurácia 0,001

Figura 8.3: Tempo de execução do MDD Aditivo de Schwarz: 11.506 incógnitas

0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Tem

po d

e E

xecu

ção

Processos

LegendaAcurácia 0,1 Acurácia 0,01 Acurácia 0,001

Figura 8.4: Tempo de execução do MDD Aditivo de Schwarz: 184.096 incógnitas

Na Figura 8.3 observa-se que o melhor desempenho obtido foi com a

execução utilizando 16 processos. Com quantidades de processos superiores a 16 ocorre um

pequeno aumento de tempo de execução. Este aumento é causado pelo aumento da quantidade

75

de comunicação e pela redução do processamento necessário para cada subdomínio, já que os

domínios possuem um tamanho reduzido.

Já na Figura 8.4, que a relação comunicação/processamento melhora com

sistemas de equações de maior porte, apresentando uma melhor escalabilidade, e por

conseqüência a redução do tempo de execução do algoritmo.

Em geral, pode-se observar também que se utilizando acurácia igual a 0,1 o

tempo de execução é bem inferior aos apresentados utilizando-se acurácia 0,01 e 0,001, mas sua

qualidade numérica é ruim. Entretanto os resultados obtidos entre as execuções utilizando

acurácia de 0,01 e 0,001 são muito semelhantes, sendo é mais vantajoso utilizar acurácia de

0,001, já que oferece melhor qualidade numérica.

8.1.3 Speedup do MDD Aditivo de Schwarz

Nas Figuras 8.5 e 8.6 mostra a comparação dos speedups das execuções

utilizando-se acurácia de 0,1, 0,01 e 0,001.

Na seção 3.4.2, mostra-se speedup como a razão entre o tempo de execução

do algoritmo serial mais rápido e o algoritmo paralelo utilizando p processadores. No entanto

pela indisponibilidade deste algoritmo serial mais rápido utilizou-se na tomada de tempos a

versão paralela utilizando apenas um processador.

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Spe

edup

Processos

LegendaAcurácia 0,1 Acurácia 0,01 Acurácia 0,001

Figura 8.5: Speedup do MDD Aditivo de Schwarz: 11.506 incógnitas

76

Observa-se que com o aumento do domínio computacional e

consequentemente, da granularidade do problema ocorreu um aumento nos speedups obtidos.

Observa-se ainda nos gráficos pontos de quedas signicativas nos speedups. Esses pontos são

decorrentes do aumento no número de iterações para a convergência do método.

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Spe

edup

Processos

LegendaAcurácia 0,1 Acurácia 0,01 Acurácia 0,001

Figura 8.6: Speedup do MDD Aditivo de Schwarz: 184. 096 incógnitas

8.1.4 Eficiência

Nas Figuras 8.7 e 8.8 são apresentados os gráficos de eficiência do método

Aditivo de Schwarz.

Observa-se que a eficiência diminui com o aumento dos processos. Isso se

deve a sobrecarga causada pelo aumento na quantidade de comunicações efetuadas, pois quanto

mais forem as subdivisões do domínio computacional, cada subdomínio terá uma maior

quantidade de vizinhos, exigindo mais comunicações, além de cada subdomínio ter seu tamanho

reduzido, fazendo com que o processamento efetivo diminua.

77

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

1.1

1.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Efic

iênc

ia

Processos

LegendaAcurácia 0,1 Acurácia 0,01 Acurácia 0,001

Figura 8.7: Eficiência do MDD Aditivo de Schwarz: 11.506 incógnitas

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

1.1

1.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Efic

iênc

ia

Processos

LegendaAcurácia 0,1 Acurácia 0,01 Acurácia 0,001

Figura 8.8: Eficiência do MDD Aditivo de Schwarz: 184.096 incógnitas

78

8.1.5 Comportamento do MDD Aditivo de Schwarz

Na Figura 8.9, ilustra-se a execução do MDD Aditivo de Schwarz com 8

processos para sistemas com 11.506 e 184.096 incógnitas respectivamente.

Para a geração da figura utilizou-se a biblioteca MPE (MultiProcessing

Environment) disponível com a distribuição MPICH. Essa contém rotinas que permitem a

geração de arquivos de registro, que descrevem as etapas de execução de um programa MPI

(Chan; Gropp; Lusk, 2003). Para a visualização dos arquivos de registro utilizou-se a ferramenta

Jumpshot-4 (Chan et al., 2003).

Nas figuras, as áreas cinzentas representam o processamento, as vermelhas

representam operações de envio de mensagens, as azuis representam operações de recebimento

de mensagens e as verdes representam operações de redução. A operação de redução é utilizada

no cálculo do critério de convergência do método.

(a) (b)(a) (b)

Legendaprocessamento envio recebimento redução

Figura 8.9: Execução do MDD Aditivo de Schwarz(a) sistema com 11.506 incógnitas (b) sistemas com 184.096 incógnitas

A partir da figura pode-se determinar a quantidade de processamento

efetuado por cada processo e também o tempo necessário para as comunicações. Note que em

(b) a proporção do tempo gasto com comunicação é muito menor que em (a). Isso justifica o

melhor desempenho obtido com as execuções utilizando como entrada o sistema com 184.096

incógnitas.

8.1.6 MDD Aditivo de Schwarz: BLAS

Nas Figuras 8.10 e 8.11 pode-se observar os resultados referentes ao tempo

de execução e speedup da implementação utilizando BLAS comparada aos resultados obtidos

79

com a implementação sem o uso da biblioteca. Para a comparação utilizou-se o sistema de

equações com 184.096 incógnitas e acurácia de 0,001.

0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Tem

po d

e E

xecu

ção

Processos

LegendaCom BLAS Sem BLAS

Figura 8.10: Tempos de execução: implementações com e sem BLAS

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Spe

edup

Processos

LegendaCom BLAS Sem BLAS

Figura 8.11: Speedup: implementações com e sem BLAS

80

Segundo (Dongarra, 2000), o uso do nível 1 da biblioteca BLAS, que é o

empregado na implementação deste trabalho, oferece no máximo 15% de ganho de

desempenho. Nos testes efetuados, foram obtidos, em média, ganhos de aproximadamente 10%,

ficando dentro das expectativas.

Melhores resultados poderiam ser obtidos se utilizados os níveis 2 e 3 da

biblioteca, no entanto o seu uso não é possível em matrizes esparsas, como as empregadas neste

trabalho.

8.1.7 MDD Aditivo de Schwarz: processos versus threads

A Figura 8.12 apresenta um comparativo entre as duas estratégias usadas na

exploração do paralelismo em clusters multiprocessados: o uso apenas de múltiplos processos

em um processador e o uso de múltiplos threads em um processador. Para estes testes ambas

estratégias utilizam os dois processadores das máquinas duais, portanto afetadas pelo problema

de contenção de memória.

Na execução destes testes foram utilizados até 10 nodos do cluster. Utilizou

as implementações com acurácia 0,001 e como entrada o sistema de 184.096 incógnitas.

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

1 2 3 4 5 6 7 8 9 10

Tem

po d

e E

xecu

ção

(seg

s)

Nodos

LegendaProcessos Threads

Figura 8.12: Processos versus Threads no MDD Aditivo de Schwarz

Tem

po d

e E

xecu

ção

81

A Figura 8.12 mostra que a implementação que utiliza múltiplos threads

apresenta um desempenho melhor a que usa múltiplos processos. O pico observado quando se

utiliza sete nodos, deve-se ao aumento do número de iterações necessárias para a convergência

do método utilizando-se 14 processos, como pode ser visto na Figura 8.2.

Na estratégia de múltiplos processos o particionamento do domínio é feito de

acordo com o número de processadores disponíveis e a exploração do paralelismo intranodal

através da alocação de um processo para cada processador do nodo. Já na abordagem que usa

múltiplos threads o particionamento é feito de acordo com o número de nodos e a exploração do

paralelismo intranodal é obtida através da alocação de um thread para cada processador. Neste

trabalho, especificamente, utilizou-se dois processos e dois threads para cada nodo, já que cada

nodo é biprocessado.

Deste modo, na estratégia que usa apenas múltiplos processos, o número de

subdomínios é o dobro daquele número da estratégia que usa múltiplos threads. O aumento no

número de subdomínios afeta a convergência do método, provoca uma maior redundância de

cálculo (regiões de sobreposição) e um maior volume de comunicação. Isso justifica o melhor

desempenho obtido pela implementação que utiliza múltiplos threads, já que a mesma possui

uma quantidade reduzida de comunicação e menos redundância de cálculos.

Um outro fator a ser observado nestes testes é a contenção de memória. Ao

utilizar 2 processos em um nodo, deverá ser alocado dois subdomínios para o mesmo, ou seja,

uma maior quantidade de dados. Como pode-se notar existe o aumento no tempo de execução

do algoritmo, decorrente da competição entre os processadores por recursos de hardware

compartilhados, tais como barramento e memória principal. Coma disputa entre os

processadores a latência média de acesso a memória tende a ser maior. Desta forma, o

processador fica ocioso por uma número maior de ciclos (Martinotto, 2004).

8.1.8 MDD Aditivo de Schwarz versus decomposição de dados

Nessa seção é feito um estudo comparativo entre as abordagens de

decomposição de domínio e decomposição de dados. Mais especificamente são comparados os

tempos de execuções do MDD Aditivo de Schwarz, desenvolvido neste trabalho, e da

implementação o do método do GC paralelo desenvolvida em (Picinin, 2003).

Nos resultados obtidos, mostrados na Figura 8.15, o GC Paralelo apresentou

tempo de execução inferior ao MDD Aditivo. No entanto pode-se observar que a medida que a

quantidade de processos aumenta a diferença entre os tempos diminui. Isso ocorre porque o

82

MDD Aditivo utiliza-se, em grande parte, de dados locais necessitando de pouca comunicação.

Já o GC Paralelo exige um número elevado de operações que necessitam de trocas de dados.

0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Tem

po d

e E

xecu

ção

Processos

LegendaAditivo GC Paralelo

Figura 8.13: Decomposição de Domínios versus Decomposição de Dados: Tempo de Execução

Nas figuras, as áreas cinzentas representam o processamento, as vermelhas

representam operações de envio de mensagens, as azuis representam operações de recebimento

de mensagens e as verdes representam operações de redução.

Assim, devido a necessidade de um menor volume de comunicação, pode-se

concluir que o MDD Aditivo apresenta uma maior escalabilidade. Esta maior escalabilidade

poderia ser comprovada se os testes fossem executados em um número superior aos testados, o

que não é possível pela limitação do hardware utilizado. A quantidade de comunicação

necessária no MDD Aditivo e no GC paralelo é mostrada na Figura 8.16 (a) e (b),

respectivamente.

83

(a) (b)

Legendaprocessamento envio recebimento redução

Figura 8.14: Execução do MDD Aditivo (a) Execução do GC Paralelo (b)

8.2 MDD do Complemento de Schur: Análise de Desempenho Computacional

Para a análise de desempenho do Método do Complemento de Schur

considerou-se o número de iterações, tempo de execução, speedup e eficiência.

A Figura 8.16 mostra os resultados relativos ao tempo de execução do

método. Os testes mostraram um ganho razoável de desempenho. Melhores resultados não

puderam ser obtidos porque algumas operações foram centralizadas apenas em um nodo.

0.005

0.01

0.015

0.02

0.025

0.03

0.035

0.04

2 4 6 8 10 12 14 16

Tem

po d

e E

xecu

ção

(seg

s)

Processos

Figura 8.15: Tempo de Execução do Método do Complemento Schur

Tem

po d

e E

xecu

ção

84

1

1.5

2

2.5

3

3.5

4

4.5

5

2 4 6 8 10 12 14 16

Spe

edup

Processos

Figura 8.16: Speedup do Método do Complemento de Schur

Na Figura 8.16 encontra-se o resultado obtido em relação ao speedup do

Método do Complemento de Schur.

0

0.2

0.4

0.6

0.8

1

1.2

2 4 6 8 10 12 14 16

Efic

iênc

ia

Processos

Figura 8.17: Eficiência

Na Figura 8.17, mostra-se a eficiência do Método do Complemento de

Schur. Note que a eficiência cai conforme o número de processos aumenta. Isso se deve ao fato

da má distribuição das operações entre os processos, conforme mostrado na seção 6.2.1.

85

Outro fator a ser observado, que com o aumento do número de domínios, o

tamanho do sistema de interface a ser resolvido cresce, aumentando o custo computacional da

operação, o que reduz o seu desempenho.

Mais testes não puderam ser feitos devido ao fato da ferramenta GERATRIZ

ainda não estar plenamente desenvolvida, não podendo gerar mais casos de teste que os

apresentados. Testes mais efetivos poderiam ser efetuados se pudessem ser gerados domínios de

maior tamanho, e se este pudesse ser particionado em quantos domínios fossem necessários.

8.3 Análise da Qualidade Numérica

A análise da qualidade numérica do MDD Aditivo de Schwarz foi feita

utilizando o erro relativo * *eR i i iE ϕ ϕ ϕ= − , conforme descrito na seção 5.3, e uma adaptação

da norma do sup ( )* *

2 2sup( ) sup

defe

i i iE ϕ ϕ ϕ≡ − .

A forma de utilização das fórmulas utilizadas pode ser visto no exemplo,

como segue.

Dado os vetores contendo a solução exata (Se), solução aproximada

monoprocessada (Sm) e solução aproximada biprocessada (Sb), respectivamente:

Se = 5.0000 5.0000 8.0000 5.0000 5.0000

Sm = 4.9998 5.0001 8.0010 4.9997 5.0001

Sb = 4.9987 5.0005 8.0012 4.9989 5.0002

Utilizando o erro relativo, primeiramente compara-se a solução exata com a

solução aproximada monoprocessada, tomando-se *i eSϕ = e e

i mSϕ = , como resultado obtém-

se o vetor

E = 0.00004 0.00002 0.000125 0.00006 0.00002

Para se determinar o erro relativo toma-se o maior valor do vetor resultante,

logo o erro entre a solução exata e a solução monoprocessada é 0,00006RE = .

Para encontrar o erro relativo entre a solução monoprocessada e a

biprocessada repete-se o procedimento tomando-se *i mSϕ = e e

i bSϕ = .

86

Já para a determinação do erro utilizando a norma do sup, mais uma vez

toma-se *i eSϕ = e e

i mSϕ = , e aplicando-se a norma temos que 0,00008E = . Repete-se o

procedimento com *i mSϕ = e e

i bSϕ = para determinar o erro entre a solução monoprocessada

e biprocessada.

Os testes da qualidade numérica do MDD Aditivo de Schwarz foram feitos

de forma análoga ao exemplo. Os resultados podem ser vistos na Figura 8.17. Para os testes foi

utilizado um domínio 30x30 células, o que resulta em um sistema de equações com 900

incógnitas.

Erro Relativo Norma sup

Solução monoprocessada 0.000000196 0,000000114

Solução biprocessada 0.00652 0.00166

Figura 8.18: Erros do MDD Aditivo de Schwarz

Tanto nos testes utilizando erro relativo quanto utilizando a norma do sup, a

solução monoprocessada apresentou erro na sétima casa decimal, e a solução biprocessada erro

na terceira casa decimal.

Embora os resultados apresentados sejam satisfatórios, testes mais efetivos

não puderam ser feitos devido ao fato dos testes simularem apenas um passo de tempo do

modelo HIDRA. Melhores resultados quanto a acurácia do MDD Aditivo poderia ser obtidos se

o mesmo fosse acoplado ao modelo, podendo simular inúmeros passos de tempo do modelo.

O Método do Complemento de Schur apresentou erros a partir da segunda

casa decimal nas soluções monoprocessada e biprocessada. Esta baixa qualidade numérica se

deve aos algoritmos inversão de matrizes empregados que geram apenas aproximações

grosseiras para tais inversas.

8.4 Conclusão

Apresentou-se neste capítulo a avaliação dos resultados obtidos com as

implementações desenvolvidas neste trabalho.

Pode-se observar que o MDD Aditivo de Schwarz apresentou bons

resultados em relação e desempenho e qualidade numérica, mostrando-se uma boa alternativa

para este fim. Além disso se mostrou mais escalável que os métodos de decomposição de dados,

devido a sua menor quantidade de comunicação.

87

Nos testes de comparação entre múltiplos processos e múltiplos threads, a

abordagem de múltiplos threads apresentou um melhor desempenho. Este melhor desempenho

se deve principalmente às diferenças existentes no particionamento computacional, mais

favorável a esta abordagem.

Mostrou-se também que o uso da biblioteca BLAS pode apresentar

resultados satisfatórios, mesmo utilizando apenas seu nível 1.

Em relação ao método de Schur, pode-se observar que o mesmo apresentou

um desempenho computacional razoável, e uma baixa qualidade numérica. O desempenho

computacional ficou comprometido pela má distribuição das operações entre os processos.

88

9. CONCLUSÕES

O desenvolvimento de aplicações paralelas é hoje uma abordagem

indispensável em áreas que requerem grande capacidade de processamento. A disseminação do

uso de clusters de PCs, conseqüência direta do baixo custo do hardware e do desenvolvimento

de redes de alta velocidade, permite que problemas complexos anteriormente tratados em

supercomputadores, sejam resolvidos em plataformas de baixo custo.

Apresentou-se neste trabalho alguns aspectos do desenvolvimento de

aplicações paralelas. Mais especificamente estudou-se dois métodos de decomposição de

domínio: o MDD Aditivo de Schwarz e o Método do Complemento de Schur, utilizados na

solução de sistemas de equações lineares.

O MDD Aditivo de Schwarz apresentou resultados satisfatórios. Esse

método mostrou-se altamente paralelizável e com uma boa escalabilidade. Ainda apresentou

resultados satisfatórios com a inclusão de multithreads e da biblioteca BLAS às

implementações.

Já o método do complemento de Schur não apresentou resultados tão

satisfatórios, apresentando um desempenho computacional razoável, e soluções com baixa

qualidade numérica se comparado as soluções obtidas utilizando um método de Schwarz.

O desempenho foi afetado pela má distribuição de tarefas entre os nodos. Já

a baixa qualidade numérica se deve, principalmente, a erros numéricos introduzidos pelo uso de

aproximações polinomiais no cálculo das inversas locais.

9.1 Contribuições

Algumas contribuições deste trabalho são:

• Desenvolvimento de aplicações paralelas para a solução de sistemas

de equações;

• Estudo do uso de apenas múltiplos processos ou o uso de múltiplos

processos em conjunto com múltiplos threads na paralelização de

métodos de decomposição e domínio em clusters de PCs

multiprocessados;

• Estudo do uso da biblioteca BLAS na paralelização de métodos de

decomposição de domínio.

Os estudos realizados durante o desenvolvimento desse trabalho resultaram

na publicação de três resumos, que foram publicados em eventos regionais:

89

• SEMINC 2003 – Semana de Informática de Cascavel;

• ERMAC – Escola Regional de Matemática Aplicada

Computacional;

• ERAD 2004 – Escola Regional de Alto Desempenho.

Além das contribuições citadas, este texto tem como objetivo servir de

material didático para o GMCPAR.

9.2 Trabalhos Futuros

Dentro do escopo deste trabalho, seguem algumas sugestões para trabalhos

futuros, bem como, atividades que possam complementar os estudos realizados durante o

desenvolvimento deste trabalho, e que não puderam ser realizados:

• Estudo sobre técnicas para aproximações de matrizes, para melhorar

a qualidade das inversas locais exigidas no Método do Complemento

de Schur;

• Melhor distribuição das tarefas no Método do Complemento de

Schur, de modo a melhorar seu desempenho computacional;

• Uso de múltiplos threads para sobrepor comunicação e

processamento, de modo a melhorar o desempenho das aplicações;

• Adicionar múltiplos threads ao Método do Complemento de Schur;

• Utilizar a biblioteca BLAS no Método do Complemento de Schur.

90

REFERÊNCIAS BIBLIOGRÁFICAS

BALAY, S. et al. PETSc Users Manual. Argonne National Laboratory. 2003. Disponível em:

http://www-unix.mcs.anl.gov/petsc/petsc-2/documentation/index.html. Acessado em

08/08/2003.

BHARGAVA, R.; FOX, G. Scalable Libraries for Graph Partitioning. School of Computer Science.

Syracuse University. Scalable Libraries Conference. 1993. Disponível em

http://citeseer.nj.nec.com/bhargava93scalable.html. Acessado em 14/08/2003.

BLAS: Basic Linear Algebra Subprograms. Disponível em: www.netlib.org/blas/. Acessado em

10/07/03.

CAI, X-C, WIDLUND, O. Multiplicative Schwarz algorithms for nonsymmetric and indefinite Elliptic

Problems, SIAM J. Numer. Anal., v. 30, pp. 936-952. 1993.

CANAL, A. P. Paralelização de Métodos de Solução de Sistemas Lineares Esparsos com o DECK em

um Cluster de PCs. 117 p. Dissertação (Mestrado em Ciência da Computação) – Instituto de

Informática, UFRGS. Porto Alegre. 2000.

CARVALHO, E. C. A.; DIVERIO, T. A. Particionamento de Grafos de Aplicações e Mapeamento em

Grafos de Arquiteturas Heterogêneas. Dissertação de Mestrado. Instituto de Informática,

UFRGS. Porto Alegre. 2002.

CENAPAD Apostila de MPI. Unicamp. 2003. Disponível em

http://www.cenapad.unicamp.br/servicos/treinamentos/mpi.shtml. Acessado em 05/09/2003.

CHAN, T. F.; MATHEW, T. P. Domain Decomposition Algorithms. Acta Numerica, Los Angeles, p.

61-143, Aug. 1994.

CHAN, A.; GROPP,W.; LUSK, E. User's Guide for MPE: extensions for MPI programs. Disponível

em http://www-unix.mcs.anl.gov/mpi/mpich/. Acessado em 10/11/2003.

CHAN, A.; ASHTON, D.; LUSK, R.; GROPP, W. Jumpshot-4's User's Guide. Disponível em

http://www-unix.mcs.anl.gov/perfvis/software/viewers/. Acessado em 10/11/2003.

CHARÃO, A. S. Multiprogrammation Parallele Générique des Méthodes de Décomposition de

Domaine. 2001. Tese (Doutorado em Ciência da Computação) Institut National Polytechnique

de Grenoble.

91

CULLER, D. E.; PAL, S. J.; GUPTA A. Parallel Computer Architecture: a hardware/software

approach. Morgan Kaufmann Publishers. 1999.

DEBREU, L.; BLAYO, E. On the Schwarz Alternating Method for Oceanic Models on Parallel

Computers. Journal of Computational Physics, v. 141, p. 93-111. 1998.

DE ROSE, C. A. Arquiteturas Paralelas. Anais da Escola Regional de Alto Desempenho. Gramado.

2001.

DRYJA, M, WIDLUND, O. B. An Additive Variant of the Alternating Method for the Case of Many

Subregions, TR 339, Courant Institute, New York University. 1987.

DIVERIO, Tiarajú A. LEPMAC Material Didático de Apoio – Módulo SELAS. Porto Alegre: Instituto

de Informática. UFRGS. 1990.

DONGARRA, J; Petitet, A; Whaley, R. C. Automated Empirical Optimization of Software and the

ATLAS project. 2000. Disponível em:

http://www.netlib.org/utk/people/JackDongarra/papers.htm. Acessado em 07/08/2003.

DORNELES, R. Particionamento de Domínio e Balanceamento Dinâmico de Carga em Arquiteturas

Heterogêneas : Aplicação a Modelos Hidrodinâmicos e de Transporte de Massa 2-D e 3-D.

Proposta de Tese (Doutorado em Ciência da Computação) – Instituto de Informática, UFRGS,

Porto Alegre. 2001.

EDELMAN, A. Parallel Scientific Computing. Notas de Aula. Massachusetts Institute of Technology.

2002. Disponível em: http://beowulf.lcs.mit.edu/18.337/index.html. Acessado em 09/07/03.

FLYNN, M. J., Some Computer Organization and Their Effectiveness. In: IEEE Transactions on

Computers, v. c-21, n. 9, pp. 948-960. 1972.

FOSTER, I. T. Designing and Building Parallel Programs: Concepts and Tools for Parallel Software

Engineering. Addison-Wesley Publishing Company. 1994.

GALANTE, G. et al. Paralelização de Métodos Numéricos Utilizando Clusters de PCs. Anais da II

Mostra de Trabalhos Científicos em Computação. Cascavel. UNIOESTE. 2003.

GALANTE, G. et al. Processamento de alto desempenho aplicado a modelos computacionais de

dinâmica de fluidos ambiental. Revista SCIENTIA v.13 nº 2 Julho/Dezembro 2002, São

Leopoldo. 2002.

92

GEIST, A. et al. PVM: Parallel Virtual Machine: A Users' Guide and Tutorial for Networked Parallel

Computing. MIT Press. Massachusetts Institute of Technology. 1994. Disponível em:

http://www.netlib.org/pvm3/book/pvm-book.html. Acessado em 18/10/03.

GIGABIT ETHERNET ALLIANCE. Gigabit Ethernet White Pape. Disponível em:

http://www.10gea.org/Tech-whitepapers.htm. Acessado em 05/08/2003.

HWANG, K. Advanced Computer Architecture: Paralelism, Scalability, Programmability. McGraw-

Hill, 1993.

HENDRICKSON,B.; LELAND, R. The Chaco User’s Guide. Version 2.0. 1995. Disponível em

http://www.cs.sandia.gov/CRF/papers_chaco.html. Acessado em 13/08/2003.

KARIPYS G.; KUMAR V. Parallel Multilevel k-way Partitioning Scheme for Irregular Graphs.

University of Minnesota, Department of Computer Science. 1996. Disponível em http://www-

users.cs.umn.edu/~karypis/metis/metis/files/. Acessado em 13/08/2003.

KARIPYS G.; KUMAR V. METIS: A Software Package for Partitioning Unstructured Graphs,

Partitioning Meshes, and Computing Fill-Reducing Orderings of Sparse Matrices. University of

Minnesota, Department of Computer Science. 1998. Disponível em http://www-

users.cs.umn.edu/~karypis/metis/metis/files/. Acessado em 13/08/2003.

KERNIGHAN B. e LIN S. An effective heuristic procedure for partitioning graphs, The Bell System

Technical Journal, pp. 291 – 308. 1970.

KUMAR, Vipin; et al. Introduction to Parallel Computing: Design and Analysis of Algorithms.

California: The Benjamin/Cummings Publishing Company, Inc. 1994.

LEWIS, B.; BERG D. Multithreaded Programing with Pthreads. Sun Mycrosystems Press. Mountain

View.1998.

INFINIBAND TRADE ASSOCIATION. An InfiniBand Technology Overview. Disponível em:

www.infinibandta.org. Acessado em 08/08/2003.

MARTINOTTO, A. L, Paralelização de Métodos Numéricos de Solução de Sistemas Esparsos de

Equações Utilizando MPI e Pthreads. Trabalho de Conclusão de Curso (Bacharelado em

Ciência da Computação). Universidade de Caxias do Sul. 2001.

MARTINOTTO, A. L. Resolução de Sistemas de Equações Lineares Através de Métodos de

Decomposição de Domínio. 2003. 92 p. Dissertação (Mestrado em Ciência da Computação) –

93

Instituto de Informática. UFRGS, Porto Alegre.

MARTINOTTO, A. L, Estudo de Pré-condicionadores para Métodos Iterativos do Subespaço de

Krylov. Trabalho Individual de Mestrado. Trabalho Individual – Instituto de Informática

UFRGS. Porto Alegre. 2002.

MYRICOM. Myrinet Overview. Disponível em: http://www.myri.com/myrinet/overview/index.html.

Acessado em 07/08/2003.

MÜLLER, F. M.; CHARÃO, A. S.; SANTOS H. G. Aplicações de Alto Desempenho. Anais Escola

Regional de Alto Desempenho 2003. Santa Maria-RS. 2003.

OPENMP: Simple, Portable, Scalable SMP Programming. Disponível em http://www.openmp.org/.

Acessado em 07/07/2003.

PACHECO, P. S. Parallel Programing with MPI. Morgan Kaufmann Publishers Inc. Boston. 1997.

PALHA, M. A. K. Avaliação de Desempenho e Perfilamento de Código em Programas Paralelos.

Trabalho de Conclusão de Curso. Universidade de Caxias do Sul. 2000.

PATTERSON, A. D.; HANNESSY, J. L. Computer Organization & Design: The Hardware e

Software Interface. Morgan-Kaufmman. 1998.

PELLEGRINI, F. SCOTCH 3.1 User’s Guide. 1996. Disponível em

www.labri.fr/Perso/~pelegrin/scotch/.

PERLIN, H.; GALANTE, G.: GERATRIZ – Ferramenta Para Auxílio Na Geração De Sistemas De

Equações a partir de Domínios. Grupo de Matemática Computacional e Processamento

Paralelo. Anais ERMAC 2003. 2003.

PETRINI F. et al. The Quadrics Network: High-performance Clustering Technology. Los Alamos

National Laboratory. 2002. Disponível em: http://www.c3.lanl.gov/~fabrizio/quadrics.html.

Acessado em 07/08/2003.

PICININ, D. Jr. Paralelização do Algoritmo do Gradiente Conjugado Através da Biblioteca MPI e de

Threads. Trabalho Individual – Instituto de Informática UFRGS. Porto Alegre. 2001.

PICININ, D. Jr. Paralelização de Métodos de Solução de Sistemas Lineares em Clusters de PCs com

as Bibliotecas DECK, MPICH e Pthreads. Dissertação (Mestrado em Ciência da Computação) –

Instituto de Informática, UFRGS. Porto Alegre. 2002.

94

PITANGA, M. Construíndo Supercomputadores com Linux. Brasport. Rio de Janeiro. 2002.

RIZZI, R. L. Modelo Computacional Paralelo para a Hidrodinâmica e para o Transporte de

Substâncias Bidimensional e Tridimensional. Tese (Doutorado em Ciência da Computação) –

Instituto de Informática, UFRGS, Porto Alegre. 2002.

RIZZI, R. L. et al. Modelo Computacional Paralelo Com Balanceamento Dinâmico de Carga para a

Hidrodinâmica e para o Transporte de Substâncias. XXIV Iberian Latin-American Congress on

Computational Methods in Engineering. Universidade Federal de Rio Preto. 2003.

RUNTING, S. Parallel Computation of IncompleteCholesky Factorization. Disponível em:

http://media.cs.tsinghua.edu.cn/~shirunting/research.htm. Acessado em 08/07/2003.

SAAD, Y. Data Structures and Algorithms for Domain Decomposition and Distributed Sparse

Matrices. University of Minnesota. Department of Computer Science. 1994. Disponível em

http://citeseer.nj.nec.com/saad94data.html. Acessado em 05/11/2003.

SAAD, Y. Iterative Methods for Sparse Linear Systems. PWS Publishing Company. 1996.

SAAD, Y; SOSONKINA M.; ZHANG, J. Domain Decomposition and Multi-Level Type Techniques

for General Sparse Linear Systems. University of Minnesota. Department of Computer Science.

1998. Disponível em http://www.cs.umn.edu/~saad. Acessado em 10/12/2003.

SCHÜLE, J. Parallel Computing II – winter term 2002/2003. Notas de Aula. Disponível em:

http://cfgaussms.rz.tu-bs.de:2301/jschuele/vorlesung/WS00.html. Acessado em: 10/07/03.

SCI: The Scalable Coherent Interface. Disponível em: http://www.scizzl.com/. Acessado em

07/08/2003.

SHEWCHUCK, J. R. An Introduction to the Conjugate Gradient Method Without the Agonizing Pain.

School of Computer Science. Carnegie Mellon University. 1994. Disponível em:

<ftp://warp.cs.cmu.edu>. Acessado em: 20/06/2003.

SHYGUE, C. Y. Cálculo Numérico e Computacional. Notas de Aula. Disponível em:

geocities.yahoo.com.br/numericobr/apostila/sistema.pdf. Acessado em: 19/08/2003.

SILBERSCHATZ, A.; Galvin, P.; Gagne, G. Sistemas Operacionais: Conceitos e Aplicações. Campus.

2001.

SILVA, L. M.; BUYYA R. Parallel Programming Models and Paradigms. Departamento de

95

Engenharia Informática. Universidade de Coimbra. Coimbra. 2003. Disponível em:

www.cs.mu.oz.au/~raj/cluster/v2chap1.pdf.

SMITH, B.; BJORSTAD, P.; GROPP, W. Domain Decomposition: Parallel Multilevel Methods for

Elliptic Partial Differential Equations. Cambridge: Cambridge University. 1996.

STEINBRUCH, A; WINTERLE P. Álgebra Linear. Makron Books. 1999.

STALLINGS, W. Computer Organization and Architecture. Prentice Hall. 1996. Fourth Edition.

TALLEC, P. L. Domain Decomposition Methods in Computational Mechanics. Computational

Mechanics Advances, Le Chesnay Cedex, v. 1, p. 121-220, Oct. 1994.

TANENBAUM A. S. Structured Computer Organization. Prentice Hall. 1999. Fourth Edition.

TOP500. Supercomputer Site. Disponível em clusters.top500.org. Acessado em 29/09/03.

WALSHAW, C. The Jostle user manual: Version 2.2. 2000. Disponível em

www.gre.ac.uk/~c.walshaw/jostle/.

96

APÊNDICE A

Endereço eletrônico das ferramentas citadas neste trabalho:

Bibliotecas de Troca de Mensagens

PVM

http://www.csm.ornl.gov/pvm/pvm_home.html

MPICH

http://www-unix.mcs.anl.gov/mpi/mpich/download.html

Bibliotecas de Threads

OpenMP – Compilador OMNI e Bibliotecas

http://phase.etl.go.jp/Omni/

Bibliotecas Matemáticas

BLAS (ATLAS)

math-atlas.sourceforge.net

PETSc

http://www-unix.mcs.anl.gov/petsc/

Pacotes de Particionamento

METIS

http://www.cs.umn.edu/~karypis/metis

Pacotes de Visualização e Perfilamento

Jumpshot

http://www-unix.mcs.anl.gov/perfvis/software/viewers/