Professional Documents
Culture Documents
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
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.
! "
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
1
3.5 4
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
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 . . . . . . . . . . . . . . . . . . . .
Anlise de desempenho da biblioteca POOLALi 7.1 7.2 7.3 O problema de fsica do estado slido . . . . . . . . . . . . . . . Implementao . . . . . . . . . . . . . . . . . . . . . . . . . . . Anlise de desempenho . . . . . . . . . . . . . . . . . . . . . . .
96
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.7.1 B.7.2
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 . . . . . . . . . . . . . . . . . . .
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
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. . . .
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
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. . . . .
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 . . . . . . . . . . . . . . .
.. . . . . .
3.1
2.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-
!" $#!
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-
" #
" #!
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.
"
R PI G ED C A SQ7HF%B@
T PI G ED C A SQ7HF%B@
#! "
uso, descrevendo algumas rotinas e mostrando o mtodo padro de construo de programas que utilizam essa biblioteca.
dos como ferramenta para a construo de softwares numricos que tratam de problemas de lgebra linear.
desempenho em relao ao uso do ScaLAPACK tradicional, onde exibimos as vantagens e desvantagens na utilizao de orientao ao objeto.
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 "
" "
!" $
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)
[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
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
@ 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
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
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
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.
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
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
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 . .. . . .
. . . 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].
# 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 $))
"
&
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
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
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,
G G 8 @ 9
9 9 H 8
nome da funo (
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
'"
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).
" #
# # 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
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
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
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
o nmero de linhas
ou
%
%
"26 2 (2 ) ( (2
#
(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
# $
= 1 : matrizes densas, = 501: matrizes de banda estreita e tridiagonal, = 502: matrizes de banda estreita e tridiagonal de lado direito
Matrizes out-of-core:
= 11.
= 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.
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 )
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.
do ScaLAPACK.
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
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
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
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 $#"
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
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.
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
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.
0 0
0 0 0
0 0 0 0
A=
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.
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
por exemplo. Outra forma de fazermos esta distribuio usar apenas a parte triangular superior da matriz, ou seja,
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
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 0
0 0 0
0 0 0 0
0 0 0 0 0
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
a66 a76
a77
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
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
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
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
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].
PE
P QI A
E A
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
'#
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),
YY: indica o tipo da matriz que ser operada pela funo. As matrizes podem ser: DB: De banda geral diagonalmente dominante,
GE: Geral,
HE: Hermitiana,
OR: Ortogonal,
SY: Simtrica,
TR: Triangular,
TZ: Trapezoidal,
UN: Unitria,
ZZZ: indica a computao que a rotina realiza. Por exemplo rotinas podem ser vistos em [3] ou no apndice.
indica as
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.
%
, 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].
"
& 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
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
, 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
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
e no a da classe
, j que ela
resultar na
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
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.
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
na gura 5.2.
@ H
, as classes
I @ (E FE
CE 88 F & G@ B
I (E
classe
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,
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-
@ @ 8 FCEG I 9 @ (E A@CB8
$
I 9 @ (E A@AB8
os mtodos
@ @ I B F9 8 I 9
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.
sim, no caso 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
No caso da
classe
, 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
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
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
" # " "
& 0
& &
@ E
&
" 92
" 3
3 875 &6
6 "
'
"
&
&
CB E
! $"
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
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
e na
GB E FB
& &
9 G FB E @ E
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
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 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
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
@ @
5
@ 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
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.
, onde
I (F IE
operador
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.
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.
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.
tos so do tipo
ou
CB8$H@ @I
As classes
CB 5!E H I I @
9 I
'
@ D G E ! @ G (F ! I @ IE @
, e na biblioteca POOLALi,
.A
sem as
CE &P
I (E I
I G
I (E
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:
CB8$H@ @I
&
O mtodo
zenados no vetor
de o il-simo at o iu-simo,
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
APF 8 @ 9D
AB 5E 8 @ I I @
podendo ser
CB! 5!E 8 I I @
ou
& $
P H @
P H @
G@ @ 88 ABF$I
9 8& 9
& $
I QB I QBI 88 ABF$I I G@ @
9 8& 9
& $
G@ @ 88 ABF$I
9 8& 9
& $
: calcula os autovalores
P H @
P H @
por exemplo. Nas guras 6.7, 6.8, 6.9 e 6.10 so mostradas a interface desses
%
A G
GHE GHE G HE GE
W X2 G W  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 "
1T
operadores. PACK, conforme observamos na seo 4.4.1. No desenvolvimento das classes, tambm sobrecarregamos algumas opera-
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  G F 7" 6 " $CF 'F2 5F "CF) R& FF E & ! T ! T 11# $ E #1 ! T 1 T #1
! T
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
'
A H G
WX2 u t F 8 2 t n
" ! T
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
A ' HG
atribui a
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
dados, uma vez que a atribuio usa o operador de atribuio que descreve-
'
! T C
mos acima.
mentos da operao
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
AE F CE I
( 8 ' 52 (
de colunas de
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'
"
! !
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(K1 )
... H(K4 ) . . .
. . .
. . . H(K2 ) H(K1 )
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 )
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
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 =
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
, 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
%
( '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
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
A G
por
& $
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
%
A diagonalizao da matriz usando a biblioteca POOLALi bastante simples, mostrada na gura 7.3.
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
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
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
C C E I E CE 8 CE I
APF F @ 9D
APF 8 @ 9D
&&
No
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
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
! !
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
" #
&
@ 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:
[4] ScaLAPACK,
. . .
!
@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.
B !CE 9 G (E B I @
A@8 %A@9 9
% &
@ HE
9 AE B
[14] FTensor,
Object-Oriented
Statistics .
Environment,
[12] Mv++,
#& $(&
.
" "!
!
[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,
& (&
9 I @ 8$ AE F HB
" "!
!
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.
[40] K. A M. Ali. Execution of prolog on a multi-sequential machine. Jornal of Parallel Programing, 1998. Proc. of Implementation of Functional Language.
[43] Mpich
portable
CE 5 I
IG
P (I !A
P CE F B I @
AE H 8 @ 9
!
9 F9 !1P B I
( '$
CE CE I
AB 9 B G I
[37] Beowulf,
. .
CE
. 1995.
mpi,
& (&
" "!
@ 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
'
& (&
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:
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
.
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
, onde os
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
$ %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
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
c t fa y H uH # X "
y IH X
" IH v
Pc P u(iH
#
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
86
PSDBTRS, PCDBTRS, PDDBTRS, PZDBTRS: Resolve um sistema de zao LU computada por PxDBTRF.
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.
x#x
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.
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.
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.
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.
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.
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 ( % %
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.
y x 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
x tx
64 c ( % %
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
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
Schur.
d B@ e@ CA9
versa.
B B@ C@ CA9
86