You are on page 1of 148

U NIVERSIDADE DE S O P AULO I NSTITUTO DE F SICA DE S O C ARLOS D EPAR TAMENTO DE F SICA E I NFORMTICA

Tcnicas de orientao ao objetos para computao cientca paralela

Francisco Aparecido Rodrigues

Dissertao apresentada ao Instituto de Fsica So Carlos- IFSC, USP, como parte dos requisitos necessrios para obteno do ttulo de Mestre em Fsica Aplicada - Opo Fsica Computacional

Orientador: Prof. Dr. Gonzalo Travieso

S O C ARLOS 2004

Ao Prof. Dr. Gonzalo, pela amizade, conana, pacincia e pela grande competncia na orientaao do trabalho, alm do constante otimismo oferecido. minha me Arsnia por sempre me apoiar e conar na minha capacidade, alm de sempre oferecer otimismo e esparana incabveis. Aos meus irmo Fabrcio, Gabriela, Ftima, Meire, Elisa, Joo Carlos e Alcindo pelo apoio e compreenso.

A todos os meus amigos pela solidariedade e lealdade, alm dos momentos de diverso que estes me ofereceram durante todo esse perodo. Agradeo ao Paulino, a Thaty, o Andr e a El, meus grandes amigos de laboratrio, pelo companheirismo e pela ajuda sempre prestativa. Agradeo a todas as pessoas que de uma forma ou de outra contriburam para o meu trabalho. Finalmente, agradeo a Deus pela oportunidade de trabalhar em a favor da cincia.

!     "  

Introduo 1.1 1.2 1.3 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prximos captulos . . . . . . . . . . . . . . . . . . . . . . . . .

Problemas numricos e paralelismo 2.1 Bibliotecas e softwares numricos . . . . . . . . . . . . . . . . . 2.1.1 2.2 Bibliotecas para lgebra linear . . . . . . . . . . . . . . .

Computao Paralela . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 2.2.2 Softwares paralelos . . . . . . . . . . . . . . . . . . . . . MPI - Message Passing Interface . . . . . . . . . . . . .

lgebra Linear Numrica 3.1 3.2 3.3 Conceitos fundamentais . . . . . . . . . . . . . . . . . . . . . . . Tipos de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . Operaes algbricas sobre matrizes . . . . . . . . . . . . . . . . 3.3.1 3.3.2 3.3.3 3.4 Sistema de equaes lineares . . . . . . . . . . . . . . . . Autovalores e autovetores . . . . . . . . . . . . . . . . . Problemas de mnimos quadrados . . . . . . . . . . . . .

25

Construo de softwares numricos . . . . . . . . . . . . . . . .

  

         

 
1

3.5 4

BLAS, LAPACK e Scilab . . . . . . . . . . . . . . . . . . . . . .

ScaLAPACK 4.1 Estrutura e funcionalidade . . . . . . . . . . . . . . . . . . . . . 4.1.1 4.1.2 4.2 PBLAS . . . . . . . . . . . . . . . . . . . . . . . . . . . BLACS . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

Distribuio dos dados . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 Conceitos bsicos . . . . . . . . . . . . . . . . . . . . . . Grade de processadores . . . . . . . . . . . . . . . . . . . Array descriptors . . . . . . . . . . . . . . . . . . . . . . Matrizes densas in-core . . . . . . . . . . . . . . . . . . Matrizes de banda estreita e tridiagonais in-core . . . . . .

4.3 4.4

Lista geral de argumentos . . . . . . . . . . . . . . . . . . . . . . Contedo do ScaLAPACK . . . . . . . . . . . . . . . . . . . . . 4.4.1 Nomenclatura da rotinas . . . . . . . . . . . . . . . . . .

lgebra linear com orientao ao objeto 5.1 5.2 Aspectos de orientao ao objeto . . . . . . . . . . . . . . . . . . Orientao ao objeto e lgebra linear . . . . . . . . . . . . . . . . 5.2.1 5.3 Representao de matrizes . . . . . . . . . . . . . . . . .

70

Implementao da biblioteca POOLALi 6.1 6.2 Construo da grade de processos . . . . . . . . . . . . . . . . . Construo das hierarquia de classes . . . . . . . . . . . . . . . . 6.2.1 6.2.2 6.3 Distmat . . . . . . . . . . . . . . . . . . . . . . . . . . . Classes derivadas . . . . . . . . . . . . . . . . . . . . . .

80

Aspectos da implementao . . . . . . . . . . . . . . . . . . . .

    

 

Hierarquia de classes de matrizes . . . . . . . . . . . . . . . . . .

    

             

 

   

   



 

Anlise de desempenho da biblioteca POOLALi 7.1 7.2 7.3 O problema de fsica do estado slido . . . . . . . . . . . . . . . Implementao . . . . . . . . . . . . . . . . . . . . . . . . . . . Anlise de desempenho . . . . . . . . . . . . . . . . . . . . . . .

96

Concluses 8.1 Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . .

109

A Instalao do ScaLAPACK A.1 MPICH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 SCALAPACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . B Rotinas do ScaLAPACK B.1 DB - De banda geral diagonalmente dominante . . . . . . . . . . B.1.1 B.1.2 Driver routines . . . . . . . . . . . . . . . . . . . . . . . Computational routines . . . . . . . . . . . . . . . . . . .

117

120

B.2 GT - Tridiagonal geral . . . . . . . . . . . . . . . . . . . . . . . B.2.1 B.2.2 Driver routines . . . . . . . . . . . . . . . . . . . . . . . Computational routines . . . . . . . . . . . . . . . . . . .

B.3 DT - Tridiagonal geral sem pivotamento . . . . . . . . . . . . . . B.3.1 Computational routines . . . . . . . . . . . . . . . . . . .

B.4 GB - De banda geral . . . . . . . . . . . . . . . . . . . . . . . . B.4.1 B.4.2 Driver routines . . . . . . . . . . . . . . . . . . . . . . . Computational routines . . . . . . . . . . . . . . . . . . .

B.5 GE - General . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.5.1 B.5.2 Driver routines . . . . . . . . . . . . . . . . . . . . . . . Computational routines . . . . . . . . . . . . . . . . . . .

B.6 GG - Geral para problemas generalizados . . . . . . . . . . . . . B.6.1 Driver routines . . . . . . . . . . . . . . . . . . . . . . .

                     




 

 

 

 



 

B.7.1 B.7.2

Driver routines . . . . . . . . . . . . . . . . . . . . . . . Computational routines . . . . . . . . . . . . . . . . . . .

B.8 OR - Ortogonal . . . . . . . . . . . . . . . . . . . . . . . . . . . B.8.1 Computational routines . . . . . . . . . . . . . . . . . . .

B.9 PB - Simtrica ou hermitiana, positiva denida de banda geral . . B.9.1 B.9.2 Driver routines . . . . . . . . . . . . . . . . . . . . . . . Computational routines . . . . . . . . . . . . . . . . . . .

B.10 PO - Simtrica ou hermitiana positiva . . . . . . . . . . . . . . . B.10.1 Driver routines . . . . . . . . . . . . . . . . . . . . . . . B.10.2 Computational routines . . . . . . . . . . . . . . . . . . . B.11 PT - Simtrica ou hermitiana positiva denida tridiagonal . . . . . B.11.1 Driver routines . . . . . . . . . . . . . . . . . . . . . . . B.11.2 Computational routines . . . . . . . . . . . . . . . . . . . B.12 ST - Simtrica tridiagonal . . . . . . . . . . . . . . . . . . . . . . B.12.1 Computational routines . . . . . . . . . . . . . . . . . . . B.13 SY - Simtrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.13.1 Driver routines . . . . . . . . . . . . . . . . . . . . . . . B.13.2 Computational routines . . . . . . . . . . . . . . . . . . . B.14 TR - Triangular . . . . . . . . . . . . . . . . . . . . . . . . . . . B.14.1 Computational routines . . . . . . . . . . . . . . . . . . . B.15 TZ - Trapezoidal . . . . . . . . . . . . . . . . . . . . . . . . . . B.15.1 Computational routines . . . . . . . . . . . . . . . . . . . B.16 UN - Unitria . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.16.1 Computational routines . . . . . . . . . . . . . . . . . . . B.17 HS - Matriz de Hesenberg . . . . . . . . . . . . . . . . . . . . .

 

B.7 HE - Hermitiana . . . . . . . . . . . . . . . . . . . . . . . . . . .

                                  

 

B.6.2

Computational routines . . . . . . . . . . . . . . . . . . .

 

B.17.1 Computational routines . . . . . . . . . . . . . . . . . . . B.17.2 LA - Rotinas auxiliares . . . . . . . . . . . . . . . . . . .

  

 

2.1 2.2 2.3 2.4 2.5 3.1 3.2 3.3 3.4 3.5 3.6 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8

Arquitetura de von Neuman . . . . . . . . . . . . . . . . . . . . . Lei de Moore . . . . . . . . . . . . . . . . . . . . . . . . . . . . Organizao dos computadores paralelos . . . . . . . . . . . . . . Fotos do Earth Simulator . . . . . . . . . . . . . . . . . . . . . . Cluster do Laboratrio de Processamento Paralelo Aplicado . . . Matrizes de banda gerais . . . . . . . . . . . . . . . . . . . . . . Matriz tridiagonal . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplos de matrizes triangulares . . . . . . . . . . . . . . . . . Matriz simtrica tridiagonal . . . . . . . . . . . . . . . . . . . . . Programa em linguagem C++ que utiliza a biblioteca BLAS. . . . Exemplo de um programa do Scilab. . . . . . . . . . . . . . . . . Hierarquia entre as bibliotecas do ScaLAPACK. . . . . . . . . . . Exemplo de uma grade montada com 8 processadores. . . . . . . Distribuies em bloco-coluna e cclica . . . . . . . . . . . . . . Distribuies bloco-coluna e bloco-cclica bidimensional . . . . . Exemplo de um mapeamento de um vetor em uma grade 1D. . . . Mapeamento unidimensional para N=16, P=2 e NB =8 . . . . . . . Mapeamento unidimensional para N=16, P=2 e NB =1 . . . . . . . Mapeamento unidimensional com N=16, P=2, NB =3 e SRC=1 . .

                   

 

! 

 !

4.9

Mapeamento de uma matriz 5 5 numa grade 2 2. . . . . . . . na grade de processos 2 3 . . . . . . . . . . . . . . . . . . . . .

4.10 (a) Matriz 99 particionada em blocos 22 e (b) matriz distruda

4.11 (a) Distribuio de uma matriz em uma grade do tipo bloco-coluna e (b) distribuio em uma grade do tipo bloco-linha. . . . . . . . . 4.12 Algoritmo de distribuio bloco-coluna. . . . . . . . . . . . . . . 5.1 5.2 5.3 Exemplo de uma hierarquia de classes . . . . . . . . . . . . . . . Diagrama UML de classes considerando uma hierarquia de matrizes. Hierarquia de classes considerando a forma de armazenamento na matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Diagrama de classes considerando o tipo de dado dos elementos armazenados na matriz. . . . . . . . . . . . . . . . . . . . . . . . 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 Mtodos pblicos da classe Parallel. . . . . . . . . . . . . . . . . Mtodos pblicos da classe Grid. . . . . . . . . . . . . . . . . . . Inicializao da grade de processos usando o ScaLAPACK. . . . . Inicializao da grade de processos usando a biblioteca POOLALi. Diagrama UML da hierarquia de classes da biblioteca POOLALi. Mtodos pblicos no virtuais da classe Distmat. . . . . . . . . . Mtodos pblicos da classe FloatSymmetric. . . . . . . . . . . . . Mtodos pblicos da classe DoubleSymmetric. . . . . . . . . . . Mtodos pblicos da classe FloatHermitian. . . . . . . . . . . . .

6.10 Mtodos pblicos da classe DoubleHermitian. . . . . . . . . . . . 7.1 7.2 7.3 7.4 Construo da matriz usando a biblioteca POOLALi. . . . . . . . Construo de modo tradicional sem o uso da biblioteca POOLALi. Diagonalizao da matriz usando a biblioteca POOLALi. . . . . . Diagonalizao da matriz usando as rotinas do ScaLAPACK. . . .

                          
 





   

7.5 7.6 7.7 7.8 7.9

Tempos medidos para uma matriz 1560 1560. . . . . . . . . . . Tempos medidos para uma matriz 1800 1800. . . . . . . . . . . Tempos medidos para uma matriz 2040 2040. . . . . . . . . . . Tempos medidos para uma matriz 2600 2600. . . . . . . . . . . Congurao da grade de acordo com o nmero de processadores

 

7.10 Curva de speed-up para uma matriz 2600 2600. . . . . . . . . .

           



   

4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9

Descritor das matrizes matrizes densas in-core . . . . . . . . . . . Valores de LLD_ , LOCr e LOCc em cada processo. . . . . . . . Mapeamento bloco-coluna: P = 2 e NB = 8. . . . . . . . . . . . Mapeamento bloco-coluna: P = 2, SRC = 1 e NB = 8. . . . . . Mapeamento da matriz A (no simtrica) sem pivotamento. . . . . Mapeamento da matriz A (no simtrica) com pivotamento. . . . .

Mapeamento da Matriz . . . . . . . . . . . . . . . . . . . . . . . Mapeamento de uma matriz no-simtrica tridiagonal. . . . . . .

4.10 Mapeamento de uma matriz no-simtrica tridiagonal usando apenas a parte inferior (

). . . . . . . . . . . . . . . . . .

4.11 Mapeamento de uma matriz no-simtrica tridiagonal usando apenas a parte superior (

). . . . . . . . . . . . . . . . . .

4.12 Descritor das matrizes de banda estreita e tridiagonais . . . . . . . 4.13 Descritor das matrizes de lado direito . . . . . . . . . . . . . . .

  

   

Mapeamento da matriz A simtrica positiva.

.. . . . . .

 

 

3.1

Operaes matriciais e vetoriais bsicas. . . . . . . . . . . . . . .

2.1

Computadores mais rpidos do mundo. Fonte [1]. . . . . . . . . .

  

 

 

 

!  !

    #"! %$

     

Neste trabalho apresentamos a metodologia de orientao ao objeto no desenvolvimentos de uma biblioteca de classes para facilitar o processo de programao numrica paralela. Na implementao dos mtodos das classes utilizamos as rotinas do pacote ScaLAPACK, sendo que essas classes oferecem mtodos para manipulaes matriciais bsicas e para a diagonalizao de matrizes, onde essas matrizes podem ser reais e complexas, de simples e dupla preciso. Este trabalho apresenta detalhes de implementao e uma anlise comparativa de desempenho, a m de mostrarmos a ecincia e as facilidades de uso da orientao ao objeto no desenvolvimento de programas cientcos paralelos.

  !

In this work we apply object oriented technics to the development of a class library to facility the process of program development for numerical parallel computations. In the implementation of the class methods, we used the routines of the ScaLAPACK package; the classes offer methods to basic matrix manipulations and to matrix diagonalization, where the matrices can be real and complex, with single or double precision. This work describes details of implementation and a comparative analysis of performance, in order to show the efciency and the easy of use of object orientation in the develpment of parallel scientic programs.

  ! 

$

A necessidade por poder computacional favoreceu o desenvolvimento da computao paralela. Hoje, mais do nunca, sistemas paralelos esto se tornando cada vez mais populares. No entanto, as facilidades apresentadas no desenvolvimento dos softwares, no a mesma oferecida pelo hardware, sendo o processo de programao paralela uma tarefa rdua e em muitos casos desencorajadora.

Apesar de existirem muitas linguagens paralelas, compiladores paralelizantes e bibliotecas paralelas que podem ser usadas conjuntamente com linguagens seqenciais, a construo de programas paralelos que ofeream alto desempenho complexa. Deste modo, muitos estudos tm sido feitos de forma a obter meios de programao paralela que ofeream grau de diculdade prximo ao oferecido pela programao seqencial. Uma das possibilidades para obter essa facilidade o uso de compiladores paralelizantes, que tentam extrair o mximo de paralelismo de cdigos seqenciais. No entanto, o desempenho conseguido desta forma est muito longe do ideal. Outra possibilidade so as linguagens paralelas. No entanto elas tambm apre-

          

& 6 5 3 1) ' 87(420(& %

!" $#!

sentam certos fatores que desestimulam seu uso. Um deles o fato do programador ter que aprender uma nova linguagem. Outro, que a extrao do paralelismo pode ser difcil, j que a obteno de um bom balanceamento de carga e granularidade grossa um desao para essas linguagens. Finalmente, possvel criar-se programas paralelos aproveitando-se as linguagens seqenciais e usando-se bibliotecas que permitam a comunicao entre os processos. Neste trabalho discutiremos diversas questes relacionadas a esse tipo de programao. No entanto, a construo de softwares paralelos utilizando-se essas bibliotecas ainda bastante complexa. Cabe ao programador especicar os meios de comunicao, a distribuio dos dados entre os processadores, os momentos de troca de mensagens, etc, ou seja, ele tem que desviar constantemente a ateno do processo de resoluo do problema para se preocupar com detalhes do paralelismo que poderiam estar ocultos a ele. O MPI [2] um padro que dene algumas dessas bibliotecas que oferecem rotinas para fazerem a comunicao entre os processadores e a elaborao de programas paralelos. Como a computao paralela ainda est intimamente relacionada computao cientca, uma sada encontrada para contornar esse problema foi a construo de bibliotecas numricas paralelas, como o ScaLAPACK [3], que uma biblioteca paralela para problemas de lgebra linear que envolvam clculos matriciais. Mesmo assim, sua interface e muitos detalhes de uso dicultam sua utilizao.

O objetivo principal do nosso trabalho foi desenvolver uma biblioteca que oferea um desempenho to bom quanto ScaLAPACK, mas que possua uma interface muito mais amigvel, a m de facilitar o processo de desenvolvimento de progra-

" #

& 207! 1) '  

  

 

" #!

mas cientcos. Nos preocupamos unicamente com os problemas de autovalores e autovetores aplicados em matrizes densas. Na implementao da biblioteca, utilizamos diversos recursos do ScaLAPACK bem como de suas bibliotecas internas, como o BLACS e PBLAS [4]. Com o uso de orientao ao objeto, detalhes de paralelismo, como a construo da grade de processos ou mesmo inicializao das rotinas de comunicao do ScaLAPACK caram ocultos ao programador. Alm disso, usando templates, herana e sobrecarga de operadores, pudemos denir operaes matriciais bsicas fornecendo uso simplicado. Deste modo, para a utilizao da biblioteca que desenvolvemos no necessrio conhecimento aprofundado de paralelismos e o cdigo implementado com o uso de nossa biblioteca muitas vezes car parecido com um cdigo puramente seqencial. Como o uso de orientao ao objeto em nosso trabalho mostrou-se bastante promissor, h a possibilidade de desenvolvimento futuros com a implementao de biblioteca anlogas que criamos para outros problemas cientcos, como de lgebra linear, equaes diferenciais, estatstica, etc. Alm disso, h a possibilidade de estender esta biblioteca para todas as rotinas do ScaLAPACK e para diversos tipos de matrizes.

No restante da dissertao, teremos os seguintes captulos:

: Apresentamos conceitos sobre programao paralela bem como

sobre programao numrica.

: Introduzimos conceitos bsicos de lgebra linear e de computao

numrica utilizada para soluo de alguns problemas algbricos.

"

& 97' 5371#& )) 8 6 4 2 3 0 " (

         

& $ " '%#!

R PI G ED C A SQ7HF%B@

T PI G ED C A SQ7HF%B@

 #! "

: Discutimos em detalhes as caractersticas do ScaLAPACK e seu

uso, descrevendo algumas rotinas e mostrando o mtodo padro de construo de programas que utilizam essa biblioteca.

: Os conceitos de orientao ao objeto so introduzidos e apresenta-

dos como ferramenta para a construo de softwares numricos que tratam de problemas de lgebra linear.

: A implementao da biblioteca discutida e apresentada algumas

caractersticas bsicas, bem como sua facilidade de uso.

: Mostramos uma aplicao da biblioteca bem como uma anlise de

desempenho em relao ao uso do ScaLAPACK tradicional, onde exibimos as vantagens e desvantagens na utilizao de orientao ao objeto.

: Conclumos o trabalho apresentando as limitaes de uso e as

facilidades da biblioteca bem como discutimos as aplicaes e trabalhos futuros.

         

IG DCA QP7HFE%B@

IG DCA QP7HFE%B@

IG DCA QP7HFE%B@

IG DCA QP7HFE%B@

IG DCA QP7HFE%B@

Cientistas e engenheiros descrevem fenmenos fsicos em termos de modelos matemticos. Esses modelos geralmente so considerados teoricamente dentro de um espao contnuo e no qual a obteno de uma soluo analtica pode ser complexa. Desta forma, faz-se uso de matemtica discreta, usando mtodos numricos que podem ser transferidos para softwares e resolvidos com auxlio de computadores. A simulao de modelos fsicos provenientes de matemtica discreta em computadores oferece grandes vantagens aos pesquisadores. Dentre elas podemos citar a reduo do custo de pesquisa, bem como a reduo de riscos, como no caso dos experimentos perigosos. Outro fator de importncia so os experimentos que no esto disponveis no mundo real, como os de construes de modelos em cromodinmica quntica. Alm disso, experimentos com frmacos, de engenharia aeronutica, de semicondutores, etc, podem ser realizados vrias vezes com um custo muito menor do que o realizado de forma real, alm dos experimentos perigosos, como os de bombas nucleares. Com a utilizao de mtodos numricos, os modelos tornaram-se mais precisos e a necessidade de um poder computacional cada vez maior se fez necessria. Como os computadores seqenciais no oferecem o desempenho exigido, os modelos seqenciais precisaram ser transferidos para as mquinas de melhor

  !

 

"     !   ! 

desempenho, ou seja, as mquinas paralelas. Essa transferncia implicou no desenvolvimento de softwares paralelos e a adequao de bibliotecas seqenciais a esse novo modelo. Nos ltimos, a padronizao de bibliotecas numricas vem se tornando um fato real, determinando a forma da declarao das subrotinas, o modo de armazenamento, os tipos de dados e a linguagem a ser utilizada. No entanto, a implementao no padronizada, o que possibilita aos desenvolvedores criar verses da biblioteca para uma arquitetura especca, de forma a oferecer um certo nvel de otimizao, usando recursos especcos dessa arquitetura.

Dentre as bibliotecas e softwares numricos seqenciais, h uma grande quantidade disponvel gratuitamente. Entre elas, podemos citar: MTL (Matrix Template Library) [5]: uma biblioteca construda de forma similar STL [6, 7] para operar sobre matrizes. A proposta fornecer rotinas que facilitem ao programador o trabalho com matrizes esparsas, densas, de banda, simtricas, triangulares e algoritmos bsicos que possam operar sobre elas. IML++(Interative Methods Library) [8]: uma biblioteca de templates construda em C++ que usa modernos mtodos iterativos na resoluo de sistemas de equaes lineares simtricos e no simtricos. As operaes so efetuadas sobre matrizes densas, esparsas e matrizes distribudas. ARPACK++ [9]: o ARPACK uma biblioteca para soluo de problemas de autovalores. O ARPACK++ sua verso que utiliza orientao ao objeto, fornecendo uma coleo de classes em C++ que permitam efetuar as

"

& )) 0

"  ( 6 " 

"   33 ' &

 

    
" "

30 ' 7' (& ) 8  )

 

   

!" $

