PARALELIZAÇÃO DO MÉTODO DE HOUSEHOLDER PARA RESOLUÇÃO DE SISTEMAS LINEARES A. Copetti 1, C. Possani 1, E. Padoin 1, M. Binelo 1, O. Khatchatourian 2 1 UNICRUZ - Departamento de Informática Rua Andrade Neves, 308 98025-810 Cruz Alta, RS 2 UNIJUI - Departamento de Física, Estatística e Matemática Rua São Francisco, Cx. P. 560 98700-000 Ijuí, RS {copetti,manoelb,possani,padoin}@unicruz.edu.br olegkha@unijui.tche.br Abstract This paper presents a analysis of acting of transformations of Householder for solution of systems of algebraic lineal equations with application of parallel algorithms in cluster of PC. Using householder method shown that the accelerations of the parallel algorithms have maximum points in function of the number of processors. These points depend on the system order to be solved. Being that the developed parallel algorithm privileges the execution of matrices of great order, therefore each node of the virtual machine only this of ownership of part of the matrix. Developed a parallel algorithm with performance efficient and of low cost. Resumo Este artigo apresenta uma análise de desempenho de transformações de Householder para solução de sistemas de equações lineares algébricas com aplicação de algoritmos paralelos em cluster de PC. Utilizando o método de Householder mostra-se que as acelerações dos algoritmos paralelos têm pontos de máximo em função do número de processadores. Estes pontos dependem da ordem de sistema a ser resolvido, sendo que o algoritmo paralelo desenvolvido privilegia a execução de matrizes de grande porte, pois cada nodo da máquina virtual somente esta de posse de parte da matriz. Desenvolveu-se um algoritmo paralelo com desempenho eficiente e de baixo custo. 1. Introdução Este artigo descreve o trabalho de paralelização do método de householder, uma aplicação de alto custo computacional utilizada na resolução de sistemas lineares. Desenvolve-se este trabalho com o intuito de explorar as características particulares dos recursos disponibilizados pela crescente evolução das arquiteturas multiprocessadas e das tecnologias de comunicação de alto desempenho. Mais especificamente, foi desenvolvido
uma solução paralela do método de householder a fim de minimizar o tempo de resolução dos sistemas. Os algoritmos seqüenciais para os métodos de Householder e de Givens são muito utilizados nas área de matemática aplicada conforme sua descrição detalhada nas obras de [Horn, 1986], [Khatchatourian, 1995], [Ortega, 1988]. Houveram tentativas de utilizar o processamento paralelo para avaliação de melhores desempenho destes métodos, porém utilizam-se supercomputadores e um número bem limitado de colunas da matriz, cerca de 50 [Egecioglu, 1995]. Desta forma, procura-se desenvolver uma solução de baixo custo e explorar os recursos da computação paralela e distribuída no objetivo de melhores desempenhos para resolução de SELA 1 com matriz densa e de grande porte. Entre os métodos diretos de solução de SELA, os métodos de reflexões e rotações apresentam a maior estabilidade numérica (em comparação com métodos com mesma ordem de operações aritméticas). Apesar disso, os métodos de Householder e Givens são utilizados principalmente para QR decomposição de matrizes, ortogonalização dos vetores, resolução de problemas de autovalores, etc., e não para solução de SELA, pois são considerados mais lentos em comparação com outros métodos diretos, por exemplo, com LU decomposição. Ao mesmo tempo, o desenvolvimento dos computadores paralelos e vetoriais exige que alguns princípios e métodos já estabelecidos para computação seqüencial sejam repensados em função da arquitetura computacional usada. Neste trabalho, foram implementadas as transformações ortogonais de Householder em cluster de PC para resolução de SELA com matriz quadrada não singular: onde A ( R) Ax=b M n, x R n, b R n. Atualmente pesquisas na área do processamento paralelo já disponibilizam compiladores que paralelizam automaticamente alguns códigos seqüenciais, entretanto, outras aplicações necessitam de formas diferentes de paralelização, como comunicação com passagem explícita de mensagens entre os processadores, tornando-se mais viável a manutenção do código seqüencial, anexando-se ao mesmo bibliotecas que propiciem tal comunicação[padoin, 2001]. A paralelização eficiente de algoritmos seqüenciais que não podem ser paralelizados com as ferramentas atualmente utilizadas, motivam cada vez mais pesquisas no desenvolvimento de estratégias completamente novas para resolver tais problemas e tirar proveito do paralelismo. Um mecanismo ideal seria aquele que transformasse um programa seqüencial em paralelo, requerendo um mínimo de esforço [Pasin, 2000]. Na grande maioria dos estudos, apresenta-se a programação paralela como solução para aumentos de desempenho sem altos custos. Porém, sabe-se que a efetiva utilização das máquinas de processamento paralelo apresentam uma dificuldade de programação maior que a encontrada nas máquinas seqüenciais [Padoin, 2001]. Tais equipamentos paralelos possuem uma complexidade superior e obrigam o programador tratar de algumas características não existentes na programação seqüencial. Dentre elas, destacam-se a análise 1 sistemas de equações lineares algébricos
de granularidade de tarefas, que está relacionada com paralelismo e distribuição da carga computacional e do controle e manipulação de dados. A seguir são mostrados o algoritmo sequencial e a versão paralela, o ambiente de execução utilizado e a análise dos resultados obtidos. 2. Descrição do Algoritmo Seqüencial A aplicação, transformações de Householder (método de reflexão), utilizada na paralelização apresentada neste artigo, pode ser definida da seguinte forma: Considere um vetor-coluna unitário w R n e uma matriz U=I-2ww T chama-se transformação de Householder a matriz de reflexão. É fácil de demonstrar que U é ortogonal, simétrica e que w é um autovetor desta matriz associado com autovalor λ= 1. Denotando as colunas de matriz A por a i, aplicando a transformação de Householder para a matriz aumentada B: UB=U[A b]=(ua 1 Ua 2...Ua i... Ua n Ub). Pode escolher um vetor w em subespaço V R n com dim(v)=2 formado pelos a 1 e o vetor unitário e 1 =(1, 0, 0,..., 0,..., 0) T de modo para que a vetor-coluna Ua 1 tenha somente um componente não nulo, isto é: Ua 1 = a 1. e 1 = ( a 1, 0, 0,..., 0,..., 0) T. O vetor w que apresenta a direção de uma reta-bissetriz entre os vetores a 1 e e 1 caso a 11 à esta direção caso a 11 <0) foi calculado pela fórmula: w=(a1+sign(a11) a1.e1)/ a1+sign(a11) a1.e1 ; Então, a matriz B 1 : B 1 = UB=U[A b]=(ua 1 Ua 2...Ua i... Ua n Ub) =( a 1. e 1 Ua 2...Ua i... Ua n Ub ) possui a primeira coluna com todos os elementos sub-diagonais nulos. Aplicando o mesmo procedimento para sub-matrizes B k =(b ij ), k!#"$ (k=2, 3,..., n-1) a matriz B seria transformada na forma triangular superior. Caso realizarmos QR decomposição, a matriz ortogonal Q pode ser obtida multiplicando as matrizes ortogonais intermediárias: T I n 1 0 I 2 0 I1 0 Q U n U U n U =... 0 1 0 2 0 n 1 onde U n =U, I é matriz-identidade. O índice inferior corresponde à ordem de matriz. Neste trabalho as transformações de Householder foram usadas somente para resolução de SELA. Para ampliar a capacidade do aplicativo de resolver os sistemas de ordem maior utilizando somente memória operacional, o algoritmo de multiplicação da matriz U pela matriz aumentada B foi transformado da seguinte forma: UB=(I-2w. w T )B=B-2w(w T B)
Isto permitiu operar somente com uma matriz, calculando inicialmente o vetor-linha w T B e subtraindo os elementos do produto dos vetores w e w T B dos elementos da matriz B diretamente sem formação de matriz intermediária. Em resumo, o algoritmo seqüêncial pode ser definido da seguinte maneira: para ( i =1 até ordem 1) faça w=(ai- Ai *e)/( Ai- Ai *e ) wtb = wt * B B = B-2 * w wtb calcula vetor X Figura 1 : Algoritmo seqüencial Para avaliar o método de Householder seqüencial, foram escolhidas 3 matrizes de ordem 512, 1024 e 2048. Utilizando a arquitetura descrita na seção 4, obteve-se os respectivos tempos: 8,74, 66.70 e 589.56 segundos. O algoritmo consiste em um grande conjunto de tarefas de integração numérica significativamente independentes. Sua paralelização é um problema de seqüenciamento, que consiste em alocar n tarefas a m processadores paralelos idênticos, que será efetuado baseado na utilização de bibliotecas para troca de mensagens no sentido de aumentar a eficiência dos algoritmos[padoin, 2001]. 3. Algoritmo Paralelo Durante o processo de paralelização foram exploradas diferentes formas para se alcançar a melhor performance sendo apresentado neste trabalho a melhor solução encontrada até então. A Transformação de Householder pode ser perfeitamente utilizada como objeto de estudo por apresentar um grande volume de processamento com elevado tempo de computação, ou seja, a aplicação é de alto custo computacional, além de apresentar uma forte iteração durante o processamento. Na implementação paralela do algoritmo utilizou-se uma programação do tipo mestreescravo, pretendendo escalonar o trabalhos entre os diversos nodos da máquina virtual. A seguir são descritas as tarefas desempenhadas pelo nodo mestre e pelos nodos escravos. Nodo-mestre O mestre divide as linhas da matriz B e as envia para os nodos-escravos iniciarem o processamento em paralelo. O programa entra num laço que começa com i=1 e termina em (ordem inicial do sistema-1). Neste laço, o mestre espera que cada trabalhador envie a sua parte da coluna i. Após receber de todos, calcula o vetor w (w=(ai- Ai *e)/( Ai- Ai *e )) e envia o vetor w para todos os trabalhadores. O próximo passo é aguardar que todos os trabalhadores enviem o resultado parcial do vetor wtb. Cada vetor que chega é somado com o anterior até que o resultado final de wtb seja encontrado. Esse vetor é então transmitido para todos os trabalhadores. Após o término do laço o mestre recebe do primeiro trabalhador o vetor x contendo a resposta.
Nodos escravos O trabalhador recebe as linhas da matriz B com as quais vai trabalhar e entra no laço que começa com i=1 e termina em (ordem inicial do sistema-1). O escravo manda para o mestre a sua parte da coluna i e espera o vetor w do mestre. O próximo passo é calcular o resultado parcial do vetor wtb (wtb=wt*b) e enviar esse resultado para o mestre. O trabalhador recebe o resultado final de wtb e aplica a transformação em B, B=B-2*w*wtB. Após cada iteração do laço a coluna i e a linha i são desconsideradas para próxima iteração e a ordem do sistema diminui até que na última iteração a ordem do sistema é igual a 2. Se durante o laço todas as linhas de um determinado trabalhador são desconsideradas este trabalhador é desativado deixando o cálculo para os trabalhadores restantes. Isto torna o algoritmo dinâmico pois para um grande sistema é interessante um grande número de trabalhadores mas a medida que o sistema diminui, muitos trabalhadores degradam a performance devido a intensa troca de mensagens na rede. Pelo fato do algoritmo ir desativando os trabalhadores durante o processo enquanto a ordem do sistema diminui, esse problema é minimizado. Ao fim do laço, se o trabalhador não é aquele que recebeu as últimas linhas do sistema ele espera o resultado do vetor x referente aos próximos trabalhadores. Cada trabalhador então calcula a sua parte do vetor. O algoritmo automaticamente diminui a quantidade de processos na medida que o sistema vai diminuindo, já que a cada iteração a ordem da matriz B diminui. Ao final, apenas os resultados são passados de processo para processo, num modelo em pipeline [AndrewsG, 2000], sem que haja necessidade de que um único, conheça toda a matriz. 4. Ambiente de Execução Paralela e Resultados Obtidos Para a execução da aplicação foi criada uma máquina virtual paralela com os computadores do Laboratório de Ciência da Computação da UNICRUZ Universidade de Cruz Alta. Este composto de 20 PCs que encontravam-se integralmente dedicados a execução da aplicação no momento dos testes. Cada nodo possui processador Athlon de 1.6 Ghz e 128 MB de RAM rodando Sistema Operacional GNU/Linux-Red Hat Linux 6.2, versão kernel 2.2.14-5.0, com a linguagem de programação C compilador GCC, e conectados através de uma rede Fast Ethernet (100 base T). Também foi necessária a utilização de uma biblioteca que fornecesse suporte ao paralelismo no sistema operacional, com o intuito de realizar a comunicação entre os nós do aglomerado e criação da máquina virtual, para tanto utilizou-se a biblioteca PVM 2 [Beguelin, 1991]. O gráfico 1 apresenta o tempo de execução do algoritmo paralelo para as matrizes de ordem 512, 1024 e 2048. 2 Parallel Virtual Machine
tempo(segundos) 700 600 500 400 300 200 100 2048x2048 1024x1024 512x512-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 nº de processadores Gráfico 1 : Tempos de Execução Paralela Analisando tais resultados, pode-se observar que na execução seqüencial do método para uma matriz de ordem 2048 transcorre 589 segundos. Com o método paralelo desenvolvido, rodando em 6 nodos (onde se alcançou o melhor desempenho), reduziu-se o tempo para 111 segundos, menos da metade do tempo seqüencial. Com base em tais resultados conseguiu-se um speed-up de 5,30, o que representa uma eficiência de 53%. 5. Conclusões e perspectivas Apresentou-se neste trabalho os resultados da paralelização das transformações de Householder para solução de sistemas de equações lineares algébricas usando PVM em cluster de PC. Foi mostrado que as acelerações dos algoritmos paralelos têm pontos de máximo em função do número de processadores, estes que dependem da ordem do sistema a ser resolvido. Implementou-se um modelo paralelo das transformações de Householder que reduz o número de troca de mensagens alcançando-se assim um bom equilíbrio de cargas entre os processos. Nesse modelo, os resultados parciais são mantidos em cada processador, ao passo que, no final, são repassados até chegarem no primeiro processador. Com este novo método paralelo pode-se utilizar um número variável de nodos da máquina virtual paralela e também explorar matrizes de grande porte, devido ao fato que apenas uma parte da matriz é alocada na memória de cada nodo. Outra vantagem do código paralelo, é que quando um nodo conclui o seu processamento, ele permanece inativo, isto é, nâo se envolvendo nas trocas de mensagens, o que diminui o overhead de comunicações. Os resultados da paralelização das transformações de Householder apresentados neste trabalho mostram a boa eficiência já alcançada neste método. Porém, para resolução de sistemas de equações lineares algébricos são utilizados principalmente os métodos de Householder e Givens. O método de Givens já foi estudo e atualmente está sendo trabalhado na sua versão paralela.
Referências [Andrews, 2000] Andrews, G., Foundations of Multithread, Parallel, and Distributed Programming. Adisson Wesley, 2000. [Beguelin, 1991] Beguelin, A., Dongarra, J.J., Geist, G.A., Manchek, R., Sunderam, V.S., A Users Guide to PVM parallel virtual machine, ORNL/TM11826, 1991. [Egecioglu, 1995] Egecioglu Ö., Srinivasan, A., Givens and Householder Reductions for Linear Least Squares on a Cluster of Workstation, Proc. Int. Conf. on High Performance Computing (HiPC), New Delhi, pp. 734-739, 1995 [Horn, 1986] Horn R.A., Johnson, C. R. Matrix Analysis, Cambridge University Press, 1986 [Khatchatourian, 1995] Khatchatourian, O., Borges P.A., Métodos Numéricos da Álgebra. Ed. UNIJUÍ, 1995. [Ortega, 1988] Ortega, J. M., Introduction to Parallel and Vector Solution of Linear Systems, Plenum Press, New York, 1988. [Padoin, 2001] PADOIN, Edson Luiz. Estudo da paralelização de aplicações com alto custo computacional utilizando sistemas distribuídos Dissertação(Mestrado em PPGEP) - UFSM - Universidade Federal de Santa Maria, Santa Maria, 2001. [Pasin, 2000] PASIN, Marcelo. Processamanto paralelo com clusters. In VIII ESCOLA INFORMÁTICA DA SBC-SUL; Anais ERI 2000, Ijuí, Foz do Iguaçu,Tubarão, 2000.