mesmas operaes do ARPACK. O uso de templates e classes facilitam a resoluo de problemas de autovalores fornecendo uma interface mais amigvel do que a oferecida pelo ARPACK, que usa FORTRAN, facilitando a construo de programas. SparseLib++ [10, 11]: uma biblioteca de classes em C++ para computao de matrizes esparsas em diversas plataformas computacionais. O pacote SparseLib++ constitudo de diversas classes para armazenamento de matrizes esparsas e funes que permitem o tratamento dessas matrizes. MV++ [12]: um pequeno, mas eciente, conjunto de classes para computao de vetores e matrizes simples. Ele foi escrito em C++ e sua criao objetivou a computao otimizada em sistemas RISC e arquiteturas que usam pipeline de instrues. Template Numerical Toolkit (TNT) [13]: uma coleo de interfaces para construo de softwares numricos usando C++. O TNT dene as interfaces bsicas para estruturas de dados, tal como arrays multidimensionais e matrizes esparsas. O objetivo principal deste pacote fornecer componentes de software que ofeream portabilidade e facilidade na manuteno do cdigo do programa. FTensor [14]: uma biblioteca de alta performance escrita em linguagem C++ para tratamento de tensores. Scilab [15]: ambiente grco que permite a resoluo de problemas numricos tais como problemas da lgebra linear, polinmios, integrao numrica, tratamento de sinais, visualizao grca, etc. Na seo 3.5 apresentamos maiores detalhes sobre o Scilab.

 

    

 

  

GOOSE ( The GNU Object-Oriented Statistics Environment) [16]: biblioteca escrita em C++ dedicada a clculos estatsticos. Esta biblioteca usa as vantagens oferecidas pelo C++ para fornecer uma interface clara e facilitada ao programador para lidar com problemas estatsticos. Alm dessas bibliotecas e softwares que citamos acima, h muitas outras que so apresentadas em [17]. Em nosso trabalho, utilizamos apenas bibliotecas que tratam de problemas de lgebra linear.

Um desenvolvimento possvel de uma aplicao numrica de lgebra linear pode ser resumido da seguinte forma: 1. Descrever em termos de lgebra linear o problema a ser resolvido. 2. Selecionar a biblioteca que melhor descreve o problema. 3. Traduzir o problema para uma linguagem que suporte a biblioteca e escolher as rotinas a utilizar. No terceiro passo, podemos conseguir uma certa otimizao escolhendo rotinas da biblioteca que estejam relacionadas forma da matriz que usada no clculo, de forma a usar suas propriedades algbricas. Assim, para matrizes esparsas, convm utilizar as rotinas que tratam desse tipo de matriz. A comunidade que trabalha no desenvolvimento de bibliotecas criou o termo bibliotecas tradicionais para as bibliotecas de lgebra linear desenvolvidas usando a metodologia top-down em linguagens imperativas, principalmente Fortran. Exemplos dessas bibliotecas so LINPACK (Linear Algebra Package) [18], EISPACK (Eigensystem Package) [19], LAPACK (Linear Algebra Package) [20], BLAS (Basic Linear Algebra Subprograms) [21, 22] e ScaLAPACK (Scalable LAPACK)

'  6 ! '   2 0 ! ' ! $ # !     ! 75431)(&%" 

 

    

 

  

[3, 4]. Essas duas ltimas possuem verses que utilizam orientao ao objeto, a LAPACK++ [23] e ScaLAPACK++ [24] (ainda no implementada).

EISPACK [19] uma coleo de rotinas em Fortran que calculam autovalores e autovetores de nove classes de matrizes: complexa, complexa hermitiana, real, real simtrica, real simtrica densa, real simtrica tridiagonal, real especial tridiagonal, real generalizada e real generalizada simtrica. Essa biblioteca foi inicialmente desenvolvida na linguagem Algol, na dcada de 60 e teve sua release em Fortran em 1972, tendo grande sucesso na comunidade cientca.

LINPACK [18] uma coleo de rotinas em Fortran que analisam e resolvem sistemas de equaes lineares e problemas de mnimos quadrados. As matrizes que podem ser tratadas so dos tipos gerais, densas, simtricas indenidas, simtricas positivas denidas, triangular e triangular quadrada. A biblioteca LINPACK organizada ao redor que quatro fatorizaes matriciais: fatorizao LU, fatorizao de Cholesky, fatorizao QR e decomposio de valores (todos esses mtodos so apresentados em [25]). Uma caracterstica interessante que foi implementada ao LINPACK a orientao de seus algoritmos coluna, ou seja, ele orienta arrays como colunas. A escolha desse mtodo devida forma que o Fortran faz o armazenamento de matrizes na memria. Como ele usa armazenamento por coluna, isto otimiza a execuo do cdigo LINPACK. O LINPACK usa as rotinas de nvel um do BLAS (que sero discutidas nas sees a seguir) e isso causa algumas inuncias no desempenho, pois para ma-

 

    

 

 @ 

@

  

trizes pequenas, com um nmero de elementos da ordem de 25, o desempenho prejudicado devido ao overhead que o BLAS introduz. No entanto, para matrizes grande, esse efeito desprezvel [26]. Com o desenvolvimento do LAPACK, o LINPACK teve seu uso reduzido.

O BLAS constitudo de rotinas bsica de algebra linear e oferece bom desempenho em diversas arquiteturas, sendo que ele possui verses otimizadas, onde suas bibliotecas so escritas em cdigo de mquina. Ele constitudo de trs nveis de operaes: Nvel 1: Operaes vetor-vetor: y = x + y, Nvel 2: Operaes matriz-vetor: y = Ax + y, Nvel 3: Operaes matriz-matriz: C = AB + C. Sendo A, B e C so matrizes, x e y vetores, e , escalares. Mais informaes sobre o BLAS, bem como suas rotinas podem ser vistas em [22].

O LAPACK [20] uma biblioteca de lgebra linear constituda de rotinas para resoluo de sistemas de equaes lineares, problemas de mnimos quadrados, de autovalores e autovetores. Essas rotinas podem operar sobre matrizes reais ou complexas, usando preciso simples ou dupla. O objetivo inicial do LAPACK foi usar as rotinas do EISPACK e LINPACK em computadores vetoriais ou de memria compartilhada de forma eciente. Isso se deu porque essas duas bibliotecas apresentam certo sucesso entre a comunidade cientca, mas no ofereciam um bom desempenho nessas mquinas, uma vez que

 

    

 

@  

  

 

elas no consideram a hierarquia de memria existente nelas, gastando mais tempo no envio de dados do que nas operaes de ponto utuante. No LAPACK, h o uso de algoritmos de diviso em bloco (que discutiremos nos prximos captulos) que so usados para efetuar operaes com matrizes, de forma que a hierarquia de memria aproveitada para otimizar os clculos. Com o desenvolvimento do LAPACK, houve um decrscimo no uso do LINPACK e EISPACK, uma vez que ele supera esses dois em algumas caractersticas, tais como velocidade, preciso, robustez e funcionalidade, o que conseguido atravs do uso das rotinas de nvel trs do BLAS, alm de possuir um maior nmero de rotinas para operaes de lgebra linear.

O LAPACK vinha apresentando um grande sucesso entre a comunidade cientca. No entanto, ele no apresentava um bom desempenho em computadores de memria distribuda e essas mquinas vinham se tornando cada vez mais utilizadas. Surgiu ento a necessidade de se criar uma biblioteca que fosse parecida com o LAPACK, mas que oferecesse bom desempenho em computadores de memria distribuda. O desenvolvedores criaram ento o ScaLAPACK [3], que constitudo de rotinas que resolvem os mesmos problemas que as rotinas do LAPACK, alm de outras que fazem a comunicao e diviso das matrizes entre os processos. Para tornar o ScaLAPACK parecido com o LAPACK, foi criada a biblioteca de comunicao BLACS (Basic Linear Algebra Communication) [3, 4] alm do PBLAS (Parallel BLAS ) [3, 4]. Alm disso, o ScaLAPACK usa rotinas do LAPACK em algumas operaes seqncias nos diversos processadores. O captulo 4 descrever o ScaLAPACK em detalhes.

 

    

@  A

 

  

O modelo computacional de von Neuman foi fundamental no desenvolvimento dos computadores. No entanto, ele oferece certas limitaes que prejudicam seu desempenho, como o gargalo que surge no acesso memria. Isso ocorre porque h apenas um barramento de acesso, de forma que apenas um componente computacional pode ser acessado por vez (ver gura 2.1). Alm disso, o modelo sugere que o processador execute as instrues de forma seqencial, causando ociosidade em certos componentes, pois nem mesmo a tarefa de busca de uma instruo na memria e a execuo de outra, que so tarefas independentes, podem ser executadas em paralelo. Com o desenvolvimento de novas tecnologias, essas limitaes foram superadas e melhor desempenho foi obtido. Dentre esses avanos, podemos citar o uso de mltiplos registradores no lugar de um nico acumulador, uso de memria cache, pipeline de instrues e organizao superescalar. Estes dois ltimos fatores aumentaram o desempenho em um fator de dez em relao aos computadores puramente seqenciais [27]. Outro fator que possibilitou o surgimento de computadores mais rpidos foi a diminuio no tamanho dos transistores e o conseqente aumento da freqncia de clock. Com isso, o nmero de transistores nos processadores seguiu a famosa

 

 % $ )  3     

 

     ) # 

3 8 $8 33 " 3

!  " 

& 5 (6 #3 '

      

  

6 2 B& (

 

  R

 
&

A G 

  

"

lei de Moore [28], que diz que este nmero dobra a cada dezoito meses, conforme notamos na gura 2.2. No entanto, esse aumento limitado, pois os circuitos eletrnicos no podem ser melhorados indenidamente e a reduo do tamanho dos transistores ser limitada por barreiras fsicas, quando o nmero de tomos no transistor for to pequeno que efeitos qunticos passarem a ser importantes. Por exemplo, em um transistor de 0,07 m, cujo lanamento foi anunciado pela Intel para 2005 [29], cada um dos trs terminais que compe um transistor ter apenas trs tomos de cobre de espessura. Desta forma, o sinal eltrico para mudar o estado do transistor ser composto de apenas algumas dezenas de eltrons. Com transistores deste tamanho, a Intel espera chegar a 15 Ghz de freqncia de clock at 2007 [29]. Transistores menores do que 0,07 m pertencero computao quntica, ainda pouco desenvolvida. Alm dessa limitao que tende a atrapalhar o avano dos computadores seqenciais. temos o fato de que a velocidade de acesso memria no cresce no ritmo da lei de Moore.

        

 

)

   

  

     # )           

   

 

   %    

R   R

 

A G 

Apesar de todo esse avano na tecnologia dos computadores seqenciais, eles no conseguem suprir a necessidade de poder computacional que certas reas cientcas exigem. Aplicaes em fsica, qumica ou engenharia, como as simulaes de fenmenos qunticos, construo de modelos climticos ou mesmo no projeto de aeronaves, tm uma demanda por poder computacional que essas mquinas no oferecem [30]. Com isso, uma soluo encontrada para satisfazer essa demanda so os computadores paralelos [31]. Segundo Almasi [32] "um computador paralelo uma coleo de elementos de processamento que se comunicam e cooperam na resoluo de grandes problemas de forma rpida". Desta forma, enquanto que nos computadores seqenciais a velocidade do processador o principal fator na determinao do desempenho, nos computadores paralelos este apenas um dos fatores. Alm disso, os computadores paralelos podem agregar recursos de computadores seqenciais, como o caso dos clusters. Assim, ao invs de se tentar construir um computador com um nico processador cujo perodo de processamento seja de 0,001 ns, pode-se usar uma mquina paralela com 1000 processadores, tendo eles um perodo de 1 ns cada, que uma tarefa mais simples. Neste contexto, Flynn deniu em 1972 uma classicao para os modelos computacionais baseada em dois conceitos, seqncia de instrues e de dados [27], que dividida da seguinte forma: SISD - Single instruction stream, single data stream: Um nico processador executa uma nica seqncia de instrues, usando dados armazenados em uma nica memria. Um computador de um nico processador pertence essa categoria. SIMD - Single instruction stream, multiple data stream: Uma nica instruo de mquina controla a execuo simultnea de um certo nmero de elementos de processamento em passos de execuo. Cada elemento de

   

 

 

processamento possui uma memria de dados associada, de forma que cada processador executa as mesmas instrues sobre dados diferentes. Os computadores vetoriais pertencem a essa categoria. MISD - Multiple instruction stream, single data stream: Um conjunto de dados transmitido para diferentes processadores e cada um deles executa diferentes operaes sobre ele. Uma arquitetura desse tipo nunca foi implementada. MIMD - Multiple instruction stream, multiple data stream: Mltiplos dados so transmitidos para diferentes processadores que realizam diferentes operaes sobre eles. Os clusters pertencem a essa categoria. Na gura 2.3 mostrada a taxonomia dos computadores levando-se em conta a organizao sugerida por Flynn. Os modelos SIMD possuem vrias unidades lgicas e aritmticas que podem executar um mesmo conjunto de operaes sobre diversos dados em paralelo. Seu desenvolvimento foi impulsionado pela necessidade de aplicaes cientcas que requerem operaes sobre matrizes e vetores com grande nmero de elementos [33].


  )  

  ' 

  

  

  



 

     

$

 

T R   SA G

 


 

Os primeiros computadores vetoriais foram fabricados em 1976 pela Cray Research, inicialmente com o Cray-1 e depois com o C90 e T90. Esse tipo de mquina dominou o mercado da computao cientca durante dcadas. No entanto, devido ao alto custo, e ao aumento no desempenho de computadores seqenciais, que podem ser usados na construo de mquinas paralelas, seu uso tornou-se limitado. Hoje, so poucas a empresas que ainda produzem este tipo de mquina. O ltimo computador paralelo que utiliza processamento vetorial que apresentou grande sucesso foi o Earth Simulator [34] (ver gura 2.4). Este computador, construdo pela NEC e localizado no Japo, apresenta uma performance superior a 35 Top/s e o que possui maior poder computacional atualmente [35]. Na tabela 2.2 mostrada uma tabela com os computadores mais rpidos do mundo ao longo do tempo. No caso dos modelos MIMD, temos os computadores de memria compartilhada (multiprocessadores) e de memria distribuda (multicomputadores), conforme observamos na gura 2.3. No primeiro casos temos, por exemplo, alguns tipos de workstations e no segundo os clusters. Um multiprocessador um sistema que possui vrios processadores e apenas um espao de endereamento visvel a eles, ou seja, todos os processadores tm acesso a todos os mdulos de memria e aos dispositivos de entrada e sada. Um

 

      #      

        R

   

 

A HG

 

fator encorajador no uso dessas mquinas a facilidade de se escrever programas para elas, sendo que em alguns casos esses podem ser idnticos aos seqenciais. No entanto, algumas limitaes de desempenho desfavorecem seu uso [36]. J nos multicomputadores, temos diversos ns que so compostos por uma memria local e uma ou mais unidades de processamento ligados por uma rede de interconexo de alta velocidade. O nmero de unidades de processamento pode variar, dependendo da mquina os supercomputadores MPPs (Massively Parallel Processors) podem ter milhares de unidades de processamento. Essas mquinas so bastante caras, podendo custar alguns milhes de dlares e geralmente apenas alguns laboratrios de pesquisa no mundo possuem tais modelos. Com o avano no poder de processamento dos computadores e na velocidade das redes de conexo, como a Ethernet ou ATM, surgiram os clusters, que so compostos de algumas dezenas ou centenas de computadores pessoais, ou estaes de trabalho, interligados por uma rede de alta velocidade. O fator que impulsiona o uso dessas mquinas a relao custo/desempenho, que pode ser de trs a dez vezes melhor do que um supercomputador tradicional [36]. Um cluster pode ser denido como um grupo de computadores completos interconectados, com um sistema operacional distribudo, trabalhando conjuntamente, podendo criar a iluso de ser uma nica mquina. Cada computador que compe o cluster chamado n e um computador completo, podendo operar

  

    

   

   

 

   

   SQI A  R A

 

 

normalmente, independente do cluster. Esses ns so compostos de um ou mais processadores e podem ter a mesma congurao (cluster homogneo) ou no (cluster heterogneo). Os clusters possuem certos benefcios devido ao seu tipo de organizao [33]. Escalabilidade absoluta: a congurao do cluster permite a construo de uma mquina com um nmero elevado de ns, podendo ser da ordem de milhares, ultrapassando a capacidade de computao das modernas mquinas individuais. Escalabilidade incremental: Novos recursos podem ser agregados ao cluster de forma facilitada, como mais ns ou uma rede de interconexo mais rpida, sem que os recursos antigos tenham que ser completamente desprezados. Alta disponibilidade: Como cada n um computador independente, uma falha em um deles no compromete a perda de servio, pois o tratamento falhas pode ser feito pelo software. Melhor relao custo desempenho: Devido ao avano dos recursos para computadores pessoais e reduo de preos destes, possvel construir um cluster com poder de computao igual ou maior ao de uma mquina de grande porte, com custo muito menor. Devido variedade de conguraes possveis, os clusters podem ser divididos em dois tipos. Um deles chamado COW (Cluster of Workstations) que so estaes de trabalho ou computadores pessoais espalhados por um prdio ou uma sala e interligadas por uma rede de alta velocidade. Geralmente os computadores so heterogneos e so utilizados em computao paralela apenas quando esto ociosos. O uso dessas estaes apenas nesta circunstncia pode implicar numa

   

 

 

migrao de tarefas e esta acrescenta uma complexidade no desenvolvimentos do software [27].

Outro tipo comum de clusters so os dedicados, conhecidos como Beowulf [37], que o nome do heri pico anglo-saxo de um poema escrito em ingls arcaico, de grande coragem, que derrotou um monstro chamado Grendel. Beowulf era um guerreiro de vivia na Finlndia e ao ouvir do monstro Grendel, que atacava o reino de Hrothgar, na Dinamarca, juntou quatorze guerreiros e juntos foram para

   

          

 

B      

 

 

            #              R A G   

   

 

 

 

l para tentar acabar com o monstro. Grendel era uma criatura bastante peluda, como um urso, maior que um homem e possua grande fora. Bewoulf o derrotou e depois voltou para a Finlndia, onde foi proclamando rei. Reinou por mais de cinqenta anos e morreu depois de ajudar a derrotar um drago naquele pas. Os beowulfs so constitudos, geralmente, de computadores homogneos e so dedicados, ou seja, no possuem teclados, mouses ou monitores, sendo que apenas o n servidor pode possuir tais recursos. O nico acesso ao n cliente feito via conexo remota pelo n servidor. Alm disso, eles esto ligados por uma rede privada e apenas o servidor pode ter acesso rede externa. Ao contrrio dos COWs, que geralmente so usados noite ou quando as pessoas no esto usando seus computadores, o Beowulf dedicado apenas a computaes paralelas e otimizado para esse propsito. Em nosso trabalho utilizamos um Beowulf de 16 ns dedicados, homogneos, sendo cada n um computador K6-III com 450 Mhz de freqncia de clock, 256 MB de memria SDRAM, com discos rgidos de 10 GB, e interconectados por uma switch de alta velocidade, Fast-Ethernet (100 Mb/s). Na gura 2.5 mostrado o cluster que utilizamos.

O desenvolvimento de softwares paralelos pode ser feito de duas formas bsicas, utilizando uma linguagem paralela ou utilizando uma linguagem seqencial conjuntamente com uma biblioteca paralela, que permita a troca de mensagens entre os processadores. Dentre as linguagens paralelas, pode-se usar linguagens funcionais, como a Haskell [38] e Sisal [39], ou linguagens lgicas, como o Prolog [40]. Essas linguagens evitam a seqencializao do cdigo, especicando apenas as relaes entre as operaes e no a ordem em que devem ocorrer. No entanto, o desen-

 

#   ! ' !  )(&$ # )(  ' !

   

 

 

volvimento de cdigo usando essas linguagens pode ser desencorajador, pois o programador tem que aprender uma nova linguagem. Alm disso, a extrao do paralelismo pode no ser simples em certos casos, pois o balanceamento de carga e o uso de granularidade grossa podem ser difceis de serem alcanados em certo problemas. A outra possibilidade vem se mostrando mais vivel, que a utilizao de uma linguagem seqencial e bibliotecas paralelas. Neste caso, cabe ao programador apenas aprender a manusear a biblioteca e usar a linguagem seqencial que preferir. H diversas bibliotecas que oferecem ao programador recursos para fazer a comunicao entre os processos. Umas delas o PVM (Paralell Virtual Machine) [41]. Outras so as que foram construdas segundo o padro MPI (Message Passing Interface) [42], tal como o MPICH [43] e o LAM [44]. Com isso, pode-se desenvolver softwares paralelos ecientes e bibliotecas paralelas especcas para determinadas computaes, como o ScaLAPACK, que uma biblioteca de lgebra linear que utiliza bibliotecas do padro MPI ou o PVM para fazer a comunicao (maiores detalhes no captulo 4).

MPI um padro de biblioteca de passagem de mensagem para sistemas paralelos. Seu desenvolvimento procurou fornecer uma interface comum a diversas plataformas, de forma que um programa possa rodar em uma mquina MPP ou mesmo em um COW. Assim, o padro MPI, denido pelo comit de padronizao MPI Forum [42], especica apenas a interface de programao e no a implementao, cando esta por conta do implementador. Os sistemas baseados na troca de mensagem devem ter no mnimo dois processos rodando independentemente e a comunicao entre eles feita atravs de rotinas

. Essa comunicao pode se dar de trs formas diferentes:

6 2 ) #&  "   8754310('%$#! 

   

@ I G@ D 8QPHA@HFE 8CBA@9

 

 

Troca de mensagem sncrona. Troca de mensagem com ajuda de um buffer. Troca de mensagem no-bloqueada. Na troca de mensagem sncrona, quando o transmissor realiza uma operao de envio ( cepo (

), ele ca bloqueado at que o receptor realize uma operao de re). Assim, que esta feita, ele continua a execuo do programa.

No caso da troca de mensagem com ajuda de um buffer, quando a mensagem enviada pelo transmissor, ela armazenada em um buffer at que o receptor a recolha. Desta forma, o transmissor no ca bloqueado, continuando a execuo do seu cdigo aps o

. No entanto, se o buffer estiver cheio, uma mensagem

de erro enviada pelo compilador. J o ltimo caso, o de troca de mensagem no-bloqueada, o transmissor pode continuar a execuo do cdigo aps a chamada

, no cando bloqueado em hiptese alguma. Se o envio no puder ser

feito no momento da chamada, o software informa ao sistema operacional que a chamada pode ser efetuada mais tarde, quando houver tempo.

Alm das rotinas de comunicao ponto a ponto, o MPI tambm fornece rotinas para comunicaes coletivas, como broadcast, barreira, coleta, distribuio, redistribuio, reduo e prexo. Para maiores informaes sobre as rotinas do MPI, ver [42]. O pacote MPI baseado em quatro conceitos bsicos: 1. Processos: o elemento bsico de computao em MPI. Um processo pode ser comparado a um programa seqencial em execuo, sendo que este pode se comunicar com outros processos atravs da troca de mensagens. Assim, em MPI temos diversos processos rodando em paralelo, cooperando para a execuo de uma determinada tarefa.

   

D FCBA@9

 

@8QPIA@8FE G@ D FCBA@9

DFCB@A9 D 8CBA@9

 

2. Comunicadores: so usados para interligar diversos processos, criando um conjunto de comunicao. Os processos que se comunicam devem estar associados a um mesmo comunicador. O comunicador padro usado pelo

comunicadores. Os processos associados a um mesmo comunicador so identicados pelo rank, que um inteiro que varia de 0 a P 1, sendo P o nmero de processos no comunicador. 3. Mensagens: As mensagens so os dados trocados entre os processos atravs das diretivas de comunicao, mais as informaes de identicao, que especicam o envelope da mensagem. Essas informaes denem os processos destinatrio e remetente, um inteiro denominado TAG, que utilizado para distinguir mensagens provenientes de um mesmo processo, e o comunicador utilizado. 4. Tipos de Dados: Os dados transmitidos na mensagem so de um determinado tipo (inteiro, ponto utuante, carter, etc.) e este tipo pode ser representado diferentemente em arquiteturas distintas. Desta forma, se um cluster for constitudo de ns com arquiteturas distintas, quando os dados so transmitidos de um n para outro, o MPI faz a converso automtica dos dados de forma que sejam tratados de forma correta. O MPI pode ser usados nas linguagens FORTRAN 77 e C. J o MPI-2, alm da linguagens mencionadas, pode ser usado em Fortran90 e C++. No nosso trabalho, utilizamos a primeira verso do MPI, denominada MPI1. Esta verso foi denida em 1995 e aperfeioada em 1997, com a denio do MPI-2 [45], que permite novas operaes, como suporte para processos dinmicos, que trata da criao e gerncia de processos como faz o PVM (Parallel Virtual Machine [41]), comunicao coletiva no bloqueada, entrada/sada esca-

  

MPI chamado

, sendo que o usurio pode denir outros




   

 

 

lvel, processamento em tempo real, etc. Ver [45] para maiores detalhes. Existem diversas implementaes para o MPI, pois o padro especica apenas a interface, conforme discutimos anteriormente. Desde o lanamento da primeira verso de MPI, em 1995, surgiram diversas implementaes para redes de estaes de trabalho [2], sendo que as mais utilizadas atualmente so a MPICH [43] e a LAM [44]. Elas so praticamente equivalentes e o uso bastante semelhante. Em nosso trabalho, usamos a implementao MPICH. Na utilizao do MPI fornecido ao programador um conjunto de rotinas que permite realizar a comunicao e sincronizar as operaes entre os processos. No entanto, o uso do MPI para tarefas complexas pode ser rduo e o programador tem que se preocupar com detalhes do MPI, como o instante que deve ocorrer comunicaes entre os processos, quais os tipos do dados a serem enviados, se a comunicao deve ser bloqueante ou no, entre outros. Esses detalhes atrapalham no desenvolvimento do cdigo, pois o programador tem que desviar a ateno do desenvolvimento do cdigo para detalhes de comunicao entre os processos. De modo a facilitar muitas dessas tarefas complexas, foram construdas algumas bibliotecas numricas paralelas, que usam MPI na sua implementao, cando seus detalhes escondidos do programador. Uma dessas bibliotecas o pacote ScaLAPACK, que foi rapidamente discutido nessa seo e ser apresentado em detalhes no captulo 4.

   

 

 

Aps a Segunda Guerra Mundial, de 1945 em diante, o uso de computadores na execuo de clculos matemticos se tornou comum. A partir da, muitos estudos foram feitos na obteno de algoritmos numricos para lgebra linear que oferecessem um resultado preciso e um tempo de execuo mnimo. Na sua construo, eles usam propriedades matemticas das matrizes de forma a facilitar o desenvolvimento do cdigo e conseguir softwares otimizados. Neste captulo, vamos introduzir conceitos gerais sobre matrizes tal como as operaes fundamentais, propriedades e problemas mais gerais, como os sistemas lineares. Alm disso, vamos mostrar como as propriedades das matrizes podem ser exploradas para a obteno de algoritmos ecientes. Finalmente examinaremos o uso das bibliotecas LAPACK e BLAS e do software Scilab.

lgebra linear numrica est estritamente relacionada a operaes sobre matrizes, que podem ser divididas em dois grupos. O primeiro consiste de operaes bsicas, tal como soma, multiplicao, transposio, etc. J o segundo, trata de sistemas de equaes lineares, problemas de autovalores e problemas de mnimos

   

 



" 

) (3 '




 

3 

6 
"

&' 02)

0 5

&
&

! $"


quadrados, que so mais complexos do que as operaes do primeiro grupo. Nas prximas sees vamos apresentar as notaes e as operaes algbricas que usam matrizes.

Os espao vetorial dos nmeros reais representado por R. Ns denotamos o espao de dimenso Rmn como sendo o das matrizes com m linhas e n colunas. Assim: AR
mn

A = (aij ) =

a11 . . .

. . . a1n . . .

am1 . . . amn

Os elementos aij so ditos elementos da matriz e podem ser reais ou complexos, sendo que neste ltimo caso o espao representado por C mn . Quando m = n, a matriz chamada matriz quadrada de ordem n. Nos casos especiais em que m = 1 ou n = 1, a matriz chamada matriz linha ou matriz coluna, respectivamente, sendo anloga a um vetor. No entanto, para o caso dos vetores, temos a seguinte notao: x Rn x = (x1 , . . . , xn ). Neste caso xi , i = 1, ..., n representam os elementos do vetor. Neste trabalho, vamos representar matrizes por letras maisculas (A, B, etc), vetores por minsculas (x, y, z, etc) e as quantidades escalares por letras gregas (, , etc). Algumas operaes bsicas sobre as matrizes podem ser vistas na tabela da gura 3.1 Denidas as operaes sobre matrizes, vamos apresentar as propriedades gerais de matrizes reais e complexas, que podem ser observadas a seguir: Adio comutativa: A + B = B + A.






  

  

EA

 

 

             

 


Lei distributiva: (A + B) = A + B.

Adio associativa: A + (B + C) = (A + B) + C.

Multiplicao no comutativa: geralmente AB = BA.

Multiplicao associativa: A(BC) = (AB)C = (AB)C.

Transposio: (A + B)T = AT + B T , (AB)T = B T AT . C A+B z x+y C AB xT y C A y Ax y x ||A||F ||x|| ||A||1 ||x||p A1 AT xT cij aij + bij z i xi + y i cij cij aij yi yi xi ( maxj maxi |xi | (
i j ij i k

Conjugao: (A + B) = A + B . xi y i aij xj |xi |p )1/p aik bkj |aij |2 )1/2


i

 

          

 

                    B                           B                      

    




    !

|aij |




 %

 

E P 

 

  T 

    P H C A A I A



  

  

Estas operaes so usadas principalmente na construo de bibliotecas bsicas de lgebra linear, como no caso do BLAS [21].

Alm das operaes vistas na seo anterior, pode-se usar certas propriedades das matrizes na construo de softwares numricos para lgebra linear. As matrizes podem ser classicadas de acordo com a distribuio de seus elementos ou mesmo quanto a certas operaes que apresentam simetrias, como no casos das matrizes simtricas. Esta classicao adotada pelos pacotes LAPACK e ScaLAPACK na construo de suas rotinas, e apresentada a seguir.

Uma matriz geral aquela que no apresenta uma estrutura especial de distribuio de seus elementos, bem como qualquer simetria. Desta forma, nenhum ganho na construo de softwares pode ser obtido usando uma distribuio de dados especial, sendo que o armazenamento deve ser feito no formato padro, usando um array bi-dimensional segundo a linguagem de programao.

Uma matriz de banda geral tem seus elementos no nulos organizados uniformemente ao redor da diagonal. Na gura 3.1 temos dois exemplos desse tipo de matriz. Como podemos ver, os elementos podem ser determinados por: a ij = 0 se (i j) > ml ou se (j i) > mu, onde ml e mu so as larguras de banda inferior e superior. A soma ml + mu + 1 a largura de banda total da matriz. No caso em que ml = mu = 1, temos uma matriz tridiagonal.


"

) " 43 '

A


 A

" #

A H

& 2 )

  




EA

EA

 

"


Numa matriz tridiagonal, seus nicos elementos no nulos esto na diagonal principal e nas duas diagonais vizinhas a ela. Assim, os elementos podem ser denidos por aij = 0 se |i j| > 1. Na gura 3.2 temos um exemplo deste tipo de matriz.

H dois tipos de matrizes triangulares, a triangular superior e a triangular inferior. Estas matrizes devem ter o mesmo nmero de linhas e colunas. Considerando uma matriz U triangular superior, seus elementos so denidos por uij = 0 se i > j.



 %    

  "



    

 

 

  

 ) '   

) 



 

              



               T A G  

A  P A

AI Q7G

 

A  

 R T

  

!

  

A G 

 

 

EA EA

J no caso de uma triangular inferior L, temos que seus elementos so denidos por lij = 0 se i < j. Na gura 3.3 temos esses dois casos. Quando os elementos da diagonal so iguais a um, a matriz chamada triangular unitria.

Uma matriz A dita simtrica se ela igual sua transposta, A = AT . Para isto, devemos notar que ela deve ser quadrada e os elementos aij deve ser iguais a aji .

Um caso especial de matrizes tridiagonais so aquelas so tambm simtricas. Assim, os elementos so dados por aij = 0 se |i j| > 1 e aij = aji se |i j| = 1. Na gura 3.4 temos esse tipo de matriz.

 
 


      

 

  

                       

 

                                    T A G

      

                         $ T T A G   

A  P A

A  E

A  E



  


 

EA EA

As matrizes hermitianas obedecem propriedade de ser igual transposta da sua conjugada. Assim, para uma matriz A ser hermitiana, ela deve obedecer a relao: A = (AT ) = A .

Uma matriz simtrica ou hermitiana obedece s relaes apresentadas anteriormente. No caso de elas serem de banda positivas denidas, o valor denido por xT Ax (ou x Ax no caso das hermitianas) positivo para todo vetor x no nulo.

Uma matriz simtrica (ou hermitiana) tridiagonal A positiva denida se o valor xT Ax (ou x Ax no caso complexo) positivo para todo vetor no nulo x.

Se a transposta de uma matriz A igual sua inversa A1 ela dita ortogonal (AT = A1 ). Desta forma, AT A = AAT = A1 A = AA1 = I, onde I a matriz identidade, que tem os elementos da diagonal principal iguais a um e os outros elementos iguais a zero (aij = 0 se i = j e aij = 1 se i = j).

Se a transposta da conjugada de uma matriz complexa A igual sua inversa, ela dita unitria (A = (AT ) = A1 ).


A
 

A 7

 

A E P C

A E P SA C

A  P A

7  A

E A A E 

A A E 

G P A

G P A

A  7A E

A  P HP PE

 E

 E


A


E  G

  


    

EA EA EA EA EA

Uma matriz trapezoidal essencialmente uma matriz retangular. Nos casos especiais em que aij = 0 se i > j e aij = 0 se i < j, ela dita trapezoidal superior ou trapezoidal inferior, respectivamente.

Matrizes esparsas so aquelas em que a maioria dos seus elementos so zero e os elementos no nulos no obedecem a nenhuma distribuio especial dentro da matriz.

Alm desses tipos de matrizes, podemos ainda ter um classicao por blocos de acordo com a congurao destes. No entanto, como esse tipo de distribuio no usada pela nossa biblioteca, vamos assumir essas matrizes como sendo gerais.

Nesta seo vamos discutir algumas operaes mais complexas que podem ser executadas sobre matrizes. Essas operaes so todas suportadas pelo pacote ScaLAPACK.


"

) " 83 '

" 9

&

"

"

30 7))



"  8 9 33

  

  
"

EA

5 " (3 2

P C H E A A )  A C

 

P C E

 
 

PE G

EA EA

" 

Um sistema de equaes lineares constitudo por um nmero nito de equaes lineares que pode ser expresso por

a11 x1 + a12 x2 + . . . + a1j xj + . . . + a1n xn = b1

am1 x1 + am2 x2 + . . . + amj xj + . . . amn xn = bm

Nestes sistemas, a11 , a12 , . . . , amn , b1 , b2 , . . . , bm so valores constantes. As incgnitas do problema so dadas por x1 , x2 , . . . , xn . Este sistemas pode ser convenientemente escrito com o uso de matrizes e vetores,
a11 a21 Ax = b . . .

a12 a22 . . .

. . . a1j . . . a1j . .. . . .

am1 am2 . . . amj . . . amn

. . . a1n . . . a2n . .. . . .

xn

x1 x2 . = . .

bm

b1 b2 . . .

Sistemas lineares possuem diversos mtodos de resoluo, sendo os mais comuns o que usa fatorizao LU, mtodo de eliminao de Gauss-compacto, mtodo de Cholesky, eliminao de Gauss com pivotamento parcial, etc. Estes mtodos podem ser vistos em [25, 46].

Autovalores e autovetores esto presentes em muitos problemas matemticos, fsicos, de engenharia, qumica, etc. Na fsica por exemplo, os autovalores e autovetores aparecem em problemas de mecnica quntica, onde a aplicao de operadores a matrizes que descrevem o problema resultam nos auto-estados (autovetores) e energias (autovalores) do sistema [47].

a21 x1 + a22 x2 + . . . + a2j xj + . . . + a2n nn = b2 . . . .. .. . . . . . . . .

# 4(!  #  1  '  6    !  !  # # )(" !  # 4(!  '      '   




  

  

 

 

Dada uma matriz A, n n, um vetor x chamado autovetor de A se o produto Ax um mltiplo de x e x tem ao menos um elemento no nulo, isto : Ax = x para algum escalar . Este valor escalar chamado autovalor de A, e x dito autovetor de A correspondente a . Mtodos numricos para encontrar os autovalores e autovetores de matrizes podem ser vistos em [25, 46]. Em [46] so apresentadas rotinas computacionais do pacote LAPACK que permitem efetuar essas operaes numricas.

Dado um sistema de equaes lineares Ax = b de m equaes em n variveis com n m, devemos achar um vetor x que minimiza ||Ax b||2 Os mtodos de obteno da soluo podem ser vistos em [25].

Como vimos na seo 2.1.1, a construo de softwares numricos pode seguir trs passos bsicos. Outro fator importante que deve ser considerado, no caso de bibliotecas paralelas, quanto forma de distribuio da matriz. Esse tpico ser abordado no captulo 4 da dissertao.

Conforme j discutimos anteriormente, o BLAS uma biblioteca que possui rotinas para operaes bsicas de lgebra linear. Uma lista completa das rotinas pode

 
"

& )) 0

"  ( 6 " 

#  !' ! #  47 1 6

38 $))

"   33 ' &

  


"

 &

875 &6

 7 # 14' !   

 !

  

   

6 "

'

" 



&

&

"

"


 

ser vista em [21]. O seu uso bastante simples, sendo necessrio ao programador apenas instalar a biblioteca, escolher as rotinas a utilizar de acordo com os tipos de dados e o problema em questo, e denir os parmetros de entrada da rotina. Na gura 3.5 mostrado um programa em linguagem C++ que utiliza a biblioteca BLAS (verso em Fortran). A operao realizada pelo programa dada por: y = Ax + y. Assim, denida a matriz A e os vetores x e y e chamada a funo

, do nvel 2 do BLAS, que executa a operao desejada armaze-

nando o resultado no vetor y. Note que a chamada feita usando o carter _ aps o

linguagem FORTRAN 77, sendo usada por um programa escrito em linguagem C++.

, sendo

o nome do pro-

grama e

o arquivo que contm a biblioteca BLAS, que pode ser

obtido em [22], onde h disponibilidade para diversas arquiteturas computacionais. No caso do LAPACK, o processo anlogo, sendo necessrio ao programador instalar o pacote LAPACK (disponvel em [48]), denir as rotinas a serem usadas de acordo com os tipos de dados e das matrizes, e denir os parmetros de entrada das rotinas do LAPACK. Outra maneira de tratar-se problemas numricos utilizando o software cientco Scilab [15]. Este um ambiente de programao bastante amigvel desenvolvido pelo instituto INRIA, localizado na Frana. Ele vem apresentando sucesso entre a comunidade cientca devido aos seguintes fatores: 1. A sintaxe usada na construo de programas bastante simples, 2. o Scilab possui centenas de funes matemticas pr-denidas que facilitam o desenvolvimento do cdigo pelo programador,

Para se fazer a compilao do programa, usamos o seguinte comando:

G G 8 @  9 

 % #   ('&    % #            ('& $  " !    

9 9 H 8

nome da funo (

), pois a biblioteca, no exemplo considerado, escrita em

 



P @ FFD

P @ F8D

98 GG H 9

       3   

 



      

 

T HG A

92 f "  gi$$5" 2     xv  B x B    Bv B    g$&65$!eHA$b 2 }} X f $&edy!~ Q 5z " u n2 ksDX!y dd$s t5y tgtsp tgt$$$W dX tX aA$$U RG !$ ` ` W U ` x D X ` x` W v ` W` W r q p ` ` ` Y X W V Q P %  I F2 }} mt$! 8 2 fd S s x v y45wHg6 2 n2 fd x v g!45fHg6x E 2 }} X  d !edi5ek!~ Q 5z " 2 f yHw! x Xv  h    u  tnd$A$i&iw x Xv  h    u  ynw$A$i&iwx } } t$! { } x v !THA(W E u t }} X  d " !tisk~~$! Q z F }}{ X  { d { " s|tiw|l$i$ Q 5z 8 x X S Xv  h    u  y!nw$A$i&iwW 2 t s' f W r q p W ` q' f W U ` S ` xS ` WS  h   ggdHH$$$rggdHwspd!jt&od!i$A$5 n ` DXy ` d xDXy ` X Wvp ` fd X gfwwAmldeis!jkeHs!jdiHshg!eHH X Y X W V U " # ) $tgA$$HA E 9 Q A4$! # % Xy S ` S h  ` W S  h   5Ded!i$A$5gd$U$!i$5 ` D X S xS h  ` v p dx5!yT$!e`d!w$gtWsSfb`t!Si$5 W h u `tWsq$!Si$A$5gd!Sf$!ed!ST$b`aA$W$U!STA RG !$H!A G r p W  h  ` X ` c Y X V "# ) Q P %I  F EB DB " @ C$A$598 1 )' ) # %     76$54!32 1 )' % #  "       0(&$!



3. oferece uma interface grca e instrues que permitem a manipulao de grcos em duas ou trs dimenses, 4. possui uma linguagem de alto nvel que facilita o tratamento de matrizes, sendo tal sintaxe anloga usada pelo Fortran90, 5. permite a manipulao de estruturas de dados, polinmios, nmeros racionais, nmeros complexos, matrizes esparsas, operaes bsicas de manipulao algbrica, rotinas para tratamento de sinais e imagens, etc, sendo que todas elas possuem uma interface de uso simplicada, 6. o Scilab pode ser intefaceado com outras linguagens, como C e Fortran, e pode gerar cdigos em Fortran, 7. um software de domnio pblico. Na gura 3.6 temos um exemplo de um programa do Scilab, que realiza a mesma operao que o programa da gura 3.5, y = Ax + y.

 



 

     3 

tS4$$iw!!4siw WU } @SWSWrqpW yfd& c d Q Ssi c d Q g!4&lc d Q c d Q 3 fd @  59   {} g&T { R Q W ` c si5z d { " u c d !~z F " gg'tww$$$38 s f WrqpW ag'dfwHs(2 q WU fd c yeit

 

$   SH G  T A



Apesar de todas essa vantagens, o Scilab possui alguns aspectos negativos que prejudicam seu uso. Um deles, talvez o principal, quanto ao seu desempenho. Como ele utiliza tcnicas sosticadas de interpretao ele no pode oferecer um bom desempenho em relao a alguns compiladores clssicos, podendo ser essa perda de at dez vezes no tempo de execuo. No entanto, em certos problemas essa limitao pode ser contraposta pela facilidade de desenvolvimento do cdigo. Muitos estudos de tcnicas de otimizao do Scilab esto sendo implementadas. Outra alternativa, a verso paralela do Scilab que est sendo desenvolvida pelo Ouragan Project, o Scilab// [49].



O ScaLAPACK [3] uma biblioteca de lgebra linear desenvolvida para computadores de memria distribuda. Seu desenvolvimento foi baseado no LAPACK, que conforme discutido no captulo 2, uma biblioteca de lgebra linear usada em computadores seqenciais, vetoriais ou de memria compartilhada. O ScaLAPACK usa passagem de mensagens na comunicao entre os processos e as implementaes existentes permitem o uso da biblioteca PVM [41] ou das bibliotecas baseadas no padro MPI [42], tais como MPICH [43] e LAM [44]. Essas implementaes foram construdas em linguagem FORTRAN77 e esperase o desenvolvimento em C++, tal como anunciado em [24]. No entanto, esse fato no restringe o ScaLAPACK a ser usado apenas em programas na linguagem FORTRAN77. Neste captulo vamos discutir detalhadamente muitos aspectos dos ScaLAPACK, apresentando nas prximas sees sua organizao e as suas bibliotecas auxiliares. Discutiremos conceitos como a distribuio de dados e os aspectos de organizao e convenes sobre suas rotinas.

 

" 

 

O ScaLAPACK possui rotinas que podem ser usadas na construo de programas para a resoluo de equaes lineares, problemas de mnimos quadrados, de autovalores e de valores singulares. Para efetuar essas operaes, ele usa algumas bibliotecas auxiliares que permitem a troca de mensagem entre os processos bem como a execuo de operaes locais. Na gura 4.1 so mostradas as diversas bibliotecas usadas pelo ScaLAPACK no seu funcionamento.

No desenvolvimento do LAPACK, foi utilizada a biblioteca BLAS, conforme discutimos no captulo 2. Como a inteno dos implementadores era tornar o ScaLAPACK parecido com o LAPACK, foi criada uma verso paralela do BLAS,

 


          %                                 

  

3 $33  & ) )8

0 6 5 

  

      

" 7' %" 6 6

    

'"

  

 

A G 

! $"

 

chamada PBLAS (Parallel BLAS), que constituda de rotinas de lgebra linear bsicas, tais como as oferecidas pelo BLAS, com a diferena que suas operaes so realizadas em paralelo com auxlio da biblioteca BLACS, que faz a passagem de mensagem, e do BLAS, usado nas computaes locais. As rotinas do PBLAS podem ser utilizadas independente das rotinas do ScaLAPACK em computaes que exijam operaes bsicas de lgebra linear. Elas so divididas em trs nveis, de acordo com as operaes: Nvel 1: Operaes vetor-vetor: y = x + y Nvel 2: Operaes matriz-vetor: y = Ax + y Nvel 3: Operaes matriz-matriz: C = AB + C Esse nveis so os mesmos que os nveis do BLAS, conforme discutidos na seo 3.5. A lista de rotinas do PBLAS pode ser vista em [50].

O BLACS (Basic Linear Algebra Communication Subprogram) [51, 52] uma biblioteca de comunicao especialmente desenvolvida para lgebra linear. Em seu modelo computacional, o BLACS considera que os processos esto distribudos de acordo com uma grade de duas dimenses (como uma matriz), permitindo que os processos troquem mensagens entre si de forma sncrona. Alm dessas comunicaes ponto a ponto entre os processos, o BLACS permite operaes coletivas, como broadcast e reduo global. Suas rotinas utilizam bibliotecas de passagem de mensagem tais como o PVM ou o MPICH nas suas implementaes. Em um mesmo programa, permitido criar-se diversas grades de processos, onde estes se comunicam via um contexto associado a cada grade. A formao da grade feita pela chamada das rotinas do BLACS que discutiremos na seo 4.2.

  

      

    

O ScaLAPACK tem um modo particular de fazer a distribuio de matrizes e vetores entre os processadores que especicada pelo programador na chamada das rotinas. Essas rotinas de distribuio so especcas para trs tipos bsicos de matrizes: 1. In-core Dense matrices: Matrizes densas que podem ser alocadas totalmente na memria das mquinas, 2. In-core Narrow matrices: Matrizes de banda e tridiagonais que podem se alocadas totalmente na memria das mquinas, 3. Out-of-core matrices: Matrizes que no podem ser alocadas totalmente na memria, necessitando que parte seja armazenada em disco. O armazenamento local das matrizes feito com o uso de arrays convencionais. O modo como as matrizes esto armazenadas bem como o tipo de armazenamento para diferentes matrizes passado s rotinas via um array de inteiros chamado array descriptor, que ser discutido na seo 4.2.3.

Uma necessidade inicial do ScaLAPACK que os dados globais (matrizes e vetores) sejam distribudos entre os processadores. Assim, os dados globais so mapeados na memria local assumindo uma distribuio especca, sendo que o dado local referenciado como um array local. Este mtodo maximiza a razo entre operaes de ponto utuante e referncias memria capacitando o reuso de dados tanto quanto possvel enquanto ele armazenado nos nveis mais altos de hierarquia de memria (caches de alta velocidade, registradores vetoriais, etc).


" #

& 3 #& 87$) " &65


6

#   # 0 #   6  " & 4  

         

) " ' ) "

     

 

"

Essa especicao da distribuio muito importante no uso do ScaLAPACK, pois algumas rotinas necessitam de um tipo especco de distribuio, tais como as de resoluo de sistemas lineares densos, que exigem uma distribuio blococclica de uma ou duas dimenses, ou as rotinas de resoluo de sistemas lineares de banda e tridiagonais, que assumem que todo o dado global foi distribudo usando uma distribuio bloco-cclica de uma dimenso.

O ScaLAPACK usa um tipo especial de distribuio dos processadores, assumindo que P processadores, que sero usados na execuo do programa, esto distribudos em uma grade Pr Pc , sendo que Pr o nmero de linhas na grade e Pc o nmero de colunas. Por exemplo, se temos oito ns em um cluster, podemos montar uma grade com Pr = 2 e Pc = 4, conforme a gura 4.2. A inicializao da grade de processadores utiliza as rotinas do BLACS. Por

na gura 4.2. Outra maneira de fazer esse mapeamento usando a funo

, que uma forma mais geral, que permite ao programador denir

como os processos sero mapeados na grade [51]. Na comunicao entre os processos o ScaLAPACK usa o conceito de contextos (contexts), onde cada grade de processadores est includa em um ou mais

 

# $ 

exemplo, a funo

assume uma ordenao dos processos como


      

     

# 47# # "4$ 7 )' '  !   '   !

 

 3 

 

        

 R 

     

  

A G 

contextos. Na verdade, estes contextos tm a mesma funo que os comunicadores em MPI, que associam um grupo de processos e estes s podem se comunicar usando o contexto denido. Em uma aplicao, pode-se ter mais de um contexto, sendo que um processo pode fazer parte de diversos desses. Assim todos os processos da grade podem se comunicar por meio do contexto que foi associado a ela ou por outro que foi associado a um grupo de processos na grade, como no caso de termos um contexto para comunicao entre os processos coluna na grade. A criao dos contextos pode ser feita usando as rotinas do BLACS, tais como e

, sendo que ao trmino do uso, devemos li-

O ScaLAPACK necessita de um mapeamento entre o array global e a forma como ele mapeado na memria local dos processadores. Para isso, ele usa descritores (array descriptors), que so vetores de inteiros que armazenam informaes sobre o mapeamento da matriz global na grade e sobre o tipo de dados da matriz, bem como outras informaes. Esses descritores so fornecidos para matrizes densas, matrizes de banda tridiagonais e matrizes out-of-core. Na documentao das rotinas, as entradas no descritor so denotadas com o

de uma matriz global , ento o parmetro que dene esse valor no descritor ser

O tamanho deste descritor denotado pelo parmetro de acordo com o tipo da matriz:

Matrizes Densas:

= 9,

# 

# 

denotado por

. , cujo valor dado

uso de _ aps o nome global da varivel. Por exemplo, se

o nmero de linhas

berar os recursos utilizados usando as rotinas

ou

 
% 

%  

  

 "26 2 (2 ) (  (2

        

#  

     

O tipo da matriz a que o descritor associado denido pela sua entrada

, que pode ter os seguintes valores:

(right-hand-side),

Com estes conceitos introduzidos, vamos a seguir discutir as matrizes densas in-core e as matrizes de banda estreita e tridiagonais in-core . As matrizes do tipo out-of-core no sero discutida neste trabalho, pois estivemos interessados apenas em fazer uma implementao inicial da biblioteca e o nosso objetivo principal foi mostrar as facilidades que a orientao ao objeto oferece. Detalhes sobre as out-of-core podem ser vistos em [3].

Na distribuio das matrizes na grade de processos, o ScaLAPACK assume uma forma de distribuio cclica em uma ou duas dimenses, sendo possvel a obteno de escalabilidade e balanceamento de carga [3]. Nas prximas consideraes, vamos numerar os processos de 0 a (P 1) e as linhas ou colunas da matriz de 1 a N .

2 F! 6 $#"

# ! 6 7 # ")' ! #   

calizada no diretrio

do cdigo fonte do ScaLAPACK.

A inicializao dos descritores feita usando a rotina

# $ 

  

  

= 1 : matrizes densas, = 501: matrizes de banda estreita e tridiagonal, = 502: matrizes de banda estreita e tridiagonal de lado direito

= 601: matrizes out-of-core. , que ca lo-

Matrizes out-of-core:

= 11.

Matrizes de banda estreita e tridiagonais:

= 7,

 

# 

# 

        

     

Inicialmente, vamos considerar uma distribuio bastante simples, que a distribuio por colunas em uma dimenso, conforme a gura 4.3(a). A coluna K armazenada no processo K/NB onde NB = N/P o nmero mximo de colunas por processo. Em alguns casos este mtodo no oferece um bom balancemento de carga, pois quando cada processo termina sua computao sobre o bloco-coluna que recebeu, ele ca ocioso. No caso de fazer essa distribuio por linha teremos o mesmo problema.

Um segundo mtodo seria fazer uma distribuio por colunas da matriz de forma cclica, ou seja, cada coluna associada a um processo. Podemos ver essa distribuio na gura 4.3(b). Assim, a coluna K vai estar no processador (K 1) mod P . Neste caso, como so armazenadas simples colunas ao invs de blocos, no se pode usar os nveis 2 e 3 do BLAS, havendo perda de desempenho. Uma maneira intermediria entre os dois mtodos anteriores usar uma distribuio bloco cclica com blocos de tamanho NB , conforme a gura 4.4(a). Neste caso, a coluna K armazenada no processo (K 1)/NB mod (P ). No caso de NB > 1, temos um balanceamento de carga pior do que no caso anterior, mas podemos usar os nveis 2 e 3 do BLAS para computaes locais.

  





    3    



  

      

        

   

  T

     

   

A G 




Uma outra forma de distribuio usando blocos bidimensionais da matriz global, de forma cclica. Cada bloco tem tamanho MB NB , sendo estes valores determinados pelo usurio. Na gura 4.4(b) mostrado um exemplo com N = 16, P = 4, e MB = NB = 2.

Esta distribuio permite o uso dos nveis 2 e 3 do BLAS, oferece bom balanceamento de carga e assegura propriedades de escalabilidade. No caso das matrizes densas, vamos assumir que o mapeamento usado no ScaLAPACK ser o de blocos bidimensionais distribudos ciclicamente.

O ScaLAPACK tem algumas regras que associam os ndices da matriz global aos ndices locais localizados nos processos. Assim, se temos, por exemplo, uma array de comprimento N armazenados em P processos, este dividido em blocos de tamanho NB , sendo que caso N no seja divisvel por NB , o ltimo bloco

 

P I D P QI P E  P

 



A C A

I A PI P E 

NB

     #  !

 
                                


     

          '                             3         

        

  

       )           

     

  

 

A G 
A 7 A

do array conter N mod NB elementos. Desta forma, se o processo 0 recebe o primeiro bloco, o J-simo bloco est localizado no processo J mod P . Se temos um array global indexado por I, seu mapeamento pode ser denido pela equao 4.1.

I = (lP + p)NB + x,

sendo que I o ndice global no array, l a coordenada do bloco local no qual estas entradas residem, p a coordenada do processo proprietrio daquele bloco e x a coordenada dentro do bloco onde a entrada do array global I foi baseada. Na gura 4.5 temos um exemplo onde estes parmetros so mostrados.

Assim, temos p= l=
I1 NB

mod P,
I1 P NB

x = [(I 1) mod NB ] + 1.

Com estas equaes podemos determinar informaes locais, sendo possvel o acesso a posies locais da matriz distribuda atravs dos ndices globais. Desta forma, podemos determinar o ndice local com lNB + x e as coordenadas do

   

 

 

 

 

3 

 

   3 

        
 

$    

     

A G 

processo P correspondente entrada global indexada por I, bem como fazermos a operao inversa. Por exemplo, se N = 16, P = 2 e NB = 8, temos o esquema da gura 4.6. J na gura 4.7 temos o mesmo nmero de processos e um vetor do mesmo tamanho, mas com NB = 1.

NB

NB

H uma maneira mais geral de fazermos esta distribuio, onde esta no pre-

cisa iniciar no processo 0, mas pode comear a ser feita num processo arbitrrio, que pode ser denotado por SRC. As equaes para determinarmos os parmetros so: p = (SRC + l= x=
I1 NB I1 P NB

) mod P, ,

[(I 1) mod NB ] + 1.

Na gura 4.8, temos um exemplo que usa P = 2, N = 16, SRC = 1 e NB = 3.

    

 

 

 

  

  

 

 

  

  

          

  

  

     
     

A G  A G 

 

Para o caso bidimensional, as equaes que denem o mapeamento so um pouco mais complexas, sendo necessrios dois ndices para determinar os elementos das matrizes. Deste modo, uma matriz de dimenso M N , particionada em blocos de tamanho MB NB , tem o primeiro bloco associado ao processo de coordenadas (RSRC, CSRC) na grade, onde RSRC dene a coordenada-linha da grade e CSRC dene a coordenada coluna da grade, onde iniciada a distribuio dos blocos. As associaes entre as coordenadas globais e locais da matriz dada pelo seguinte conjunto de equaes: (l, m) = (pr , pc ) = ((RSRC + (x, y) =
I1 MB

I1 Pr M B

J1 P c NB

)
(J1) (NB )

) mod Pr , (CSRC +

) mod Pc )

([(I 1) mod MB ] + 1, [(J 1) mod NB ] + 1).

Nestas equaes, (l, m) denem as coordenadas dos blocos locais, (p r , pc ) so as coordenadas do processo na grade de processos, e (x, y) so as coordenadas dentro do bloco onde a entrada da matriz global (I, J) foi baseada. Desta forma, a matriz global quebrada em blocos de tamanho M B NB e distribuda na grade de processos de forma cclica. Na gura 4.9, temos um exemplo para M = N = 5, MB = NB = 2 e uma grade Pr = Pc = 2. Vemos que a distribuio iniciou no processo zero e que os blocos da matriz no tem

NB

    

 



 

  

         

  

     
  

A G 

 

tamanhos iguais, sendo que alguns tem tamanho menor. Para determinarmos o nmero de linhas e colunas que cada processo recebe, recorremos ao clculo de LOCr e LOCC , que revelam estes valores locais.

LOCr LOCc

Pr
N +NB 1 NB

MB

Pc

+ Pc 1

NB .

ScaLAPACK.

O descritor usado para as rotinas de resoluo de sistemas lineares e problemas de autovalores. Na tabela 4.1 temos os parmetros do descritor. Os valores de entrada no descritor so denidos pelo usurio e so armazena-

Para um melhor entendimento dessa distribuio, vamos mostrar um exemplo de como feita a distribuio de uma matriz entre os processos em uma grade.

dos usando-se a rotina

do ScaLAPACK.

Estas quantidades pode ser automaticamente calculadas pela rotina

  

do

M +MB 1 MB

+ Pr 1

55

22


  #
 

 

"' % 010)(&



 3 

 

E A

# 

        

A A H 7C

 

"  $#!

  

     

A H G

              %           
 %

 

       

                                                     !     

 



   






!



 

   

  





 

 

          $ !                             B      $                 #                         !  A   E A H 7C  E  H  A A P A               A I A  

 P      

   



        

 






A

NB

M AX(1, LOCr (M A))

LLD A

    

 

 

 

 

 


!

     

Vamos considerar que temos 6 processadores que compem uma grade 2 3, previamente criada com o uso das rotinas do BLACS, conforme discutimos em 4.2.2. A matriz utilizada quadrada de tamanho 9 9 e os blocos usados na distribuio tm dimenso 2 2, conforme mostrado na gura 4.10.

99

22

23

O nmero de linhas e colunas que cada processo possui dado pelos valores de LOCr e LOCc , calculados pela equaes 4.11 e 4.12. Os valores calculados esto na tabela 4.2. O valor de LLD_ (leading dimension of the local array) utilizado para o processo saber o nmero de linhas que ele deve somar posio atual para ir para a prxima coluna da matriz, pois ela armazenada localmente na forma de um vetor unidimensional. No caso de utilizarmos a linguagem C ou C++, o nmero de colunas, uma vez que o armazenamento nestes casos feito por linhas e no por colunas, como na linguagem FORTRAN. Logo, no caso da tabela 4.2, LLD_ dado pelo nmero de linhas em cada bloco local, uma vez que estamos

 

 $0)(& "' %
  

  %   

EA



   

        



G  ) E

   

        A G 

     
QI  P

considerando o caso da linguagem FORTRAN. LLD LOCr LOCc


  
   

O ScaLAPACK usa algumas convenes de forma a facilitar o armazenamento dos dados e diminuir o acesso a eles tanto quanto possvel, aproveitando propriedades matemticas de matrizes e vetores. Deste modo, para matrizes densas no-simtricas, simtricas ou hermitianas, temos diferentes formas de acesso. Para matrizes simtricas ou hermitianas, apenas a parte triangular superior ou triangular inferior da matriz acessada. Na chamada das rotinas do ScaLAPACK, o parmetro deve ter seu valor denido em

para acessar apenas

a parte superior (upper) ou

para usar apenas a parte inferior (lower)

da matriz. Caso a matriz seja triangular unitria, ou seja, possua os elementos da diagonal iguais a um, denimos o parmetro tambm no sero acessados.

, e esses elementos

Caso tenhamos uma matriz hermitiana, que tem a propriedade de ser igual sua transposta conjugada (A = A ), os elementos da diagonal so todos reais, sendo que sua parte imaginria assumida ser zero e no necessrio qualquer

  #  

 "  

PE 

A 7 A

LLD

LOCr (M )

LOCc (N )



#

   

A  P

  

   

        

 

# # # #  #   # 

   R

  

P

  

A I A

     

G I

acesso a ela.

As matrizes de banda estreita (narrow band) e tridiagonais usam o tipo de distribuio bloco-coluna ou bloco-linha, sendo que, especicamente, a narrow band e a tridiagonal usam a bloco-coluna, e a matriz densa de lado direito (right-handside), bloco-linha. No caso das matrizes de banda estreita, algoritimos de diviso e conquista so utilizados, pois oferecem maior escopo na explorao do paralelismo. Alm disso, elas so particionadas em blocos (como as triangulares), e o paralelismo ca limitado pelo nmero de blocos, pois estes so processados de forma independente. Logo, necessria uma escolha do nmero de blocos ao menos igual ao paralelismo desejado [3].

Conforme j discutimos, o ScaLAPACK assume uma distribuio bloco-coluna para as rotinas que operam sobre matrizes densas e triangulares, onde so usados algoritimos de divisao e conquista. Na gura 4.11 so mostradas as distribuies por bloco-linha e bloco-coluna. Assumimos que os processos so numerados de 0 a P 1 e a matriz, com linhas de 1 a M e colunas de 1 a N . Na gura 4.11(a), temos as distribuio bloco-coluna em uma dimenso. Cada processo recebe ao menos um bloco coluna da matriz. Se N divisvel por N B , cada bloco possui NB colunas da matriz global. Caso contrrio, os N/NB primeiros blocos contm NB colunas da matriz global e o ltimo possui N mod NB . No caso da distruibuio bloco-linha, a situao a transposta da que acabamos de descrever. Na gura 4.11(b) mostrado um exemplo desse tipo de

 

2 F! 6 $#"

# ! 6 2 ! '  !   7  4 5 4'  # 57 & 7 # ")' !  ! 6 !   

A I 7   P QI A  QI P P P % P P G I

        

     

G E %  )

distribuio.

Se tivermos uma matriz A, M N , para ser distribuda em uma grade 1 P , o processo 0 recebe o primeiro bloco da matriz e o p-simo processo tem coordenada (0, p) na grade. O mapeamento de uma coluna J da matriz global feito por: J = pNB + x

onde p o processo que contm essa coluna, NB o tamanho do bloco e x a coordenada da coluna dentro do bloco. Assim, temos: p= J 1 , NB

x = [(J 1) mod NB ] + 1. Na tabela 4.3 temos um exemplo para P = 2, N = 16 e NB = 8.

No entanto, no necessrio que a distribuio inicie no processo 0. Podemos denir o incio da distribuio por SRC, que o processo inicial na grade de uma dimenso. Assim, camos com as seguinte equaes que denem a distribuio:

      

   

 
   

                           

            A G  

        

P QI P P

PE 

     

A A C

p = SRC +

x = [(J 1) mod NB ] + 1.

Na tabela 4.4 temos um exemplo para N = 16, P = 2. NB = 8 e SRC = 1. P = 2 SRC = 1

Podemos ainda determinar o nmero de linhas ou colunas que cada processo recebe usando as equaes 4.11 e 4.12. Uma maneira prtica de denirmos o nmero de colunas que cada processo recebe usando os algoritmos mostrados na gura 4.12. O algoritmo para a distribuio bloco-linha anlogo.

Para discutir os conceitos sobre o armazenamento local das matrizes de banda estreita, vamos considerar uma matriz A, 7 7, dada a seguir. Esta matriz tem largura de banda BW = 2, com banda superior BW U = 2 e inferior BW L = 2. Se assumirmos que a matriz A no simtrica, o usurio pode escolher realizar um pivotamento (permutao entre as linhas da matriz) ou no durante a

NB = 8

  

                     
J 1 , NB

                     

P =2

NB = 8

 


A E  ) 77 E A  A

 

       

    

E A

A H A C I A P I P E 

     QI A T A  
  

        

     

A 7 A

A I A

C


fatorizao LU. Para isso, ele pode usar as rotinas

ou

, res-

pectivamente, que realizam uma fatorizao LU. Em qualquer um desses casos, uma distribuio bloco-coluna assumida, sendo que, se o pivotamento for selecionado, necessrio um espao adicional para preenchimento, como veremos a seguir.

a11 a12 a13

0 0

0 0 0

a21 a22 a23 a24

a31 a32 a33 a34 a35 0 0 0 0

0 0 0 0

A=

a42 a43 a44 a45 a46 0 0 0

a53 a54 a55 a56 a57 0 0 a64 a65 a66 a67 02 a75 a76 a77

No caso de escolhermos que nenhum pivotamento selecionado, vamos exemplicar distribuindo a matriz A em uma grade 13 com blocos NA = 3. Na tabela




        



    

'  5(n XS X  $!4i$A$ AhA" gf Q s$A"   `  X  i  %!5A" sd`yf Q '$' 4f yf Q s$A" h ' `   ""  # 55$5is5 ti  X  u %&h5A" yf Q $'' 4f `yf Q s$A"   ` '   F #  $A$5fw$ XtX Q s4% Q s 8 `   XX Q TH2 q X X t5Awd
 

 

        
  R 

A H G

     

4.5 temos este esquema. Nesta, o valor signica que nenhum valor denido necessrio neste local. Neste caso, o LLD (leading dimension of the local array) deve ser ao menos igual a BW L + BW U + 1.

a13 a23 a33 a43 a53

a24 a34 a44 a54 a64

a35 a45 a55 a65 a75

a46 a56 a66 a76

a57 a67 a77

a12 a11 a21 a31 a22 a32 a42

No entanto, se selecionarmos um pivotamento parcial e distribuirmos a mesma matriz em uma grade 1 3 com NB = 3, temos a situao da tabela 4.6. A quantidade necessria para o armazenamento adicional, representada por F na tabela 4.6, igual soma das quantidades BW L e BW U . O LLD neste caso deve ser ao menos igual a 2(BW L + BW U ) + 1. Um outro caso importante quando a matriz A simtrica positiva com largura de banda denida, neste caso, BW = 2. Vamos assumir que esta matriz distribuda sobre uma grade 1 3 com NB = 3. Como a matriz simtrica e triangular, vamos usar apenas a parte triangular inferior,que denida pela varivel

na chamada das rotinas. A distribuio mostrada na tabela 4.7. com BW = 2,

Para realizar a fatorizao, podemos chamar a rotina

por exemplo. Outra forma de fazermos esta distribuio usar apenas a parte triangular superior da matriz, ou seja,

. Neste caso temos uma distribui-

o como na tabela 4.8. Em ambos os casos, o LLD deve ser ao menos igual a BW + 1.







  

    

   #"

P P ) H



 

        

  

  

     

A I A

   

a13 a23 a33 a43 a53

a24 a34 a44 a54 a64

a35 a45 a55 a65 a75

a46 a56 a66 a76

a57 a67 a77

a12 a11 a21 a31 a22 a32 a42

Para descrevermos esses modos, vamos usar uma matriz 7 7 que pode ser representada pelos vetores (DL, D, DU ), que representam as diagonais inferior, principal e superior, respectivamente.

0 a11 a12 a21 a22 a23 0 A= 0 0 0 0 0 0 0 0

0 0

0 0 0

0 0 0 0

a32 a33 a34

0 0 0 0 0

a43 a44 a45 0 0 0

a54 a55 a56 0 0

a65 a66 a67 0 a76 a77

Vamos assumir que essa matriz simtrica e que nenhum pivotamento exigido e dividir a matriz em uma grade 13 usando blocos 33. Assim temos o

 




   

A  P A

 

E B




P P ) H

E A



PE 

 

        

A 7 A

  

  

     

A I A

P 7 P

a11 a21 a31

a22 a32 a42

a33 a43 a53

a44 a54 a64

a55 a65 a75

a66 a76

a77

a31 a32 a33

a42 a43 a44

a53 a54 a55

a64 a65 a66

a75 a76 a77

a21 a11 a22

esquema da tabela 4.9, onde podemos notar que os elementos nulos da matriz no so armazenados. Outra maneira de efetuarmos esse armazenamento armazenando apenas a parte superior ou inferior da matriz, denindo o valor da varivel em U ou

L respectivamente. Nas tabelas 4.10 e 4.11 so apresentadas essas distribuies.

O descritor para as matrizes de banda estreita e tridiagonais tem comprimento

valores que devem ser denidas no descritor. Quando a matriz A no for simtrica e a operao que for realizada no exigir

pivotamento, o valor de

deve ser ao menos igual a BW L+BW U +1, onde

igual a sete e o parmetro

deve ser igual a 501. Na tabela 4.12 temos os

A  P A

E E  ) A A E

A


   #"          

A


             

 A

P P ) H P P ) H

 

 

   

E A

        

A A C

     

"  $#!

     

     

A QI A A QI A

a21 a11 a12 a22 a23

a32 a33 a34

a43 a44 a45

a54 a55 a56

a65 a66 a67

a76 a77

a11

a22 a32

a33 a43

a44 a54

a55 a65

a66 a76

a77

a21

BW L e BW U so as larguras de banda inferior e superior, respectivamente. No entanto, se for exigido pivotamento pela funo que vai operar sobre a matriz, o

precisa ser denido.

No caso das matrizes de lado direito (right-hand-side), o descritor deve ter tama-

descritor.

Maiores detalhes sobre a distribuio das matrizes no ScaLAPACK podem ser vistos em [3].

nho sete e a varivel

= 502. Na tabela 4.13 so apresentadas os valores do

PE

P QI A

E A

matriz ser simtrica,

A A C

"  $#!

valor de

deve ser ao menos igual a 2(BW L + BW U ) + 1. No caso da = BW + 1, e caso elas seja tridiagonal, esse valor no


   






         


        

P H P  3 

P PH  !               QI A  A

 

 

 

        

  

 

  

QAI

     

a11

a22 a23

a33 a34

a44 a54

a55 a56

a66 a67

a77

a12

No cdigo fonte das rotinas do ScaLAPACK podem ser vistas caractersticas de uso, bem como uma lista de argumentos com as rotinas que devem ser passadas funo no seu manuseio, sendo descritos em ordem de entrada. Esse argumentos geralmente aparecem na seguinte ordem: 1. Opes de computao da matriz: como no caso de usar apenas a parte superior ou inferior de uma matriz simtrica, denida pela varivel

2. Aspectos dimensionais: denem os valores iniciais na matriz e sua distribuio, como a partir de qual linha e coluna a matriz deve ser operada, ou mesmo o descritor com os argumentos j denidos. 3. Matriz ou vetor de entrada: so passados funo e podem ter seus valores alterados durante a computao. 4. Matrizes, vetores ou escalares que guardam os resultados calculados: como no caso dos vetores que armazenam os autovalores de uma matriz. 5. Work arrays: so vetores usados nas computaes oferecendo espao de troca e armazenamento.


   




        
" #

& 0'

P PH #"                   QI A  A


( 6 33 "

 

 

 

8 " 33 #

 

3 ' ) "





 
"





  

 

 %  #  %              #                                      
 

   
 

       

   

  

 $  






!







                 


 

  



 


         

 

       
Pc

   

 

                                         #  

   


 A

      

A 7 P A

E E  ) A A E

E A

     ! A  A C P E  

    

 



 

 

  

 

 

 

 

NB

 





 


!

H  A

 R   

    

QAI A





 

       

       


 %

                  

   

  

            

      B  

 

      

       

  

P E    3    

 

M AX(1, LOCr (M B))


   

      

 

 

   

           '#     


P AI



 

Pr

LLD
 

   





       

 

 

 

  

!

 

 

 

 $



     


 

  



     





 

 

       E A

 !




 

AH 7C P E  H  A  A        T 

     

A I A

 

 





 

6. INFO: varivel de controle de erro. Assim, durante o uso do ScaLAPACK importante a vericao desses valores de acordo com o problema que se deseja resolver. Uma lista completa desses valores pode ser vista em [3], sendo que no cdigo fonte das rotinas escolhidas para uso tambm so apresentadas descries sobre os argumentos de entrada das funes.

Conforme discutimos anteriormente, as rotinas do ScaLAPACK podem ser usadas na resoluo de sistemas lineares, problemas de autovalores e mnimos quadrados. No apndice B mostrada uma lista com as rotinas de ScaLAPACK, classicadas de acordo com os tipos de matrizes sobre as quais elas operam. Essas rotinas so classicadas de acordo com sua funcionalidade: Driver routines: cada uma dessas rotinas resolvem um problema completamente, sendo esses: equaes lineares, problemas de mnimos quadrados, problemas de autovalores, problemas de valor singular, problemas de autovalores simtricos e problemas de autovalores generalizados denidos simtricos. Computational routines: essas rotinas realizam uma computao distinta e seu uso principal na obteno de solues em problemas que no podem ser solucionados pelas driver routines. As rotinas podem resolver os seguintes problemas: equaes lineares, fatorizao ortogonal e problemas de mnimos quadrados (fatorizao QR, fatorizao LQ, fatorizao QR com pivotamento, fatorizao ortogonal completa e outras fatorizaes), fatorizaes ortogonais generalizadas, problemas de autovalores simtri-




&

& &

    

' &

&

"



cos, problemas de autovalores no simtricos, decomposio de valor singular e problemas de autovalores generalizados denidos simtricos. Auxiliary routines: rotinas auxiliares usadas para realizar subtarefas de algoritmos de bloco-particionamento, computaes de mais baixo nvel, como clculo da norma de uma matriz, ou mesmo computaes bsicas que so extenses do PBLAS. Essas rotinas so ainda divididas de acordo com o tipo de dados que operam, sendo eles real, real de dupla preciso, complexo e complexo de dupla preciso. Esses tipos so usados na nomenclatura das rotinas, conforme veremos a seguir.

A nomenclatura das rotinas do ScaLAPACK segue uma regra bsica que parecida com a usada pelo LAPACK. As driver routines e computational routines possuem a seguinte regra:

PXYYZZZ
P: usado para diferenciar as rotinas do ScaLAPACK das rotinas do LAPACK. X: indica o tipo de dado usado na computao, quer pode ser: S: Real (oat),

D: Dupla preciso (double),

C: Complexo de preciso simples (complex),

Z: Complex de dupla preciso (double complex).

 

# ! 6   ! ! '  !   )' 7)7 "76 1 

    



YY: indica o tipo da matriz que ser operada pela funo. As matrizes podem ser: DB: De banda geral diagonalmente dominante,

GT: Tridiagonal geral,

DT: Tridiagonal geral sem pivotamento,

GB: De banda geral,

GE: Geral,

GG: Geral para problemas generalizados,

HE: Hermitiana,

OR: Ortogonal,

PB: Simtrica ou hermitiana, positiva denida de banda geral,

PO: Simtrica ou hermitiana positiva,

PT: Simtrica ou hermitiana positiva denida tridiagonal,

ST: Simtrica tridiagonal,

SY: Simtrica,

TR: Triangular,

TZ: Trapezoidal,

UN: Unitria,

HS: Matriz de Hesenberg.


ZZZ: indica a computao que a rotina realiza. Por exemplo rotinas podem ser vistos em [3] ou no apndice.

indica as

rotinas que resolvem sistemas de equaes lineares. Detalhes sobre essas

    



Algumas das matrizes discutidas acima foram discutidas na seo 3.2 ou em [25, 46]. Vamos considerar alguns exemplos da nomenclatura: PDSYEVX : essa rotina opera sobre dados do tipo double (D) em matrizes simtricas (SY) e resolve um problema de autovalor (EVX), PSGESVX: essa rotina opera sobre dados de simples preciso (S), em matrizes gerais (GE) e resolve sistemas de equaes lineares (SVX), PZGEBRD: essa rotina opera sobre dados do tipo complexo de dupla preciso (Z), em matriz gerais (GE) e realiza uma reduo bidiagonal (BRD). Conforme observamos, a nomenclatura das rotinas do ScaLAPACK bastante complexa e esse uma caracterstica que diculta seu uso. Nos prximos captulos de nosso trabalho, vamos mostrar como o uso de orientao ao objeto pode ajudar a solucionar esse problema.

 

    



O nvel de abstrao entre as linguagens de programao desde os primrdios da computao sofreu profundas modicaes. Inicialmente os programas eram escritos em linguagem de mquina usando notao binria, sendo os dados e as instrues colocados conjuntamente num mesmo programa. Os acessos memria eram feitos diretamente pelo programador especicando a posio de armazenamento como uma instruo binria. Um grande avano ocorreu com o surgimento das linguagens montadoras, que introduziram instrues de mquina como

desenvolvimento de programas nesta poca ainda era bastante complexo, dependendo da operao a ser executada. Durante a dcada de 50 surgiram linguagens inovadoras como a FORTRAN e LISP, que introduziram recursos que facilitaram imensamente o desenvolvimento de cdigos. Uma operao matemtica como z = x2 +y 2 , que em linguagem montadora poderia exigir vrias linhas de instruo tornou-se possvel ser realizada

FORTRAN.

  % 

com a execuo de um nico comando, como

                 

, etc. No entanto, o

 
, na linguagem

D D  8CP D  @

 

A partir das dcadas de 60 e 70, surgiram linguagens de programao estruturadas, como Pascal e C, que facilitaram o desenvolvimento de cdigos permitindo dividir programas em procedimentos e funes que pudessem ser reaproveitados em diversas partes dos programas. Com isso, algumas funes foram agrupadas em mdulos, surgindo computao modular, que usa o princpio de diviso e conquista no desenvolvimento do cdigo. No entanto, mesmo com esses avanos, no desenvolvimento de programas era necessrio pensar-se em termos da estrutura do software ao invs do problema real, devido ao insuciente nvel de abstrao. Para suprir essas necessidades, na dcada de 60 foram desenvolvidos mtodos de programao orientada ao objeto, que comearam com a linguagem Simula e alcanaram difuso na dcada de 80 com o Smaltalk. Neste captulo, introduziremos de forma quantitativa alguns princpios de orientao ao objeto aplicando-os a problemas de lgebra linear.

A metodologia da orientao ao objeto baseada no princpio de decomposio e classicao dos problemas. Aristteles j usava esse princpio quando fala em classes de peixes e classes de pssaros. Do mesmo modo, a orientao ao objeto usa abstraes que so chamadas classes, sendo um membro especco de uma determinada abstrao, um objeto. Esse objeto pode ser pensado como um objeto do mundo real, sendo que ele possui mtodos que podem ser aplicados sobre ele, denindo sua interface. Por exemplo, podemos ter uma classe de tipos de lmpadas e uma lmpada incandescente pode ser considerada como um objeto dessa classe. As operaes como ligar, desligar e queimar so os mtodos que so chamados via envio de mensagens aos objetos. As classes so compostas por membros pblicos, privados ou protegidos [53].

&'  & &65 07! & (3 87(3 '  ) 3& "

   

 

"

& 0'

 

0 ' 2

     "

!" $

Os membros privados so visveis apenas ao implementador da classe e seu uso ca restrito implementao dos mtodos, que podem operar sobre esses membros. Deste modo, o implementador s disponibiliza ao usurios os membros pblicos, que constituem a interface da classe. Essa proteo importante, pois probe ao usurio acessar os membros privados da classe, ocorrendo encapsulao dos membros havendo uma reduo de bugs no desenvolvimento de softwares. Alm disso, a orientao ao objeto permite ao desenvolvedor da classe alterar aspectos de sua implementao sem alterar sua interface. Essa caracterstica permite a criao de bibliotecas padronizadas com interface denida como a STL [6] e a MTL [5]. Assim, as modicaes na implementao, como no caso de optimizaes de cdigo na biblioteca, no afetam a interface de uso. Outro aspecto importante com relao orientao ao objeto, que possvel fazer-se composio de classes, onde membros de uma determinada classe podem ser constitudos de uma classe completa. Essa relao de tem-um importante, pois objetos do mundo real obedecem a esse princpio, como no caso de um carro que possui um motor. O motor pode ser constitudo de uma classe completa que pode ser introduzida na classe carro. Objetos do mundo real podem ser classicados e reclassicados de inmeras formas. Um exemplo uma classe para representar guras geomtricas. Derivada dessa classe temos os crculos, os retngulos, tringulos, etc. No entanto, a classe retngulo pode ser decomposta em retngulos e quadrados (que uma forma especial de retngulo), e a classe tringulo pode ser decomposta em tringulos issceles, eqilteros e escalenos. Essa hierarquia de classes compartilha de funes semelhantes como rotao, translao, etc. Desta idia surgiu o conceito de herana. Na gura 5.1 usada a representao UML (Unied Modeling Language) [54], que dene a forma como os mtodos e atributos da classe so declarados



   

 

 

    

nos diagramas. Nessa representao, o primeiro sub-retngulo contm o nome da classe, o segundo as caractersticas, chamadas atributos da classe, e o terceiro contm as operaes, que so os mtodos da classe. Neste exemplo, a classe

uma classe abstrata, pois alguns de seus mtodos so virtuais, e as demais so derivadas dela. O conceito de herana est associado ao reaproveitamento de cdigo e oferece um alto nvel de abstrao. As classes derivadas da classe base herdam sua interface. Assim, conforme notamos na gura 5.1, alguns mtodos so comuns a

apenas as implementaes desses mtodos so diferentes.

Deste modo, se uma classe B herda uma classe A, ento todos os mtodos de A tambm so de B. Alm disso, cada objeto de B tambm objeto de A. Como as classes de uma hierarquia possuem mtodos comuns, uma mesma mensagem deve resultar na chamada de mtodos diferentes, dependendo do objeto que realizou a chamada, sendo a deciso tomada em tempo de execuo. Assim, no caso da

  

gura 5.1, se um objeto da classe crculo chamar o mtodo

  

todas a guras, como o caso de

, sendo que

, ele usar a



9 8 !AE 

    

 

 

 

                                       $  

E CBA@88D 9@

   

E 8CP @

 

 

     
  

   !    A G 

 

abstrata e no possui implementao para esse mtodo. O mesmo ocorre com as outras formas. No entanto, a chamada ao mtodo chamada ao mtodo implementado na classe

no possuem implementao para ele, conforme notamos na gura.

Conforme notamos, o uso de herana uma maneira de reaproveitarmos cdigo. Apenas os mtodos que necessitam ser adaptados s caractersticas especcas de uma classe mais especializada ou aqueles especcos uma dada classe necessitam ser implementados. Os demais podem ser herdados da classe base sem modicaes. Alm da herana simples, tambm podemos ter herana mltipla, onde uma dada classe pode herdar mtodos de mais de uma classe. Outro fato importante quanto essa metodologia que cada classe conhece apenas os detalhes de sua prpria implementao. Das outras classes, apenas suas interfaces so conhecidas. Na prxima seo vamos aplicar os conceitos de orientao ao objeto no desenvolvimento de uma hierarquia de classes de matrizes. Maiores detalhes sobre orientao ao objeto pode ser vistos em [7, 53, 55, 56, 57]. Em [58] so discutidos as limitaes que a orientao ao objeto ainda sofre e quais sero os desenvolvimentos futuros dessa metodologia.

As bibliotecas tradicionais de lgebra linear, discutidas no captulo 3, apresentam dois pontos fracos fundamentais: interface complexa e diculdades de implementao devido ao pouco reaproveitamento de cdigo que as linguagens no orientadas ao objeto oferecem. Esses problemas surgem devido metodologia usada na construo dessas bibliotecas, pois utilizada a metodologia top-down,

"

 8

) 3

" 9

8 3

 

implementao associada classe

e no a da classe

, j que ela

resultar na

, j que as classe derivadas



9 8!CE  E G EI B @ C8 14I 8D 9 H !CE 

  

&'  & &65 07  & (3 87#3 '  )

G I 1E

   

 

"

    

"

ou programao estruturada, onde a decomposio das solues feita a nvel das subrotinas, sendo o modelo uma composio de chamadas a essas sub-rotinas. Esse nvel de abstrao no permite ao programador pensar ao nvel do problema, mas ao nvel das computaes, o que diculta o desenvolvimento de cdigo. No restante desse captulo vamos mostrar como a orientao ao objeto pode superar esses pontos fracos facilitando o desenvolvimento das bibliotecas.

Usando o conceito de orientao ao objeto, matrizes podem ser pensadas como uma abstrao de problemas de lgebra linear e terem uma classe associada a elas. Uma matriz especca seria ento um objeto da classe e as operaes sobre essa matriz, como inverso e transposio, os mtodos dessa classe. Como os diversos tipo de matrizes possuem propriedades comuns, pode-se construir uma hierarquia de classes usando herana, onde as matrizes especcas, como densas e de banda, herdam essas propriedades comuns de uma matriz geral, possuindo ainda propriedades especcas a cada uma. Operaes como acesso a um elemento ou incluso de um elemento na matriz so operaes comuns a todas as matrizes, o que implica que esses mtodos podem pertencer a uma classe de matriz geral. Alm disso, alguns membros como o nmero de linhas e colunas tambm so comuns a todas as matrizes. Podemos ento ter uma classe geral denida como abstrata e as matrizes de um tipo especco que herdam seus mtodos. Como exemplo, podemos considerar a gura 5.2, onde temos uma matriz geral e trs tipos de matrizes: quadrada, retangular e um vetor, que um tipo especco de matriz com apenas uma linha ou uma coluna, onde usada a representao UML. A interface da classe possui alguns mtodos comuns, sendo a implementao de cada um adaptada ao tipo da matriz, de forma que aspectos especcos das

 

# "41 7  6  # )3  '  !    ! ' $

  

   

 

  

matrizes, como no caso das matrizes quadradas que possuem mesmo nmero de linhas e colunas, podem ser utilizados. Alm disso, alguns mtodos podem ser so-

srio especicar o nmero de linhas e colunas, pois so iguais, sendo necessrio apenas um deles. Em linguagem C++ essa metodologia chamada sobrecarga de funes. Algumas operaes como soma ou mesmo multiplicao de matrizes tambm podem ser sobrecarregadas na linguagem C++, onde elas adquirem funes especcas podendo ser adaptadas s operaes matriciais.

tambm podem ser classes genricas, sendo usadas de acordo


 

Esse valor pode ser double, oat ou complex, por exemplo, sendo o tipo especicado na declarao do objeto da classe. Assim, essas classes podem representar matrizes de diversos tipos, sendo que algumas operaes devem ser ajustadas para

com o tipo de dados armazenados na matriz, denida por

na gura 5.2.

@ H

Alm da classe base

, as classes

I @ (E  FE 

CE 88 F & G@ B 

I (E

I   G@ (E  E  &CB& 8H

classe

. Neste ltimo caso, como a matriz quadrada, no neces-

brecarregados, como no caso do mtodo

na


  

B 8 F1EG @ @

 

G @ @ 8 B E B 8 81EG

     

5

  
 



   

 

I @ (E  FE 

 R 

 

    A G 

alguns deles, como por exemplo na incluso de elementos no caso das matrizes complexas, que possuem parte real e imaginria. No entanto, esses detalhes so restritos implementao das classes.

A construo da hierarquia de classes para matrizes pode variar dependendo de quais caractersticas das matrizes devem ser levadas em conta. Uma das possibilidades considerar a forma de armazenamento dos valores na matriz e algumas propriedades matriciais, como simetria e ortogonalidade. Deste modo, vamos considerar um exemplo ilustrativo que considera a hierarquia de matrizes para programas seqenciais, em princpio. Na gura 5.3 temos uma hierarquia de classe que considera a forma de armazenamento dos dados na matriz. Deste modo, temos uma classe base e as classe derivadas dessa, que possuem mtodos implementados de acordo com a especialidade da classe.

o nmero de linha e colunas na matriz, respectivamente. Esses valores so gerais para todas as matrizes e, portanto, podem ser denidos na classe base. Alm disso,

acesso a um elemento e a incluso de um valor na matriz como sendo geral, ou

necessria uma nova implementao desses mtodos.

pao para armazenamento, e o mtodo

, que calcula os autovalores e au-

tovetores da matriz. Esse ltimo mtodo sobrecarregado e, de acordo com os parmetros envolvidos na sua chamada, ele calcula apenas os autovalores ou tambm os autovetores. Na linguagem C++ esse recurso obtido com sobrecarga

CBF$@ @I

Na classe base

so denidos o mtodo

, reservando es-

seja, em uma matriz densa. Portanto, na classe derivada

@ @ 8 FCEG I 9 @ (E  A@CB8

 $

I 9 @ (E  A@AB8

os mtodos

@ @ I B F9 8 I 9

Na classe base, temos os atributos

que representam

so denidos considerando o

no

 
"

9  9 B B (

) " 83 '

"

" "

3 $8


0

   

3)

I AB@  @ @

6 "



3 ) "

    

 

 "

de funes, sendo que os operadores matemticos, como soma e multiplicao, tambm podem ser sobrecarregados.

todos especcos de acordo com o armazenamento dos elementos na matriz. As

sim, no caso da

, no necessrio armazenar todos os elementos da

matriz, mas apenas os que esto localizados nas bandas superior e inferior. Desta forma, operaes de acesso ou incluso de elementos na matriz possuem a mesma interface que a classe base, mas implementao diferente. O mesmo ocorre com a

da matriz, pois elas so iguais.


uma delas. A implementao de seus mtodos dever considerar esse armazena-

No caso da

classe

, que pode armazenar apenas a parte superior ou inferior

, que construda por herana das classes

, poder usar a forma de armazenamento de

E $I(F  G IE  (E  D FFC @ I @DB E D  E @ $I(F  FBA&G I(F ! I I @ E  G (E !

Nas classes derivadas

, so denidos m-




 

I (E  D FFC @ D B I I @ I @D E  G (E ! (E  D FFCB

  

 

  


  



    

  



    

 T 



A G 

 

mento sendo que alguns deles podero ser herdados sem nova implementao. Conforme notamos, as classes derivadas foram construdas como classes genricas, independendo do tipo dos elementos que so armazenados na matriz. Assim, para cada uma delas necessria a implementao de acordo com o tipo, usando novamente herana. Um exemplo mostrado na gura 5.4, onde a partir

de banda de acordo com os tipos de dados dos elementos armazenados na matriz. A mesma construo deve ser feita para as demais classes da gura 5.3.

No prximo captulo vamos discutir a biblioteca que desenvolvemos e voltaremos a abordar os conceitos de orientao ao objeto.

 

        

 # 

      



             A G   

da classe

so construdas por herana as classes para as matrizes

 



   

I @D  E  D FFCB&



    

 

A biblioteca que desenvolvemos, chamada Parallel Object Oriented Linear Algebra Library (POOLALi), foi construda usando os conceitos discutidos nos captulos anteriores. Inicialmente zemos uma classicao das rotinas da biblioteca ScaLAPACK de acordo com o tipo das matrizes. No apndice B mostrada essa classicao, onde notamos que algumas rotinas no esto disponveis para todos os tipos de matrizes, como no caso das rotinas de resoluo de autovalores, que esto disponveis apenas para as matrizes dos tipos simtrica e hermitiana. Deste modo, classicamos as matrizes de acordo com as operaes mais gerais. Como o objetivo de nosso trabalho era analisar aspectos de orientao ao objeto que facilitassem a construo de bibliotecas paralelas e no a construo de uma biblioteca completa, nos concentramos apenas nas matrizes densas e principalmente nas rotinas de resoluo de autovalores e autovalores, uma vez que essa uma operao bastante comum em problemas de fsica e engenharia, que muitas vezes necessitam da diagonalizao de matrizes com elevado nmero de elementos, sendo que, em muitos casos, essa operao no possvel de ser feita

     "            

 

 

em computadores seqenciais, conforme discutimos em captulos anteriores. Na implementao da POOLALi, utilizamos rotinas do ScaLAPACK para efetuar as operaes de lgebra linear. Na utilizao do ScaLAPACK so necessrios quatro passos bsicos: Passo 1: Iniciar a grade de processos. Passo 2: Distribuir a matriz na grade de processos. Passo 3: Chamar a rotina do ScaLAPACK. Passo 4: Liberar a grade de processos. Assim, quando o programador necessita construir um software que utiliza as rotinas do ScaLAPACK, ele precisa especicar cada um desses passos no cdigo do programa, tornando o processo de programao complexo, sendo que o programador necessita se preocupar com esses detalhes que oferecem um baixo nvel de abstrao. No desenvolvimento da biblioteca POOLALi, procuramos ocultar esses detalhes de programao e oferecer um alto nvel de abstrao aos usurios.

No desenvolvimento da POOLALi nos preocupamos com os passo necessrios no uso da ScaLAPACK, de forma a facilitar o processo de programao. Inicialmente, desenvolvemos uma classe chamada

, que ao ser declarado

um objeto desta classe, inicializado o processo MPI atravs de um construtor e quando terminada a execuo, o destrutor da classe libera os processos. A interface dessa classe constituda dos seguintes mtodos

: retorna o rank associado ao processo,


" # " "

& 0

  & &   

@ E

&

" 92

   

" 3

3 875 &6

  

 6 "

 

'

" 



&

&

CB E

! $"

Na gura 6.1 mostrada a interface completa da classe

Deste modo, com a declarao de um objeto dessa classe realizado parte do primeiro passo e ao nal do programa, o quarto passo executado automaticamente. Para a iniciar a grade de processos, necessria a chamada das funes do BLACS, conforme discutimos no captulo 4. Na construo de nossa biblioteca criamos uma classe que executa essa operao automaticamente quando um objeto inicializado, atravs do construtor da classe. Essa classe chamada

declarao de um objeto associado a ela necessria a passagem do objeto do tipo

, que deve ser declarado anteriormente. Alm disso, a grade pode

ser construda de duas formas, podendo ser construda da forma mais quadrada possvel de acordo com o nmero de processos, ou atravs da denio do nmero de linhas e colunas na grade, que feita na declarao do objeto. Os mtodos oferecidos pela classe

so os seguintes:

: retorna o nmero de linhas na grade de processos, : retorna o nmero de colunas na grade de processos,

D (E I

    

   &  

@ E

 

 

  

1D(E I

W X G E&  V(' U G E& T) 1) H(HS(# G E& P) 1) HRQI(# u GHEFD42CAAB@867542310(' F 9 )#&  $ #!  %"8  2  

      

A G 

: retorna o nmero de processos na grade. .

e na

   

  

 

GB E FB

  & &   

9 G FB E @ E



Na gura 6.2 mostrada a interface da classe

Assim, com a declarao dos objetos das classes

um e quatro so executados. Na gura 6.3 mostrada a inicializao da grade de processos utilizando o ScaLAPACK de modo tradicional, usando linguagem C++, e na gura 6.4 usando a biblioteca POOLALi. Vemos que o uso da POOLALi simplica a inicializao. Comparando as duas implementaes, vemos que usando a biblioteca POOLALi, os aspectos relativos s rotinas do BLACS cam ocultos ao programador, uma vez que as rotinas so chamadas na implementao dos mtodos. Quando declarado um objeto do tipo

, as rotinas da gura 6.3 so chamadas automa-

ticamente, alm das variveis serem inicializadas. Assim, vemos que a orientao ao objeto facilitou radicalmente a implementao da inicializao da grade de

D (E  @  &E & I   

D (E I

D (E I

: retorna o contexto associado grade,

: retorna a coordenada linha do processo na grade, : retorna a coordenada coluna do processo na grade. . e os passos




W X G E& T 1) H(75(# G E& T 1) H(Q(# GH(&Q1)BT  E 1 T 11) GE T ) 1) H(&7FS(# G E& T  1) H(Q)S(# u GHE F)I10# CF)  6%)S10# 1C5) 6 2  & #F ) 1 T ) T     F $ # %"!8  2

  

 

  

  '

   

    R

  

A HG

 

 G  E @ 8 B G



# 5

"

" # "

3 $8
0

$) 3

6 33 ) " "

5 6

" #

3 875 &6
  

    

   

  %

W G  ) 1 GET & 1# V"#2 '$!@5"! t u GHET5 2 6 2 %52 6 2 6 ) T 52 '4#055"! F  T 6 T) T) 11 & T")##4 GH52 6 2 6 2 6 ) T 52 '4!0# 055"! ET ) T)  11 & 1 )##4 8 G ET)3T E1)# HFC) & F0R& T F) t  2 GT H$) n EE " &2E TS0) & E ( ') & # ) 1) T & 22  & T &  9 G ET & 1 E1)# H) Q% SF0R& ) T GE  )T 6 T  T  & 14 HF1152 %#2 6 ) 2 '$!"! GET) 6 P) & T") H2 QC2 7$#(#  "! G ED4 6 4 1 )  H5 2 7"2 & @# 0!  G       9   @ u G%T" 6  %5) 6 S0# F  T 6 T T) 1) G   6 T 6 7) 6 ) I0# 8  )T  1 1) T 6T P  1)  2 D4 9 6 4 1)# )# 1)# A @875I0R& 0"F 0 E

 

  



    

truo das classes anlogo.

No desenvolvimento da hierarquia de matrizes utilizamos os mesmos mtodos

     T 

 



processos.

com o tipo de dados dos elementos armazenados na matriz. Assim, obtivemos descritos no captulo 5. Nos preocupamos apenas com as matrizes densas dos tipos simtrica e hermitiana. Para os demais tipos de matrizes, o mtodo de consAs classes para as matrizes simtricas e hermitianas foram adaptadas de acordo

6 "

'

" 

&
&

 

"

A HG

9 I

 ! 1   #

 

 

 


   



    




 

  

@ H

@ @

 

 

 

 

uma hierarquia de classes conforme mostrada na gura 6.5, onde

 5    

   

  

encontrados, podendo ser oat ou double.

@ G@E H B I I9 88F


  

 

  

  

  

W X G  ) 1 G & # HE  Q4 F GED4 64 HF 7" &   u   F D4 9 6 4 1)# )# 1) A @875I0R& 0"F 0# 8
#4  )# 9 5( CF05 2



    

 



A classe

presenta o tipo de dado armazenado na matriz, podendo ser oat, double, complex

ou double complex, e

que ela armazena no so denidos em sua implementao, e ela possui algumas




 

A seguir vamos descrever essas classes.

uma classe abstrata genrica, ou seja, os tipos dos elementos representa o tipo de dado dos autovalores re-

A G 

A G 

funes virtuais. Deste modo, nenhum objeto pode ser declarado como pertencente a essa classe. Como ela uma classe geral, seu atributos possuem informaes sobre o nmero de linhas e colunas da matriz global ou mesmo das matrizes locais distribudas em cada processador. No entanto, o usurio da classe no precisa ter conhecimentos desses detalhes de implementao, sendo necessrio conhecer apenas sua interface. Os mtodos oferecidos por essa classe so:

Alm disso, sobrecarregamos alguns operadores que permitem efetuar as seguintes operaes: Acesso por ndice global: permite o acesso a partes locais da matriz especicando apenas seus ndices globais. Essa operao feita usando o

globais.

Acesso por ndice local: permite o acesso a partes da matriz especicando apenas seus ndices locais.

rao efetuada atravs do comando

, onde

I (F  IE

operador

. Por exemplo, se temos um objeto chamado

I E

: retorna o nmero de linhas global, : retorna o nmero de colunas global, : retorna o nmero de linhas no bloco de distribuio, : retorna o nmero de colunas no bloco de distribuio, : retorna o nmero de linhas na matriz local, : retorna o nmero de colunas na matriz local.

, essa opeso ndices

  



    

 G  9 8  G  9( E  G   9 G8 F G  ( E F 9 G  9FG  9  E

 



Dentre essas operaes, o acesso por ndice global fundamental para facilitar a construo de programas paralelos, pois na implementao de programas usando os mtodos convencionais, o programador deve fazer um mapeamento entre os ndices globais e locais das matrizes, o que, em muitos casos, pode ser uma a tarefa bastante complexa, principalmente quando os valores dos elementos dependem dos valores dos ndices globais. Assim, a construo da matriz usando esse operador de acesso global feita de modo parecido ao realizado usando programao seqencial, sendo a que a diferena bsica est no fato que uma atribuio em linguagem C++ feita usando

implementao desse mtodo dene a qual processo associado o elemento atravs dos ndices globais.

a matriz em cada processador.

funes virtuais, que sero mostradas na implementao das classes derivadas. Os mtodos que acabamos de discutir so herdados para as matrizes que descreveremos a seguir usando herana simples.

so usadas para matrizes do tipo simtrica e hermitiana cujos elemen

, herdando todos os seus mtodos.

Alm dos mtodos herdados, essas classes possuem o mtodo:

: calcula os autovalores e autovetores da matriz,

tos so do tipo

ou

. Elas so construdas por herana da classe

    

 

 

CB8$H@ @I

As classes

 

Na gura 6.6 apresentamos a interface completa da classe

CB 5!E H I I @

9 I

   '  

@  D    G E ! @   G (F ! I @  IE @

O acesso local feito usando

, que acessa a poro local

, e na biblioteca POOLALi,

.A

sem as

 

CE &P  

I (E I

I G

  



I (E

# ! '  !  43 #   # # !

    

CE&&P  

 



  9  I CB 5!E H I I @

I (E I

I 4BI I 4BI  &P CB8$HA@ H CB8$H@  @ I @ @I  &P BAF$H@ @I P CB8$HA@ H CB8$H@ @I @ @I
  

 

 

 

 

   

  

  '

    

HG A

W G E& 11# 1# V(Q4CF U @5D G  1) 1 T 6 1) 1)T & T  1  HE 0# CF)  V# 0# CF '2  (  u t GHB(# CF H0# C5 V(Q 2  (  E 1) 1 )T 6  1) 1)T & E& T1 T  1  F G E& TT 1) H(V4 (# 8 G E& TT 1) H(VF4 (# 2 t G E& TPT! 1) H(VC"S(# n G E& TPT! 1) H(VFC"S(# G E& T 1) HRH (# G E& T 1) HRHFI(# GVE 2  C ) T # ' 1 ( $@FCF)  & $C5  1 #  6  11# 1 T 11# G HES )0# C5)T 6   0# C5 1 1 1) 1)T 6 2SF 1CF 6 10# 1C5) 6  0# CF)  & $C5 u 4 # )T ) T 1) 1 T 11# $ #! %" F  X8 11# $CF 2 6  1 (  F  " 1    ) 11 
 

  T F )  1 1 ) ##  

  



    

 

e o operador:

entradas na chamada do mtodo, ele realiza uma determinada operao:

CB8$H@ @I

<< : cada processo imprime sua matriz local em uma stream.



 & 

O mtodo

zenados no vetor

de o il-simo at o iu-simo,

construdo por sobrecarga de funes e, de acordo com as

: calcula todos os autovalores da matriz e arma-

: calcula os autovalores des-

com valores no intervalo [vl, vu],

valores e autovetores da matriz,

calcula os autovalores desde o il-simo at o iu-simo e os respectivos autovetores da matriz,

calcula os autovalores no intervalo [vl, vu] e os respectivos autovetores da matriz.




Nestes mtodos, zes, podendo ser

representa o tipo de dados dos elementos na matri

. Nas guras 6.7, 6.8, 6.9 e 6.10 so mostradas as interfaces das

classes derivadas. Assim, vemos que os mtodos possuem no mximo quatro entradas, enquanto que na chamada das rotinas do ScaLAPACK que calculam os autovalores e auto-

delas no so usadas no clculo, dependendo da operao. O uso de orientao ao objeto neste caso facilita o trabalho de programao. A implentao desses mtodos utiliza rotinas do ScaLAPACK e para cada uma das diferentes classes que citamos acima, so usadas diferentes rotinas, pois as rotinas do ScaLAPACK esto organizadas de acordo com o tipo de matriz e com os tipos de dados que elas podem armazenar. Outra facilidade que os mtodos dessas classes oferecem quanto nomenclatura, que mais intuitiva do que os nomes das rotinas oferecidas pelo ScaLA-

vetores, como a

, necessitam de vinte nove entradas, sendo que muitas

 

APF 8 @ 9D

 

AB 5E 8 @   I I @

podendo ser

CB! 5!E 8 I I @

ou

a classe associada matriz, ou

G I(8 @! @   G IE  E  @  9 8& @  D 9     @ H

& $ 

P H @

P H @

G@ @ 88 ABF$I

9 8& 9 

& $ 

P CB8 HA@ H CB8$H@ @I @ @I

I QB I QBI 88 ABF$I I G@ @

9 8& 9 

& $ 

P CB8 HA@ H CB8$H@ @I @ @I

G@ @ 88 ABF$I

9 8& 9 

& $ 

P CB8 HA@ H CB8$H@ @I @ @I

: calcula os autovalores

: calcula todos os auto-

 

P H @

  

P H @



    

P CB8 HA@ H CB8$H@ @I @ @I

 



por exemplo. Nas guras 6.7, 6.8, 6.9 e 6.10 so mostradas a interface desses

cada processador e as operaes de soma e multiplicao no so triviais, sendo

necessria a utilizao das rotinas do ScaLAPACK e do PBLAS para execut-las,

es comuns entre matrizes, pois as matrizes esto distribudas localmente em

    %  

 

 

  

      

A G 

GHE GHE G HE GE

W X2 G W &#1 1T 'E HFF   U G D 1T 6 D 1T HE S" %S" 6 D 4# T 1T"11# 6 D 4#A 1T 7) @"2 1 " 6 $CF %) @"B" & ) @" "D 4# #T G HE 0# 0# %# 0# 1) 6 1) 6 D 4# T 1T"11# 6 D 4#A 1T 7) @"2 1 " 6 $CF %) @"B" & ) @" "D t 4# #T u GE D 4# T 1T"11# 6 D 4#A 1T VS) @"2 1 " 6 $CF %) @"B" & ) @" "D F 4# #T G D 1T 6 D 1T 6 D 4#A 1T HE S" %S" %) @"B" & ) @" "D 4# #T 8 GHE 0# 0# %# 0# %) @"B" & ) @" "D t 1) 6 1) 6 D 4#A 1T 4# #T 2 G D 4#A 1T VE ) @"B" & ) @" "D n 4# #T FF  6  F5  H5T FF    F" #1 1 T # 1 1 T &AT1 #1 1T ) # #FF  T6  F15  VT FF    F" 1 1 #  1 T &T1 #1 1T ) # FF  6  F5  T& T FF    F" # 1 1T #1 1 T1  #1 1T ) # G HE  #FF  &% 2 FF   1 1 T T1 T #1 1T 6 6 4 6 6 &'"6  $1CF 'ES 10# 1C5T   1 T 1T" 1 # $ ) ) 1) 1 )T 2 # 6 1) 1 )T  0# C5 6 4SF Q (# CF 6  )0# C5T &H#FF   u 1 1 ) 1 1T GH5 H" 6 14CF 7F28FF  @F)RBFF  T F E & 1 T 1T" 1# $ E #1  1T 1 T & #1 1 $ # %"!8  2
1 T "

6 1T 11# #! Q" $@F  $ 5F #1


  

1T 



 



    

 

operadores. PACK, conforme observamos na seo 4.4.1. No desenvolvimento das classes, tambm sobrecarregamos algumas opera-

A operaes implementadas so:

G W E #1  ! T % (& F5   " U G D ! T 6 D ! T HE 3" %3 6 D)4# ! T ! T11# 6 D)4# ! T 7@"2 C 6 "$@F '@"A  & ) @" "D 4# #T G HE 0# 0# %# 0# 1) 6 1) 6 D)4# ! T ! T11# 6 D)4# ! T 7@"2 C 6 "$@F '@"A  & ) @" "D 4# #T G D)4# ! T ! T11# 6 D)4# ! T VE @"2 C 6 "$@F '@"A  & ) @" "D 4# #T G D ! T 6 D ! T 6 D)4# ! T HE 3" %3" '@"A  & ) @" "D 4# #T G HE (# 0# %# 0# '@"A  & ) @" "D 1) 6 1) 6 D)4# ! T 4# #T G E D)4# ! T HI@"A  & ) @" "D 4# #T G #1  ! T HE 5F  " 6  5F  " H"T FF   "  F" #1  ! T &AT1 #1  ! T ) # G #1  ! T HE 5F  " 6  5F  " V T FF   "  F" #1  ! T & T1 #1  ! T ) # G #1  ! T HE 5F  " 6  5F  " & T FF   "  F" #1  ! T T1 #1  ! T ) # G HE  5F  " & T FF   " #1  ! T T1 #1  ! T GHEF 6  6 4 6 6  H" 6 "$C5 'S2 0# CF)  &! T ! T11# $ E  1) 1 T 6 1) 1 T 42 # 1) 1)T F  0# CF)  6 SF 6 0# C5 6  0# CF)  HFF   1) 1 T &#1  G F 7" 6 " $CF 'F2 5F  "CF) R& FF   E & ! T ! T 11# $ E #1  ! T 1 T #1 
 ! T 

Atribuio: essa operao faz atribuio direta entre todos os elementos



quando atribuda, ela poder possuir uma nova distribuio. Assim, se e

de duas matrizes. Se uma matriz possui uma dada distribuio de blocos,

ScaLAPACK, necessrio escolher qual rotina utilizar, de acordo com o so matrizes de uma das classes que citamos acima, e tem distribuio em nb nb . Para efetuar essa operao usando as rotinas de redistribuio do

  

  

blocos ma na , e em mb nb , ento a atribuio

possuir seus elementos iguais ao de , e com distribuio dos blocos

 

resulta que a matriz

 

   

  '     

  

A H G

WX2 u t F 8 2 t n

! T11# #! "$C5 " $ FF #1


  

  "   ! T



 ! T " u  ! T " F $ # %"!8  2



    

 

W X2 G W ) #1#  1T 'E &  F07  U G D 1T 6 D 1T HE S" %S" 6 D)4# 1T  "11# 6 D 4#A 1T 7@"2 " 6  " T "$CF %) @"B" & ) @" "D 4# #T G HE 0# 0# %# 0# 1) 6 1) 6 D)4# 1T  "11# 6 D 4#A 1T 7@"2 " 6  " T "$CF %) @"B" & ) @" "D t 4# #T u G D)4# 1T  "11# 6 D 4#A 1T VE @"2 " 6  " T "$CF %) @"B" & ) @" "D F 4# #T G D 1T 6 D 1T 6 D 4#A 1T HE S" %S" %) @"B" & ) @" "D 4# #T 8 G HE 0# 0# %# 0# %) @"B" & ) @" "D t 1) 6 1) 6 D 4#A 1T 4# #T 2 G D 4#A 1T VE ) @"B" & ) @" "D n 4# #T G #1#  1T ) #1#  1T & AT1 ) #1#  1T ) # HE ) 5@7  6   F@H  H5T  5@7    F" G # #  1T ) #1#  1T &T1 ) #1#  1T ) # HE ) 51@7  6   F@H  VT  5@7    F" GHE ) 51@7  6   F@H  & T  5@7    F" # #  1T ) #1#  1T T1 ) #1#  1T ) # G HE   F@H  & T  5@7   ) #1#  1T T1 ) #1#  1T GHEF 6  6 4 6 6  H" 6 " " $CF 'S 0# C5 & 1 T  T" 11# $ E 1) 1)T 6   10# C5T 6 SF Q (# CF 6  0# C5 &  5@7   u ) 1 ) 42 # 6 1) 1)T 1) 1)T ) #1#  1T G & 1 T  T 11# $ E2 ) #1#  1T 1)T ) #1#  1T HE5 ' " 6  "4CF 7F F07  @FR&  5@7   F $ #!  %"8  2 1T  T 11# #! " 6  "" $@F  $ CF@7  )#1#  1T

Adio: A adio de matrizes uma das operaes fundamentais. Para

 

         A        '     HG



  

acima, ento a operao de adio



    

que so onze no total.

trivial. Deste modo, se

tipo da matriz e os dados que ela armazena, e especicar as suas entradas,

realiz-la quando as matrizes esto distribudas, essa tarefa pode no ser

so matrizes das classes que discutimos

atribui a

mentos das matrizes

e , sendo que pode haver uma redistribuio dos a soma dos ele-

 



 

W X2 G W E ) #1#  ! T % (&  F@H  " U G D ! T 6 D ! T HE 3" %3 6 D)4# ! T  T11# 6 D)4# ! T 70"2   6  "$@F '@"A  & ) @" "D 4# #T G HE 0# 0# %# 0# 1) 6 1) 6 D)4# ! T  T11# 6 D)4# ! T 70"2   6  "$@F '@"A  & ) @" "D t 4# #T u GHS0"2   6  "$@F '@"A  & ) @" "D F E D)4# ! T  T11# 6 D)4# ! T 4# #T G D ! T 6 D ! T 6 D)4# ! T HE 3" %3" '@"A  & ) @" "D 4# #T 8 G HE (# 0# %# 0# '@"A  & ) @" "D t 1) 6 1) 6 D)4# ! T 4# #T 2 G E D)4# ! T HI@"A  & ) @" "D n 4# #T G HE ) CF@7  "! 6 C#F@7  " H"3 F07  "  F" #1#   T  ) 1#  ! T & AT1T ) #1#  ! T ) # G HE ) C#F@7  " 6 C#F@7  " V 3 F07  "  F" 1#  ! T  ) 1#  ! T & T1T ) #1#  ! T ) # GHE ) CF@#7  "T 6 CF@#7  " & 3 F07  "  F" #1  !  ) # 1   ! T T1T ) #1#  ! T ) # G  ) #1# HE CF@7  "! & 3 F07  "  T T1T ) #1#  ! T GVEF 6 Q4 6 6  &'" 6   "$1C5 'ES2 0# CF)   6  ! T  T 1 # $  1) 1 T 6 1 1 T 42 # ) 1 T F  )0# CF)  6 SF 6 10# C5) 6  0# CF)  &  F07  " u 1) 1 T ) #1#  ! T GE ! T   T 1 1# $ 2 #1# VF &'" 6   " $CF 'EF3)CF@7  "CF) R&  F07  " F ! T 1 T ) #1#  ! T $ #!  %"8  2 #! " $  5@7  "  ) #1#  ! T

Subtrao: essa operao anloga descrita para a adio, sendo que

dados, uma vez que a atribuio usa o operador de atribuio que descreve-

 

  

 

   

    '  

 

 ! T C

6 " " C5  T1 1#


 $



  



    

 

mos acima.

neste caso, a operao

resulta que a matriz

Multiplicao: Neste caso, a operao

mentos da operao

armazena em os elemenpossuir os ele-

 

tos da multiplicao das matrizes

e . claro que neste caso, o nmero

A H
G



desse mtodo utliliza as rotinas do PBLAS, sendo que elas necessitam de dezoitos elementos como entrada. Esses mtodos favorecem o processo de programao, pois a utilizao das rotinas do PBLAS e do ScaLAPACK podem ser complexas, devido nomenclatura, ao alto nmero de rotinas (para diferentes tipos de matrizes e diferentes tipos de dados h rotinas diferentes) e interface complexa, j que necessrio um alto nmero parmatros na chamada das rotinas. Portanto o uso de orientao ao objeto ajuda na simplico da interface de uso das rotinas do ScaLAPACK e ajuda no desenvolvimento de programas.

H alguns detalhes de uso do ScaLAPACK que tornam seu uso complexo, como no caso na denio do espao de trabalho utilizado na diagonalizao das matrizes. Uma forma de denir esse espao chamando a rotina de diagonalizao,

ScaLAPACK calcula automaticamente o espao necessrio sendo necessria nova chamada da rotina para efetuar a diagonalizao da matriz. Essa dupla chamada da funo feita automaticamente na implementao da biblioteca POOLALi, no sendo necessrio, ao usurio da classe, se preocupar com esses detalhes. Alm disso, algumas variveis necessrias nas chamadas das rotinas de diagonalizao so inicializadas internamente na implementao da classe, sendo que na chamada do mtodo de diagonalizao so necessrias no mximo quatro entradas, ao invs das vinte e nove necessrias na chamada das rotinas do ScaLAPACK. No prximo captulo vamos mostrar um exemplo real da utilizao da bibli-

como a

atribuindo s variveis

o valor -1. Com isso, o

AE F CE  I

&65 87(3 '

( 8 ' 52 (

) 3 " 0' &

de colunas de

deve ser igual ao nmero de linhas de . A implementao

 

 

  

0 ' 2

    

P F F @ 9D

"

"

oteca POOLALi e comparar essa aplicao com uma implementao do mesmo problema usando as rotinas do ScaLAPACK sem qualquer orientao ao objeto, onde vamos analisar o nvel de overhead que a orientao ao objeto introduz e o desempenho que ela oferece.

 

 

  

    

Conforme discutimos no captulo anterior, a bibliteca POOLALi utiliza as rotinas do ScaLAPACK em sua implementao para realizar as operaes de lgebra linear. Deste modo, o uso das classes que compem a biblioteca introduz um overhead em relao ao uso do ScaLAPACK da maneira tradicional. Por isso, importante analisarmos a inuncia desse overhead no tempo de processamento. Neste captulo, vamos discutir um problema de fsica do estado slido que foi implementado usando o ScaLAPACK da maneira tradicional e usando o a biblioteca POOLALi. Vamos comparar as duas implementaes e avaliar o desempenho da biblioteca que desenvolvemos.

Em fsica quntica, so comuns os problemas que tratam de matrizes com alto nmero de elementos. Uma das reas importantes em que essa necessidade comum a fsica do estado slido [59]. O problema que consideramos trata das estruturas semicondutoras baseadas

     "     

  & $8 )

"

& 3'

"

& 7)04  3 0) "



  ! ! 
3
( 8  " ' 5#& 92


! $"

no GaAs e nitretos semicondutores. Uma das aplicaes desse estudo em computao quntica, na confeco de pontos qunticos. Detalhes dessa teoria e os mtodos utilizados podem ser vistos em [60]. Esse problema um exemplo de aplicao que no possvel de ser resolvida em computadores convencionais, pois para se diagonalizar as matrizes envolvidas no clculo do ponto quntico, necessria uma quantidade de memria RAM superior a 4 Gbytes, o que no est disponvel no computadores convencionais. Deste modo, a paralelizao torna-se fundamental no apenas do ponto de vista do desempenho. O problema em questo, do ponto de vista computacional, pode ser resumido na construo da matriz hamiltoniana que compe o problema e a sua diagonalizao. A matriz hamiltoniana tem a seguinte forma: < jmj k|H|j mj k > KK

... ...

. . . H(K0 )

. . . H(K1 ) H(K0 )

. . . H(K2 ) H(K1 ) H(K0 )

. . . H(K3 ) H(K2 ) H(K1 ) H(K0 )

. . . H(K1 )

H(K3 ) . . . H(K2 ) . . . H(K1 ) . . .

... H(K4 ) . . .

. . .

. . . H(K2 ) H(K1 )

. . . H(K3 ) H(K2 ) H(K1 )

. . . H(K4 ) H(K3 ) H(K2 ) H(K1 ) H(K0 ) . . . . . . . . . . . . . . . ... . . . . . .

Cada H(Ki ) na matriz corresponde a uma matriz 8 8, que a soma dos termos de energia cintica, culombiana e do potncial de troca e correlao. H(Ki ) = Hkp (Ki ) + VC (Ki ) + VXC (Ki )

Para a energia cintica, essa matriz 8 8, o hamiltoniano de Kane, dada por:

 

 

 

     

   

 

 

HpK (K)

Eg + A(k + K)2 0 iP
2P 3 z

0 Eg + A(k + K)2 0 i
1P 3 2P 3 z

iP+ 0 Q S R

2P 3 z 1P 3 +

i i

1P 3 2P 3 z

0 P 0 R S

i i

1P 3 z 2P 3 + i S 2

S T 0 R
i (Q T ) 2 3 S i 2

R 0 T S i
3S 2

2R

2P 3 1P 3 z

i 0 i

1P 3 +

P+
1P 3 z

0
i S 2

2P 3 1P 3 z

Q 2R

i (Q T ) 2 3 S i 2

2R

3S i 2 i (Q T ) 2 i S 2

1 (Q + T ) 2

0
1 (Q + T ) 2

A energia de gap dada por: Eg = E c E v

sendo Ec e Ev as energias de fundo de banda de conduo e do topo da banda de valncia, respectivamente. a energia de seprao da banda de buracos split-off. Os demais termos da matriz so dados por: P = P [(kx + Kx ) i(kx + Ky )], Pz = P (kz + Kz ), Q= T =
  

A matriz do potencial dada por:

 

h2 (1 2 )[(kx + Kx )2 + (ky + Ky )2 ] + (1 + 22 )(kz + Kz )2 , 2m0 h2 S=i 3[(kx + Kx ) i(ky + Ky )](kz + Kz ), 2m0 h2 R= 32 [(kx + Kx )2 (ky + Ky )2 ] 2i3 (kx + Kx )(ky + Ky ). 2m0


 

h2 (1 + 2 )[(kx + Kx )2 + (kx + Ky )2 ] + (1 22 )(kz + Kz )2 , 2m0

 

, 3

2P 3 +

2R

i (Q T ) 2

i S 2



 

 

     

   

 

 

VK

0 VK 0 0 0 0 0 0

0 0 VK 0 0 0 0 0

0 0 0 VK 0 0 0 0

0 0 0 0 VK 0 0 0

0 0 0 0 0 VK 0 0

0 0 0 0 0 0 VK 0

0 0 0 0 0 VK

0 0 0 0 0 0

VC (K)

O clculo de VK pode ser visto em [60]. J a matriz que dene o potencial de troca e correlao dada por: VXC (K)

Eg + A(k + K)2 0 0 0 0 0 0 0 0 Eg + A(k + K)2 0 0 0 0 0 0 0 0 Q S R 0 0 0 0 0 S T 0 R 0 0 0 0 R 0 T S 0 0 0 0 0 R S Q 0 0 0 0 0 0 0 0
1 (Q + T ) 2

0 0 0 0 0 0 0
1 (Q + T ) 2

Com esses valores denidos, implementamos o programa que diagonaliza essa matriz.

Para comparar o desempenho fornecido pela POOLALi com o uso padro do ScaLAPACK implementamos duas verses de um programa que diagonaliza a matriz hamiltoniana descrita anteriormente. A primeira verso usa o procedimento padro de construo de softwares usando o ScaLAPACK. J a segunda utiliza a biblioteca POOLALi e seus recursos de orientao ao objeto.

2 t

 

0 0

 

&65 87#3 '

 %

( '8 2 (

 

  

"

Como estvamos interessados apenas na anlise de desempenho da biblioteca que criamos e no nos resultados obtidos para o hamiltoniano, descrito anteriormente, implementamos um programa que constri essa matriz hamiltonia considerando sua parte imaginria nula, sendo a matriz simtrica neste caso. O cdigo da inicializao da grade de processos usando as rotinas do BLACS mostrado na gura 6.3, e usando a biblioteca POOLALi na 6.4. Conforme discutimos no captulo anterior, a biblioteca POOLALi ofereceu uma grande simplicao do cdigo na construo da grade de processadores. Parte do cdigo da construo da matriz usando a biblioteca POOLALi mostrado na gura 7.1 e na gura 7.2 mostrada a construo de modo tradicional. A diferena entre o cdigo usando a POLALi e uma verso seqencial est ape

nas na instruo

, que deve ser substituda

LALi possibilita a construo de matrizes de forma bastante parecida com a forma seqencial, o que facilita o desenvolvimento do cdigo.

 

 

 

   

W W G E ) 6  6V#(& 1 7  H(Q F )T # E 6 #& # 1  E "  G  %  0# Q" G 1) & T  E " # G # G # 0# Q" 1) & T G "6 6 4 6 Q Q F F5   " E 6 & #1 #1  ! T



 



2 9 FF   "  CF05 #1  )#

   

A G 

por

. Assim, vemos que a biblioteca POO-

  
&      $ 

B I B 5  I $(F  I IE B I B 5 I I E  I

 %

 

8 F

  

 

 

 


  




    %



 



   R

 A G

2 8 2 n2 2 2 u t F 8 2 t n u F 8

W W W G VE ) 6  V(& 1 7  ' #  F 6# )T # #1 G Q @V  !)A G Q  B# ! A G S1   !) G 0  ! 1 G E !)AT & 3 TT & E1)# VE E @F) '$ & " VF0R&  GVE EE ! A5) '3  & " VF0R& T & TT & E1)#  E E 5I 5  & 3E I  & & " # T 22  T GHE C$ Q" & F0(& 5 E !)3 & TT E1)# GHE  3  Q" & F0(& E ! & TT E1)#  G  VR6  6  6  % 7" QI0# 6# 6 6 6  1)  E "  G  %  0# Q" G 1) & T  E " # G # G # 0# Q" 1) & T G "6 6 4 6 Q Q F F5   " E 6 & #1 #1  ! T

2 9 FF   "  CF05 #1  )#

 

 %

 

A diagonalizao da matriz usando a biblioteca POOLALi bastante simples, mostrada na gura 7.3.

os autovetores da matriz. Na gura 7.4 mostrada essa mesma operao

usando as rotinas do ScaLAPACK.

nmero de entradas para efetuar a diagonalizao da matriz. Alm disso, para clcular o espao de necessrio para a diagonalizao, a rotina essa funo deve ser

valor menos um. Com isso, a funo calcula automaticamente o espao necessrio


e armazena esse valor nas variveis

Comparando os cdigos das guras 7.3 e 7.4, notamos que a biblioteca POOLALi oferece uma grande simplicao na construo do cdigo, alm de tornar o cdigo mais amigvel, j que o nome do mtodo

mais intuitivo do que

A orientao ao objeto ofereceu um alto nvel de simplicao no cdigo e oferece uma interface mais amigvel do que a construo de softwares usando as rotinas do ScaLAPACK. Em nossa implementao, consideramos apenas as rotinas de diagonalizao de matrizes. No entanto, esse mesmo resultado pode ser

o nome da funo

ABF$H@ @I

chamada primeiramento com os valores das entras

C   C  E I E CE 8 CE  I

Conforme notamos na gura 7.4, a rotina

APF F @ 9D

APF 8 @ 9D

 &&

No

cam armazenados os autovalores da matriz e no objeto

necessita de um elevado

denidas com

 

 

 

 

  



  

G E 6 D 4# )4# #1 H') 0" & @"  F G "" & S @" E! T ) D)4# G D 4# ! T %) @"A " GE H 6 6 4 6 6 VF5   " & #1  ! T

   

P CBFH@ &E E  @I 

 %
 T 

A H

  G

G@ 8H

2 u 8 F

que foi descrito em 2.2, variando o tamanho a matriz e o nmero de processadoexecutamos o programa descrito anteriormente em um cluster de computadores, tinas do ScaLAPACK. Para vericarmos o desempenho da biblioteca POOLALi,

D H E 81P @ @
&
5

 

  




  

G ET")# H0F2 6  4 6 @F # 1 6 # '"" # 6 2 6  # 6  2 6 Q  Q4 2 PT # PT PT PT 6  6 6Q F2 Q 7#2 %@ 7D 2 6 !2 %CF2 6 0F2 %F2 # 6 6 "T 6 D)4# 6  ) 1 ) 6 T1! # 6 # 6 2 '2 6  6  2 6 CF2 %  6 2 6 2 6 2 Q# 2 7!  "  D 6 D  # 6 ) T 4) 6 !T & D G  0# I  # PT # 1) ) PT G " ) PT ! T  PT G #   PT  1 PT # GEPT  1 & 1) HF  @A Q(#  PT G ET")# H0F2 6  4 6 @F # 1 6%#" #86 T 2 6  # 2 6  2 Q  2 Q  Q4 2 P # PT 1 PT 6 PT  1 6  6 6Q 52 6 7"#T2 6%@ 7D 2 6 !2 %CF2 6 0F2 %F2 # 6  D)4# 6  ) 1 ) 6 T1! # 6 # 6 2 'D2 6  6  2 6 CF2 %  6 2 6 2 6 2 Q# 2 7!  "  D 6 # 6 ) T 4) 6 !T & D G T F0F) "S4 )AT ! T )  G )AT) ) 1 T F@F@A 0# 1 ) S CFC# G ) 0# I " # 1) ) # G  #  1 6 A 0# PT  PT # 1) G  1 6  A " PT  PT ! T G F 86   0IFC PT #  PT 1)# #11 T) ) 1  #D#D T 3 "  )   "F $3


 

A orientao ao objeto oferece um nvel de

obtido para as demais operaes permitidas pelo ScaLAPACK.

maior do que o uso das ro-

2 ' (
"

"

) 3 8


"



  

   

 

H A
G

2 u t F 8 2 t n u F 2 8

      

res. Fizemos as mesmas medidas para a verso do programa usando as rotinas do ScaLAPACK e obtivemos os grcos mostrados nas guras 7.5, 7.6, 7.7 e 7.8. Conforme notamos, h pouca diferena entre os tempos de clculo usando o ScaLAPACK tradicional ou usando a biblioteca POOLALi, o que mostra que o overhead que a programao orientada ao objeto adiciona no inuencia no desempenho do programa. Um fator importante observado nos grcos que h variaes no tempo de processamento de acordo com a congurao da grade. Como variamos o nmero de processos de 4 a 16, usamos as conguraes da grade conforme mostrado na gura 7.9. Conforme notamos nos grcos das guras 7.5, 7.6, 7.7 e 7.8, em alguns casos o aumento no nmero de processadores implica em tempo maior de processamento. Isso se deve ao fato de que as grades quadradas apresentam melhor

1560 1560

  



   

   

 

      
 

A H G

  


1800 1800

2040 2040



   

   

 

 

A H G



   

   

 

 

A H G

      

      

 

 

  



  

 

  

  

A G 

 


2600 2600



   

   

 

 

A H G

      

desempenho do que as retangulares, que por sua vez apresentam um desempenho melhor do que as grades em uma dimenso. Essa variao de desempenho devido a tempo de comunicao entre processadores vizinhos. Tambm observamos nos grcos que as matrizes diagonalizadas com maior nmero de elementos, obtm melhor desempenho quando aumentado o nmero de processadores, pois h um maior nmero de computaes locais. Para vericarmos o ganho oferecido pela POOLALi, construmos a curva de speed-up, que mostrada na gura 7.10. Conforme observado, para 16 processadores, o ganho em relao execuo seqencial aproximadamente 12. Analisando os resultados obtidos, vemos que a utilizao da biblioteca POOLALi favoreceu o desenvolvimento de programas de lgebra linear paralelos e ela ofereceu desempenho anlogo ao oferecido pelas rotinas do ScaLAPACK usado de modo tradicional. Portanto os recursos oferecidos pelas tcnicas de orientao

2600 2600

 

 
   


 

      


 

A H G

ao objeto podem ser largamente usados na construo de bibliotecas paralelas que utilizem em sua implementao bibliotecas j existentes que no ofeream uma interface amigvel, como zemos com o ScaLAPACK.

 


      

O uso de orientao ao objeto uma forma de diminuir a distncia intelectual entre o problema de lgebra linear e sua implementao paralela. Essa metodologia oferece um alto nvel de abstrao em lgebra linear e fornece recursos de encapsulao dos detalhes de implementao. Neste trabalho, observamos que a construo de bibliotecas usando orientao ao objeto pode oferecer um nvel de abstrao maior do que qualquer outra metodologia. As bibliotecas tradicionais de lgebra linear oferecem recursos que facilitam o processo de programao. No entanto, a diferena entre a descrio matemtica do problema e sua implementao bastante grande. Conforme foi discutido, as rotinas que constituem o pacote ScaLAPACK oferecem bom desempenho na resoluo de problemas de lgebra linear usando paralelismo, mas as suas interfaces, detalhes de construo da grade de processos e a nomenclatura das rotinas so os grande obstculos que desestimulam seu uso. A biblioteca POOLALi, que utiliza as rotinas do ScaLAPACK e suas bibliotecas auxiliares em sua implementao, uma soluo para essas limitaes do ScaLAPACK, j que a interface das classes bastante simplicada e a nomenclatura dos mtodos bastante intuitiva. Alm disso, ela no oferece perda de desempenho nas chamadas das rotinas do ScaLAPACK, conforme notamos na

! !   

 

 

anlise de desempenho discutida no captulo 7.

O prximo passo imediato desse trabalho a extenso da biblioteca POOLALi para todos os mtodos de resoluo oferecidos pelo ScaLAPACK, como a resoluo de sistemas lineares, problemas de mnimos quadrados, fatorizao LU, fatorizao ortogonal, inverso matricial, etc, utilizando na implementao dos novos mtodos as rotinas descritas no apndice B. Essa implementao anloga que desenvolvemos neste trabalho, sendo necessria a criao de novas classes de matrizes, como as matrizes de banda, tridiagonais, ortogonais, triangulares, unitrias, esparsas e matrizes gerais. Alm disso, h a possibilidade de desenvolver classes

Uma outra possibilidade utilizar outras bibliotecas paralelas para implementar mtodos que realizem operaes no oferecidas pelo ScaLAPACK, como as bibliotecas utilizadas na resoluo de equaes diferenciais, como a [61], ou mesmo biblioteca usadas em aplicaes especcas, como as de fsica das partculas.



para as matrizes

 
" #

&

" 7' #& 433 6 6 " 58

@ FCEG 

 

 


 

"

 

! $"

[3] L.S. Blackford, J. J. Dongarra, and R. C. Whaley. ScaLAPACK Users Guide. Siam - Society for Industrial and Applied Mathematics, 1996.

[5] Jeremy G. Siek and Andrew Lumsdaine. The matrix template library: A generic programming approach to high performance numerical linear algebra. In ISCOPE, pages 5970, 1998. [6] Alex Stepanov and Meng Lee. The Standard Template Library. Hewlett Packard Laboratories, 1501 Page Mill Road, Palo Alto, CA 94304, February 1995. [7] Frank B. Brokken. C++ Annotations. University of Groningen, 2001. Dis

&& ('&



   

[9] ARPACK++,

$ @   !  %FE & 9 

@D  A@G E  G  I 

!

 

  

[8] IML++,

I I  F!1P  9 5B



  

ponvel no endereo:

9 9        G 9 G ADB '& E  A@G IG

   



   

[4] ScaLAPACK,

@D I$ "   I @ FFB F! # !CE  F HB 



   

[2] Implementaes do MPI,

  



[1] Wikipedia, the free encyclopedia,

 
. . .

  !    
   @D 'FB    D I  CE (D      I @I I 

   &  

G 8 E

[10] J. Dongarra, A. Lumsdaine, R. Pozo, and K. Remington. A sparse matrix library in c++ for high performance architectures. In Second Object Oriented Numerics Conference, pages 214218, 1994. [11] SparseLib++


Sparse

Matrix

Class . .

Library,

Users

Guide.

[16] Goose:


The

GNU

[18] J. J. Dongarra, J. R. Bunch, C. B. Moler, and G. W. Stewart. LINPACK Users Guide. SIAM Press, 1979. [19] B. T. Smith, J. M. Boyle, J. J. Dongarra, B. S. Garbow, Y. Ikebe, V. C. Klema, and C. B. Moler. Matrix eigensystem routines: Eispack guide. In Lecture Notes in Computer Science, volume vol. 5. Springer-Verlag, 2 a edition, 1976. [20] E. Anderson, Z. Bai, C. Demmel, J. Dongarra, and J. Du Croz. LAPACK Users Guide. SIAM Press, 2a edition, 1995. [21] BLAS Technical Forum. Document for the Basic Linear Algebra Subprograms Standard, August 2001.



   

[17] The Objetct-Oriented Numerics Page,

B !CE 9 G (E  B   I @ 

  

A@8 %A@9 9 

  % &   

@ HE



9 AE B



[15] Scilab home page,



   

[14] FTensor,

Object-Oriented

Statistics .

Environment,



[13] The Template Numerical Toolkit (TNT),

E    C I G 9    CEAB8 !CE 9 G (E  B 9 @   I @  B !1P  9 B  !  I 9  



[12] Mv++,

#& $(&
 
.

&F !1  9 5B   P P I     I 9 9  I   F @ E  F!1P 9 B   

  " "!     

   !

   

[23] Jack J. Dongarra, Roldan Pozo, and David W. Walter. LAPACK++: A design overview of object-oriented extensions for high performance linear algebra. In Proceedings of the Object Oriented Numerics Conference. IEEE Computer Society Press, 1993. [24] Jack J. Dongarra, Roldan Pozo, and David W. Walker. An object-oriented design for high performance linear algebra on distributed memory architectures. In Proceedings of the Object Oriented Numerics Conference. IEEE Computer Society Press, 1993. [25] William H. Press, Saul A. Teukolsky, Willian T. Vetterling, and Brian P. Flannery. Numerical Recipes in C: The Art of Scientic Computing. Cambridge University Press, 2a edition, 1992. [26] Harold S. Stone. High-Performance Computer Architecture. Addison-

Wesley Publishing Company Inc, 1993. [27] Andrew S. Tanembaum. Organizao Estruturada de Computadores. Livros Tcnicos e Cientcos, 3a edition, 1999. [28] Gordon E. Moore. Camming more components onto integrated circuits. Eletronics, 38, 1965.
 

[30] Iam Foster. Designing and Building Parallel Programs. Addison Wesley, 1995. [31] D. E. Culler, J.P. Singh, and A. Grupta. Parallel Computer and Architecture: A Hardware/Software Approach. Morgan-Kaufman, 1999.

   

[29] Intel,

1BG FI F E A@8FAE G   8 4B$I I 9 G  9@ @



 



[22] BLAS home page,

& (&

9   I @ 8$ AE  F HB 

  " "!     

   !

[32] G. S. Almasi and A. Gottlieb.

Highly Parallel Computing.

Benja-

min/Cummings Pub. Company, Redwood City, CA, 1989. [33] Willian Stallings. Arquiteturas e organizao de computadores. Prentice Hall, 5a edition, 2002.

[36] Jacek Radajewski and Douglas Eadline. Beowulf HOWTO, November 1998.


[39] Sisal - A High Performance, Portable, Parallel Programing Language,

[40] K. A M. Ali. Execution of prolog on a multi-sequential machine. Jornal of Parallel Programing, 1998. Proc. of Implementation of Functional Language.


[42] MPI Forum.

The Message Passing Interface Standard, . implementation of

[43] Mpich

portable

[45] MPI Forum. MPI-2: Extension to the Message-Passing Interface, 1997.

    

[44] LAM/MPI Parallel Computing,

CE 5 I



IG

      P (I !A 

   

[41] PVM - Parallel Virtual Machine,

  

P  CE   F B  I @



   

[38] Haskell, A Purely Functional Language,

AE H 8 @ 9 

! 

9 F9 !1P  B  I   

    ( '$

CE CE   I

AB 9  B G I

 

 



[37] Beowulf,

. .



  

CE

[35] Top500 supercomputer sites,

  





[34] The earth simulator center,

. 1995.

mpi,

& (&

EC      G@ 9  9    H8  8@ 

  " "!     

@ H 





   !

           

[46] Gene H. Golub and Charles F. Van Loan. Matrix Computations. The Johns Hopkins University Press, 3a edition, 1996. [47] Claude Cohen-Tannoudji, Bernard Diu, and Franck Lalo. Quantum Mechanics. A Wiley-Interscience Publication, John Wiley Sons, 2a edition, 1977.

[49] E. Caron, S. Chaumette, S. Contassot-Vivier, F. Desprez, E. Fleury, and C. Gomez. Scilab to Scilab// . The Ouragan Project, September 2002.


[51] L. Dongarra and R. Van De Geijn. Two dimensional basic linear algebra communication subprograms. In Computer Science Dept. Technical Report, pages 91138, 1991. [52] L. Dongarra and R. C. Walker. Users guide to the blacs v1.1. In Computer Science Dept. Technical Report, pages 95281, 1995. [53] Bjarne Stroustrup. The C++ programming language. Addison-Wesley, 2nd edition, 1991. [54] Royal Software Corporation. Unied Modeling Language: Notation Guide, version 1.1 edition, 1997. http://www.rational.com/uml/1.1. [55] Peter Mller. Introduction to Object-Oriented Programming Using C++. Globewide Network Academy (GNA), November 1996. [56] Bruce Eckel. Thinking in C++, volume 1. Mind View Inc, 2 n d edition, 1999.

 



[50] PBLAS,

9   I @ H  AE  F HB 



   

[48] LAPACK,

& (&

G   I @  8 CE  8 HB

  " "!     

   !

[57] Bruce Eckel. Thinking in C++, volume 2. Mind View Inc, 2 n d edition, 1999. [58] Brian Hayes. The Post-OOP Paradigm. American Scientist, 91(2):106110, march-april 2003. [59] Robert Eisberg and Robert Resnick. Fsica Quntica. Campus, 1979. [60] Guilherme Matos Sipahi. Teoria do connamento de buracos em heteroestruturas semicondutoras do tipo delta-Dopping. PhD thesis, Universidade de So Paulo, Instituto de Fsica, So Paulo, 1997.

[62] Willian Group and Ewing Lusk. Installation Guide to MPICH, a Portable Implementation of MPI. Argone National Laboratory, Mathematics and Computer Science Division, University of Chicago.


[64] R. Clint Whaley. Installing and testing the BLACS v. 1.1. Technical report, U. S. Department of Energy, May 1997. [65] L. S. Blackford, J. Dongarra, and J. Demmel. Instalation Guide for ScaLAPACK. Technical report, National Science Fundation, August 2001.

   

[63] BLACS,

9G  I @ F8 CE   F B 

 '  



  

[61] Nag parallel library,

& (&

G B

  " "!     

   !

A instalao do ScaLAPACK pode ser dividida em diversas fases, uma vez que necessita de diversas bibliotecas auxiliares na sua execuo. Vamos discutir cada passo da instalo.

Como usamos a biblioteca MPICH, vamos descrever seu processo de instalao de forma simplicada, sendo que maiores detalhes podems ser encontrados em [62]. O cdigo fonte do MPICH pode ser obtido em [43]. Inicialmente nessrio a descompactao do arquivo fonte do MPICH:

A seguir necessria a congurao do MPCHI, que dada pelo comando

sendo que h vrias opes de congurao, tais como a escolha da arquitetura que ser usada ou mesmo o tipo de sistema de arquivos usado. Essas opes podem ser vistas em [62].

4 3 21 0(& $ % ""    ) ) ' $ # !   a`  Hc P RaUyP yPxqaUts bX  s W ubx  wvQ`IiwvuQc  f V f PH f dca`X VUTR PH rhqpiIhGgeQbYWQSQIG & w'& F DB (ECA @ 9875 6
.

 

Aps a congurao necessria a compilao do MPICH, que feita usando o comando

Para vericao da instalao pode-se executar alguns programas de teste, localizados no diretrio

O arquivo de instalao do SCALAPACK pode ser encontrado em [4]. A sua descompactao pode ser feita com o comando

No entanto, antes da congurao do ScaLAPACK necessria a instalao do BLACS, cujo cdigo fonte est disponvel em [63]. Sua descompactao feita pelo comando

e sua compilao feita aps a congurao do arquivo

, onde os

caminhos da biblioteca MPICH e do ScaLAPACK devem ser especicados. Com o comando

feita sua compilao e construo de sua biblioteca. Detalhes de congurao podem ser vistos em [64]. Outro pacote necessrio para instalao do ScaLAPACK o BLAS, que possui seu cdigo fonte em linguagens C e Fortran77, ambos disponveis em [22]. A sua instalo feita descompactando o arquivo fonte,

& (&

c t fa IH X & y

Vq  Hc VUT PH rr fG c H ` H iW rrQR iIG

Vq c a`X VUT PH WrhGf WIH  br2WrQR iIG

q s f IH 2IH X y X  y a`X y brYIH X

ca  `XHR dca` QrIH  Iy ruiy  eQbX

$ %D

5 A 5 #(D " 5

     #  !  75 6

e a compilao da biblioteca, no caso da verso escrita em Fortran77, pode ser feita usando o comando

Com os arquivos objeto, a biblioteca construda por

Com esses processo concludos, a instalao do ScaLAPACK pode ser na!

lizada, congurado o arquivo mando

e fazendo sua compilao pelo co-

Detalhes da instalao da instalao podem ser vistos em [65]. A vericao do sucesso da instalao pode ser feita executando-se programas exemplos disponveis em [4].

& (&

fs

Vq VUTR PH W fG IH  WQSQIG hUf Q c fH


     

c t fa y H uH #  X "

y IH X

" IH v 

Pc P u(iH

     # 

A seguir so descritas as rotinas do ScaLAPACK associadas a cada tipo de matrix.

Equaes lineares: Resolve um sistema de equaes lineares do tipo AX = B (sem pivotamento). H rotinas para Simple Drive (SV) e Expert Drive (SVX) PSDBSV, PSDBSVX, PCDBSV, PCDBSVX, PDDBSV, PDDBSVX,PZDBSV, PZDBSVX.

Equaes lineares PSDBTRF, PCDBTRF, PDDBTRF, PZDBTRF: Calcula a fatorizao LU de uma matriz de banda geral sem pivotamento.

% &7653 20)'&$"! 1 (  4  1#   (  %  #      

4 3 21 0(& $ % ) ) '

 

  Q
y# $x

b R YH X W U F v s Y UH X s X W i g U cq`trSIwDaSCtutrqph$f

b R YH X W U F F R PH F ca`I3SVATSQIGE

4   68 B@ B@ CDCA9 d@ B@ eDCA9

86

PSDBTRS, PCDBTRS, PDDBTRS, PZDBTRS: Resolve um sistema de zao LU computada por PxDBTRF.

equaes lineares AX = B, AT X = B ou AH X = B, usando a fatori-

PSDBCON, PCDBCON, PDDBCON, PZDBCON: Estima o recproco do nmero condicional k(A) = ||A||.||A1 ||. Necessita da norma da matriz original A e a fatorizao retornada por PxDBTRF. PSDBRFS, PCDBRFS, PDDBRFS, PZDBRFS: Calcula os limites de erro no clculo da soluo ( retornada por PxDBTRS) e rena a soluo para reduzir o erro. Necessita que as matrizes originais A e B, a fatorizao retornada por PxDBTRF e a soluo X retornada por PxDBTRS. PSDBEQU, PCDBEQU, PDDBEQU, PZDBEQU: Calcula os fatores de escala para equilibrar A. Essas rotinas no atuam realmente na escala da matriz. Rotinas auxiliares como a PxLAQDB podem ser usadas pra esse propsito. PSDBTRSV, PDDBTRSV, PCDBTRSV, PZDBTRSV: Resolve ums sistema triangular de equaes lineares. A rotina PxDBTRF deve ser chamada primeiro.

Equaes lineares: PSGTSV, PSGTSVX,PCGTSV, PCGTSVX, PDGTSV, PDGTSVX, PZGTSV, PZGTSVX

x#x

#  #   (  % % 0"! 02&'"$% &$ %

b R YH X W U F F R PH F ca`I3SVATSQIGE

!     #"  #

B d@ C@ eA9

6

Equaes lineares PSGTTRF, PCGTTRF, PDGTTRF, PZGTTRF: Calcula a fatorizao. PSGTTRS, PCGTTRS, PDGTTRS, PZGTTRS: Usa a fatorizao para resolver o sistema AX = B por substituio. Necessita da fatorizao retornada por PxGTTRF. PSGTCON, PCGTCON, PDGTCON, PZGTCON: Estima o recproco do nmero condicional k(A) = ||A||.||A1 ||. Necessita da norma da matriz original A e a fatorizao retornada por PxGTTRF. PSGTRFS, PCGTRFS, PDGTRFS, PZGTRFS: Calcula os limites de erro na computao da soluo (retornada por PxGTTRS) e rena a soluo para reduzir o erro. Necessita das matrizes originais A e B, da fatorizao retornada por PxGTTRF e a soluo X retornada por PxGTTRS.

Equaes lineares PSDTTRF, PCDTTRF, PDDTTRF, PZDTTRF: Calcula uma fatorizao LU de uma matriz tridiagonal geral sem pivotamento. PSDTTRS, PCDTTRS, PDDTTRS, PZDTTRS: Resolve um sistema de equaes lineares AX = B, AT X = B ou AH X = B, usando fatorizao LU calculada por PxDTTRF.

##x

(4  1 4 ( % 683  0w 

1  #   #   (  %  3c"!A0'&2% $% %

 "!  !            !    

b R YH X W U F v s Y UH X s X W i g U cq`trSIwDaSCtutrqph$f b R YH X W U F v s Y UH X s X W i g U cq`trSIwDaSCtutrqph$f

B@ @ Cr"!A9

d d@ e@ eA9
 

PSDTCON, PCDTCON, PDDTCON, PZDTCON: Estima o recproco do origial A e a fatorizao calculada por PxDTTRF. PSDTRFS, PCDTRFS, PDDTRFS, PZDTRFS: Calcula os limites de erro na computao da soluo (retornada por PxDTTRS) e rena a soluo a m de reduzir o erro. Necessita das matrizes originais A e B. a fatorizao retornada por PxDTTRF e a soluo X retornada por PxDTTRS.

nmero condicional k(A) = ||A||.||A1 ||. Necessita da norma da matriz

PSDTTRSV, PDDTTRSV, PCDTTRSV, PZDTTRSV: Resolve um sistema triangular tridiagonal de equaes lineares. As rotinas PxDTTRF devem ser chamadas primeiro. PDDTSV: Resolve um sistema de equaes lineares geral tridiagonal AX = B sem pivotamento.

Equaes lineares: PSGBSV, PSGBSVX, PCGBSV, PCGBSVX, PDGBSV, PDGBSVX, PZGBSV, PZGBSVX

Equaes lineares PSGBTRF, PCGBTRF, PDGBTRF, PZGBTRF: Calcula a fatorizao LU de uma matriz de banda usando pivotamento parcial com troca de linhas. Pode trabalhar em uma matriz produzida por PxGBEQU e PxLAQGB.

#x

#      0u!  $

b R YH X W U F v s Y UH X s X W i g U cq`trSIwDaSCtutrqph$f

b R YH X W U F F R PH F ca`I3SVATSQIGE

 #     !   ! 

B@ @ CaA9 d@ @ eaA9

PSGBTRS, PCGBTRS, PDGBTRS, PZGBTRS: Resolve um sistema de fatorizao LU calculada por PxGBTRF.

equaes lineares de banda (AX = B, AT X = B ou AH X = B, usando

PSGBCON, PCGBCON, PDGBCON, PZGBCON: Estima o recproco do A e a fatorizao retornada por PxGBTRF. PSGBRFS, PCGBRFS, PDGBRFS, PZGBRFS: Calcula os limites de erro na computao da soluo (retornada por PxGBTRS) e rena a soluo de forma a reduzir o erro. Necessita das matrizes originais A e B e fatorizao retornada por PxGBTRF e a soluo X retornada por PxGBTRS. PSGBEQU, PCGBEQU, PDGBEQU, PZGBEQU: Calcula o fator de escala para equilibrar a a matriz A.

nmero condicional k = ||A||.||A1 ||. Necessita da norma da matriz original

Equaes lineares: Simple Drive (SV), Expert Drive (SVX) Resolve um sistema de equaes lineares AX = B PSGESV, PSGESVX, PCGESV, PCGESVX, PDGESV, PDGESVX, PZGESV, PZGESVX Linear Least Square Problems PSGELS, PCGELS, PDGELS, PZGELS: Resolve um sistema linear usando QR ou LQ fatorizao.

#x

b R YH X W U F F R PH F ca`I3SVATSQIGE

#   0"!3 $ $

 !!   " 

B @ C@ A9

PSGELSX, PCGELSX, PDGELSX, PZGELSX: Usa fatorizao ortogonal completa. PSGESVD, PCGESVD, PDGESVD, PZGESVD: Singular Value Decomposition (SVD): Calcula a decomposio de valor singular de uma matriz geral.

Equaes lineares PSGETRF, PCGETRF, PDGETRF, PZGETRF: Calcula a decomposio LU de uma matriz geral usando pivotamento parcial com troca de linhas. Pode trabalhar com matrizes produzidas por PxGEEQU e PxLAQGE. PSGETRS, PCGETRS, PDGETRS, PZGETRS: Resolve um sistema de equaes lineares AX = B, AT X = B ou AH X = B, usando fatorizao LU calculada por PxGETRF. PSGECON, PCGECON, PDGECON, PZGECON: Estima o recproco do original A e sua fatorizao, retornada por PxGETRF. PSGERFS, PCGERFS, PDGERFS, PZGERFS: Calcula os limites de erro na computao da soluo (retornada por PxGETRS) e rena a soluo a m de reduz-lo. Necessita das matrize A e B e a fatorizao retornada por PxGETRF e a soluo X retornada por PxGETRS. PSGETRI, PCGETRI, PDGETRI, PZGETRI: Calcula o inverso de uma matriz geral usando a fatorizao LU calculada por PxGETRF.

nmero condicional k(A) = ||A||.||A1 ||. Necessita da norma da matriz

b R YH X W U F v s Y UH X s X W i g U cq`trSIwDaSCtutrqph$f

 !!  "

d @ e@ A9

PSGEEQU, PCGEEQU, PDGEEQU, PZGEEQU: Calcula o fator de escala para equilibrar uma matriz A. Fatorizao Ortogonal PSGEQPF, PCGEQPF, PDGEQPF, PZGEQPF: Fatorizao QR com pivotamento. PSGEQRF, PCGEQRF, PDGEQRF, PZGEQRF: Fatorizao QR sem pivotamento. PSGELQF, PCGELQF, PDGELQF, PZGELQF: Fatorizao LQ sem pivotamento. PSGEQLF, PCGEQLF, PDGEQLF, PZGEQLF: Fatorizao QL sem pivotamento. PSGERQF, PCGERQF, PDGERQF, PZGERQF: Fatorizao RQ sem pivotamento. Autoproblemas no simtricos PSGEHRD, PCGEHRD, PDGEHRD, PZGEHRD: Reduz uma matriz geral a forma superior de Hessember por uma transformao ortogonal (ou unitria) de similaridade. Decomposio do valor singular PSGEBRD, PCGEBRD, PDGEBRD, PZGEBRD: Reduo bidiagonal.

Problemas lineares de mnimos quadrados (LSE)

x (  #   & % "!&3

 3 (  "  1 # 

  ! !  !  #"   !   #  #"


b R YH X W U F F R PH F ca`I3SVATSQIGE

#  0"! $

$ $

B@ @ Cr A9

PSGGLSE, PCGGLSE, PDGGLSE, PZGGLSE: Resolve LSE usando fatorizaao RQ. PSGGGLM, PCGGGLM, PDGGGLM, PZGGGLM: Resolve problemas lineares de mnimos quadrados generalizados usando fartorizao QR.

Generalized Orthogonal Factorizations PSGGQRF, PDGGQRF, PCGGQRF, PZGGQRF: Calcula a fatorizao QR. PSGGRQF, PDGGRQF, PCGGRQF, PZGGRQF: Calcula a fatorizao RQ.

Autovalores padres e autoproblemas de valor singular. PCHEEV, PZHEEV, PCHEEVX, PZHEEVX: Autoproblemas simtricos (Symmetric Eigenproblem (SEP)). PCHEGVX, PZHEGVX: Autoproblemas generalizados simtricos de nidos (Generalized Symmetric Denite Eigenproblem (GSEP)).

Problemas de autovalores simtricos generalizados denidos PCHEGST, PZHEGST: Reduz um autoproblema generalizado sua forma padro.

b R YH X W U F v s Y UH X s X W i g U cq`trSIwDaSCtutrqph$f

b R YH X W U F v s Y UH X s X W i g U cq`trSIwDaSCtutrqph$f

  % 1 '64 % u!

b R YH X W U F F R PH F ca`I3SVATSQIGE

    !

B@ @ C!A9

d@ @ er A9 d@ @ e!A9

PCHETRD, PZHETRD: Reduz uma matriz hermitina a uma hermitiana tridiagonal por uma transformao de similaridade.

Fatorizao Ortogonal PSORGQR, PDORGQR, PSORMQR, PDORMQR: Fatorizao QR. PSORGLQ, PDORGLQ, PSORMLQ, PDORMLQ: Fatorizao LQ. PSORGQL, PDORGQL, PSORMQL, PDORMQL: Fatorizao QL. PSORGRQ, PDORGRQ, PSORMRQ, PDORMRQ: Fatorizao RQ. PSORGRZ, PDORGRZ, PSORMRZ, PDORMRZ: Fatorizao RZ. Autoproblemas simtricos PSORGTR, PDORGTR, PSORMTR, PDORMTR: Gera uma matriz aps a reduo dada por PxSYTRD. Autoproblemas no simtricos PSORGHR, PDORGHR, PSORMHR, PDORMHR: Reduo de Hesenberg. Decomposio do valor singular PSORGBR, PDORGBR, PSORMBR, PDORMBR: Gera uma matriz aps uma reduo bidiagonal.

b R YH X W U F v s Y UH X s X W i g U cq`trSIwDaSCtutrqph$f

#   (  ( 064

   #

B@ @ CrA9

Equaes lineares: PSPBSV, PSPBSVX, PCPBSV, PCPBSVX, PDPBSV, PDPBSVX, PZPBSV, PZPBSVX

Equaes lineares PSPBTRF, PCPBTRF, PDPBTRF, PZPBTRF: Calcula a fatorizao de Cholesky. PSPBTRS, PCPBTRS, PDPBTRS, PZPBTRS: Resolve um sistema simtrico denido de banda. PSPBCON, PCPBCON, PDPBCON, PZPBCON: Estima o recproco do nmero condicional k(A) = ||A||.||A1 ||. Necessita da norma da matriz original A e a fatorizao retornada por PxPBTRF. PSPBRFS, PCPBRFS, PDPBRFS, PZPBRFS: Calcula os limites de erro no clculo da soluo ( retornada por PxPBTRS) e rena a soluo para reduzir o erro. Necessita que as matrizes originais A e B, a fatorizao retornada por PxPBTRF e a soluo X retornada por PxPBTRS. PSPBEQU, PCPBEQU, PDPBEQU, PZPBEQU: Calcula o fator de escala para equilibrar a matriz A.

   64 c ( % %


 #         #      "  #  !  ! !    !


!   % "'64

% "!& ( !% c! 2% ! 1    4 1 b R YH X W U F v s Y UH X s X W i g U cq`trSIwDaSCtutrqph$f b R YH X W U F F R PH F ca`I3SVATSQIGE

#       % 0u!  '& # B@ @ Cr%$A9 d@ @ er%$A9

 

PSPBTRSV, PDPBTRSV, PCPBTRSV, PZPBTRSV: Resolve os sistema de equaes lineares.

Equaes lineares: PSPOSV, PSPOSVX, PCPOSV, PCPOSVX, PDPOSV, PDPOSVX, PZPOSV, PZPOSVX

Equaes lineares PSPOTRF, PCPOTRF, PDPOTRF, PZPOTRF: Calcula a fatorizao de Cholesky. PSPOTRS, PCPOTRS, PDPOTRS, PZPOTRS: Resolve o sistema de equaes usando a fatorizao Cholesky calculada por PxPOTRF. PSPOCON, PCPOCON, PDPOCON, PZPOCON: Estima o recproco do origial A e a fatorizao calculada por PxPOTRF. PSPORFS, PCPORFS, PDPORFS, PZPORFS: Calcula os limites de erro no clculo da soluo ( retornada por PxPOTRS) e rena a soluo para reduzir o erro. Necessita que as matrizes originais A e B, a fatorizao retornada por PxPOTRF e a soluo X retornada por PxPOTRS.

nmero condicional k(A) = ||A||.||A1 ||. Necessita da norma da matriz

y x   64 c ( % %


  % 1   4 1% '64 % "!& ( ! % c! '!

       "   #  !

b R YH X W U F v s Y UH X s X W i g U cq`trSI)SqS`IutrqpD$f

b R YH X W U F R PH cq`trSVF TS`IF E

B@ B@ C3CA9

d@ B@ e3CA9

y x

86

PSPOTRI, PCPOTRI, PDPOTRI, PZPOTRI: Calcula o inverso da matriz usando a fatorizao Cholesky calculada por PxPOTRF. PSPOEQU, PCPOEQU, PDPOEQU, PZPOEQU: Calcula o fator de escala para equilibrar a matriz A.

Equaes lineares: PSPTSV, PSPTSVX, PCPTSV, PCPTSVX, PDPTSV, PDPTSVX, PZPTSV, PZPTSVX.

Equaes lineares PSPTTRF, PCPTTRF, PDPTTRF, PZPTTRF: Calcula a fatorizao de Cholesky. PSPTTRS, PCPTTRS, PDPTTRS, PZPTTRS: Resolve um sistema usando fatorizao de Cholesky calculada por PxPTTRF. PSPTCON, PCPTCON, PDPTCON, PZPTCON: Estima o recproco do nnal A e sua fatorizao, retornada por PxPTTRF. PSPTRFS, PCPTRFS, PDPTRFS, PZPTRFS: Calcula os limites de erro na computao da soluo (retornada por PxPTTRS) e rena a soluo a m

mero condicional k(A) = ||A||.||A1||. Necessita da norma da matriz origi-

x tx

   64 c ( % %

x                  "  # x  !  !




  % 1    4 1 '64 % "!& ( !% c! 2% ! % b R YH X W U F v s Y UH X s X W i g U cq`trSI)SqS`IutrqpD$f b R YH X W U F R PH cq`trSVF TS`IF E

#   (  %  0)'&2% c4 2& #  % B@ B B@ CSDCA9 d@ B B@ eSDCA9

8 86

de reduz-lo. Necessita das matrize A e B e a fatorizao retornada por PxPTTRF e a soluo X retornada por PxPTTRS. PSPTTRSV, PDPTTRSV, PCPTTRSV, PZPTTRSV: Resolve um sistema de equaes lineares. A rotinas PxPTTRF deve ser chamada primeiro.

Autoproblemas simtricos PSSTEBZ, PDSTEBZ, PCSTEBZ, PZSTEBZ: Autovalores via bisseco. PSSTEIN, PCSTEIN, PDSTEIN, PZSTEIN: Autovetores via iterao inversa.

Autoproblemas simtricos PSSYEV, PDSYEV, PSSYEVX, PDSYEVX Autoproblemas simtricos generalizados PSSYGVX, PDSYGVX

Autoproblemas simtricos

#   (  %  0)'&2% c4 !"c! '% ! % !  % 4 1

b R YH X W U F v s Y UH X s X W i g U cq`trSI)SqS`IutrqpD$f

b R YH X W U F v s Y UH X s X W i g U cq`trSI)SqS`IutrqpD$f

 % 4 1 !"c! '% !

  #  # x    

b R YH X W U F R PH cq`trSVF TS`IF E

B@ d B@ C!"CA9

B@ B@ C3! CA9

d@ B@ e3! CA9

86

86

PSSYTRD, PDSYTRD: Reduz uma matriz a sua forma tridiagonal por uma transformao de similaridade. Autoproblemas simtricos denidos generalizados PSSYGST, PDSYGST

Equaes lineares PSTRTRS, PCTRTRS, PDTRTRS, PZTRTRS: Usa fatorizao para resolver AX = B, AT X = B ou AH X = B.

PSTRCON, PCTRCON, PDTRCON, PZTRCON: Estima o recproco do nmero condicional k(A) = ||A||.||A1 ||. Necessita da norma da matriz original A e a fatorizao retornada por PxTRTRF. PSTRRFS, PCTRRFS, PDTRRFS, PZTRRFS: Calcula os limites de erro no clculo da soluo ( retornada por PxTRTRS) e rena a soluo para reduzir o erro. Necessita que as matrizes originais A e B, a fatorizao retornada por PxTRTRF e a soluo X retornada por PxTRTRS. PSTRTRI, PCTRTRI, PDTRTRI, PZTRTRI: Usa fatorizao ortogonal para calcular a inversa.

b R YH X W U F v s Y UH X s X W i g U cq`trSI)SqS`IutrqpD$f

#    % 2&&'"$%

    

B@ B@ Cr CA9

86

Fatorizao ortogonal PSTZRQF, PCTZRQF, PDTZRQF, PZTZRQF, PSTZRZF, PCTZRZF, PDTZRZF, PZTZRZF.

Fatorizao ortogonal PCUNGQR, PZUNGQR, PCUNMQR, PZUNMQR: Fatorizao QR. PCUNGLQ, PZUNGLQ, PCUNMLQ, PZUNMLQ: Fatorizao LQ. PCUNGRQ, PZUNGRQ, PCUNMRQ, PZUNMRQ: Fatorizao RQ. PCUNGRZ, PZUNGRZ, PCUNMRZ, PZUNMRZ: Fatorizao RZ. Autoproblemas simtricos PCUNGTR, PZUNGTR, PCUNMTR, PZUNMTR. Autoproblemas no simtricos PCUNGHR, PZUNGHR, PCUNMHR, PZUNMHR. PCUNGBR, PZUNGBR, PCUNMBR, PZUNMBR.

x #  % ( 02!

b R YH X W U F v s Y UH X s X W i g U cq`trSI)SqS`IutrqpD$f

b R YH X W U F v s Y UH X s X W i g U cq`trSI)SqS`IutrqpD$f

 %  2% 04 &7

 u$% %

     ! # x

B@ B@ C! CA9

B@ B@ C3 CA9

86 86

b R YH X W U F v s Y UH X s X W i g U cq`trSI)SqS`IutrqpD$f  ! 3c 

 "c4  %

 !  !   ex ! ! 

Autoproblemas no simtricos

PSHSEIN, PCHSEIN, PDHSEIN, PZHSEIN: Autovalores por iterao in-

PSLAHQR, PDLAHQR, PCLAHQR, PZLAHQR: Calcula a fatorizao

b R sHvH W b s YH X U cVF `C`3Ss SaCtuA

PSHSEQR, PCHSEQR, PDHSEQR, PZHSEQR: Fatorizao Schur.

Schur.

d B@ e@ CA9
versa.

B B@ C@ CA9

86

You might also like