Eliminacion Gaussiana.

Post on 12-Nov-2014

4.779 views 0 download

description

Eliminacion gaussiana paralela.

Transcript of Eliminacion Gaussiana.

UNI-CTIC 1

Eliminacion GaussianaMendoza Olivares, Jesus

Ticse Torres, RoyerLima, 25 de Agosto del 2009

Resumen—En el siguiente trabajo, se examina uno de losalgoritmos mas conocidos para resolver un sistema lineal deecuaciones el algoritmo de eliminacion gaussiana en su versionparalela.

I. I NTRODUCCION

Este metodo trabaja directamente sobre la matriz aumentadapara resolver un sistema de ecuaciones lineales, llevandola ala matriz de un sistema triangular que es eqivalente al sistemainicial. La equivalencia del sistema triangular final con elinicial se argumenta debido a que el algoritmo solo utilizamosoperaciones elementloes entre las filas y cuya aplicacionindividual siempre preserva la equivalencia. Implementamosel algoritmo de eliminacion Gaussiana en forma paralela y serealizara una revision sobre el trabajo computacional realizadopor este metodo.

II. OBJETIVOS

Entender el algoritmo de Eliminacion Gassuina parasolucionar un sistema de ecuaciones.Implementar la version paralela del algoritmo Elimi-nacion Gaussiana.

III. PLANTEAMIENTO DEL PROBLEMA

La principal caracteristica de la Eliminacion Gaussiana estransformar el sistema original

AX = B

en un sistema lineal equivalente

UX = Y

dondeU es una matriz triangular superior. La razon de lograresta transformacion del sistema es que el nuevo sistema esmas simple y resolverlo solo requiere un proceso hacia atras.Por ejemplo, tomemosA una matriz de dimencion n = 4.

a11 a12 a13 a14

a21 a22 a23 a24

a31 a32 a33 a34

a41 a42 a43 a44

Las opreraciones disponibles son multiplicar un vector fila porun escalar y anadirlo a otra fila.

1. Nos intereza que las posiciones21, 31, 41 de la matrizsean ceros, esto lo podemos lograr sustrayendo unmultiplo adecuado de la primera fila deA.fila2← fila2−m21 ∗ fila1 donde:m21 = a21/a11.fila3← fila3−m31 ∗ fila1 donde:m31 = a31/a11.

fila4← fila4−m41 ∗ fila1 donde:m41 = a41/a11.y entonces nuestra matrizA la hemos transformado en:

a11 a12 a13 a14

0 u22 u23 u24

0 u32 u33 u34

0 u42 u43 u44

2. Ahora, enfoquemos nuestra atencion al subproblema de

una matriz de3x3 u22 u23 u24

u32 u33 u34

u42 u43 u44

En forma similar, hacemos ceros los elementos pordebajo deu22, para lograrlo operemosfila3← fila3−m32 ∗ fila2 donde:m32 = u32/u22.fila4← fila4−m42 ∗ fila2 donde:m42 = u42/u22.

3. Luego, nuestra matriz se ha trasformado en:a11 a12 a13 a14

0 u22 u23 u24

0 0 v33 v34

0 0 v43 v44

ahora solo nos resta operar con una fila para reducirv43

a cero.fila4← fila4−m43 ∗ fila3 donde:m43 = v43/v33.Lo que nos da lugar a la matriz triangular superior:

a11 a12 a13 a14

0 u22 u23 u24

0 0 v33 v34

0 0 0 w44

Contando con el sistema:

a11 a12 a13 a14

0 u22 u23 u24

0 0 v33 v34

0 0 0 w44

x1

x2

x3

x4

=

y1

y2

y3

y4

Introduzcamos la idea de matriz aumentada:

[A‖B]

y sobre ella, realicemos las operaciones indicadas en los pasos1, 2, ..., n− 1. Al hacerlo, estaremos trabajando sobre la parteactiva deA pero de igual forma sobre las filas correspondientesa B. El resultado sera

[U‖Y ]

donde Y es el resultado de los cambios ocurridos aB alaplicarle las operaciones fila que hemos considerado.

UNI-CTIC 2

IV. A LGORITMO

El metodo de eliminacion de gauss es un metodo estandarpara resolver el sistema de ecuacionesAx = b. Se comienzapor transformar el sistema a la forma equivalenteUx = b,dondeU es una matriz triangular superior (es decir todos loselemntos debajo de la diagonal son iguales a cero). El sistemaUx = b es ahora resuelto por sustitucion hacia atraz.Dada una matrizA = (aij), un algorıtmo para llevar a lapractica el metodo de eliminacion de gaussiana que acabamosde escribir es el siguiente.

Algorithm 1 input n, (aij)for k = 1, 2, ..., n− 1 do

for i = k + 1, k + 2, ..., n doz ← aik/akk

aik ← 0for j = k + 1, k + 2, ..., n do

aij ← aij − zakj

end forend for

end foroutput(aij)

El algoritmo que se aplico para el caso del problema estaparalelisado se muestra acontinuacion.

1. Primero reservamos memoria en base a la variabledefinidaDIMENSION , que nos indica la dimensionde la matrizA que vamos triangularizar.

2. Si llamamosp el numero de procesos que ejecutaran elprograma ymyRank la variable que representa el id decada proceso, simyRank = 0 entonces genera y llenalos valore de la matriz de forma aleatoria, cumpliendolas siguientes restricciones:

Genera valores de A que sean diferentes de cero enla diagonal.Genera valores de A que sean diferentes de cero enlas 6 sub-diagonales arriba y las 6 abajo, el restoes cero.Los valores en la diagonal deben ser mayoresen valor absoluto que los de las otras 12 sub-diagonales.

3. El modelo de programacion paralela que se aplica estabasado en la particion de data en este caso de lascolumnas de la matriz:

La columna 0 los va ejecutar el proceso conmyRank = 0.La columna 1 los va ejecutar el proceso conmyRank = 1Y asi sucesivamente, siempre que la dimension dela matriz sea divisible por el numero de procesos(esto para que todos los procesos trabajen igual).

4. Acontinuacion cada proceso trabaja sobre su correspon-diente columna:

Estos son todos los elementos en lak−esima columnadebajo de la diagonal

for i = k + 1, k + 2, ..., DIMENSION − 1 doAik = −1,0. Aik

Akk

buffer(i− k − 1) = Aik

end forDondebuffer es una variable para la transmision dedata entre procesos.

5. Difundimos todos los datos desde proceso root a todoslos procesos.

6. El proceso0 ejecuta lo siguiente :

for i = 0, 1, ..., DIMENSION doif i mod p <> 0 then

recibe la databuffer de los procesos con id(imod p).

end iffor j = 0, 1, ..., DIMENSION do

Aji = bufferend for

end forfor i = 0, 1, ..., DIMENSION do

for i = 0, 1, ..., DIMENSION doAij = 0,0

end forend for

7. Los demas procesos con Id distinto decero:

for i = 0, 1, ..., DIMENSION doif myRank = (i mod p) then

for i = 0, 1, ..., DIMENSION doEnviamosbuffer al proceso0.

end forend if

end forEste algortimo presenta los mismos bucles que se muestran

tambien en el algoritmo desarrollado en serie, con la unicadiferencia con este ultimo algoritmo cada columna es com-putada por un proceso y estos se comunican todos los pasos deactualizacion que puedan realizar en las entradas de la matriz.

UNI-CTIC 3

V. PRUEBA

Utilizamos una matriz de4x4 para probar el programa.matriz aleatoria de entrada:

8 1 2 0−2 10 1 −34 −4 7 2−5 4 −2 11

Llevandolo a su forma diagonal triangular :

8 1 2 0−2 10 1 −34 −4 7 2−5 4 −2 11

8 1 2 00 41/4 3/2 −30 −9/2 6 20 37/8 −6/8 11

→→

8 1 2 00 41/4 3/2 −30 0 273/41 28/410 0 117/82 −1013/82

8 1 2 00 41/4 3/2 −30 0 273/41 28/410 0 0 25/2

8 1 2 00 10,25 1,5 −30 0 6,6585 0,68290 0 0 12,5

Obtenido por el programaeliminacion gaussiana.cobten-emos:

8 1 2 00 10,25 1,5 −30 0 6,658537 0,6829270 0 0 12,5

Para este caso nos resulta la misma matriz calculada, con errorcero.

VI. RESULTADOS

Luego, hacemos las pruebas con dos matrices aleatoriasA de tamano 120x120 y 240x240 cuyos unicos elementosdistintos de cero se encuentran en la diagonal principal y enlas subdiagonales arriba y las6 debajo de la diagonal principal.Los valores en la diagonal son mayores en valor absoluto quelos de las otras 12 sub-diagonales

Matriz aleatoria de 120x120Numero de procesadores= 1

Prueba Tiempo(seg)1 0.2944932 0.3747953 0.304104

Numero de procesadores= 2Prueba Tiempo(seg)1 0.4198402 0.3592633 0.308416

Matriz aleatoria de 240x240Numero de procesadores= 1

Prueba Tiempo(seg)1 7.0354142 6.6407083 6.566449

Numero de procesadores= 2

Prueba Tiempo(seg)1 6.5547642 6.510303 6.277527

VII. C ONCLUSIONES

En este trabajo hemos analizado el algoritmo EliminacionGaussianaen su version en paralela, aprovechando losprocesadores mas eficientemente..Con el desarrollo del programa hecho con la herramientaMPI se pudo hallar valores aproximados del tiempo deprocesado para hallar la matriz triangular superior ypodemos notar que el tiempo de computo no mejoraconsiderablemente al usar 2 procesadores. Probablementeeste tiempo se reduce al usar mas procesadores.Es evidente la importancia del metodo de EliminacionGaussiana para resolver sistema de ecuaciones lineales,ya que transforma en un sistema mas simple de resolver.Se puede mejorar el algoritmo aprovechando las car-acteristicas de una matriz particular para economizaroperaciones y espacio.

REFERENCIAS

[1] [MPI: A Message Passing Interface Standar ] http://www-unix.mcs.anl.gov/mpi/mpi-standard/mpi-report-1.1/mpi-report.html

[2] [Blas Barney, Lawrence Livermore National Laboratory :MPI ]https://computing.llnl.gov/tutorials/mpi/

[3] [Wikipedia] http://es.wikipedia.org/wiki/Eliminacion de Gauss-Jordan

UNI-CTIC 4

ANEXO:CODIGO UTILIZADO

eliminacion gaussiana.c

# i n c l u d e <s t d i o . h># i n c l u d e <s t d l i b . h># i n c l u d e <t ime . h># i n c l u d e <math . h># i n c l u d e <mpi . h>

# d e f i n e DIMENSION 10# d e f i n e NUMDIAG 4

i n t main ( i n t argc , cha r∗argv [ ] ) {MPI Sta tus s t a t u s ;i n t p , my rank , i , j , k , d e s t ;doub le ∗∗A, ∗∗A ser ;doub le ∗ b u f f e r ;doub le l ;doub le s t a r t p a r , end par , s t a r t s e r , end ser ,s e r i a l t i m e , p a r a l l e l t i m e , speedup ;doub le d i f f , er ro r ;

MPI In i t (& argc , &argv ) ;MPI Comm size (MPICOMM WORLD, &p ) ;MPI Comm rank (MPI COMM WORLD, &my rank ) ;

i f (DIMENSION % p != 0) {i f ( my rank == 0) {p r i n t f ( ” ( %d ) no se puede d i v i d i ren un numero de p r o c e s o s (%d )\n ” ,DIMENSION , p ) ;

}f f l u s h ( s t d o u t ) ;f f l u s h ( s t d e r r ) ;MPI Bar r ie r (MPI COMM WORLD) ;MPI F ina l i ze ( ) ;e x i t ( 1 ) ;

}

/ / r e s e r v a n d o memoriaA = ( doub le∗∗ ) ma l loc (DIMENSION∗ s i z e o f ( doub le ∗ ) ) ;f o r ( i =0; i<DIMENSION ; i ++){A[ i ] = ( doub le∗ ) ma l loc (DIMENSION∗ s i z e o f ( doub le ) ) ;

}b u f f e r =( doub le∗ ) ma l loc (DIMENSION ∗ s i z e o f ( doub le ) ) ;/ / e s t a i n i c i a l i z a n d o cada e lemento de l a m a t r i z A a 0f o r ( i =0; i<DIMENSION ; i ++) {f o r ( k =0; k<DIMENSION ; k++) {

A[ i ] [ k ] = 0 ;}

}/ / e s t o l o r e a l i z a e l p roceso ce roi n t tmp ;i f ( my rank == 0) {

A ser =( doub le∗∗ ) ma l loc (DIMENSION∗ s i z e o f ( doub le ∗ ) ) ;

f o r ( i =0; i<DIMENSION ; i ++)A ser [ i ] = ( doub le∗ ) ma l loc (DIMENSION∗ s i z e o f ( doub le ) ) ;

f o r ( i = 0 ; i < DIMENSION ; i ++){f o r ( j = 0 ; j < DIMENSION ; j ++){

i f ( j >= i − NUMDIAG && j <= i + NUMDIAG) {

i f ( i == j ) {A[ i ] [ j ] = ( doub le ) ( rand ( ) %10000) + 5000 ;} e l s e{A[ i ] [ j ] = ( doub le ) ( rand ( ) %10000) − 5000 ;}

} e l s e{A[ i ] [ j ] = 0 . 0 ;}

}}

f o r ( i =0; i<DIMENSION ; i ++){f o r ( k =0; k<DIMENSION ; k++) A ser [ i ] [ k ] = A[ i ] [ k ] ;}

f o r ( i = 0 ; i < DIMENSION ; i ++){f o r ( j = 0 ; j < DIMENSION ; j ++)p r i n t f ( ” %f\ t ” , A[ i ] [ j ] ) ;

p r i n t f ( ” \ n ” ) ;}

}/ / paso 1 : env iando columnas de a l o s demas p r o c e s o si f ( my rank == 0) { / / pa ra e l p roceso 0 .

/ / medi r e l t iempos t a r t p a r = MPI Wtime ( ) ;f o r ( i =0; i<DIMENSION ; i ++) {

d e s t = i % p ;i f ( d e s t != 0) {

f o r ( j =0; j<DIMENSION ; j ++) b u f f e r [ j ] = A[ j ] [ i ] ;/ / env iando . . .

MPI Send ( b u f f e r , DIMENSION, MPIDOUBLE, des t ,i , MPI COMM WORLD) ;}

}} e l s e{ / / s i e l p roceso es d i f e r e n t e de ce ro

f o r ( i =0; i<DIMENSION ; i ++){i f ( i % p == my rank ){/ / r e c i b i e n d o . . .

MPI Recv ( b u f f e r , DIMENSION, MPIDOUBLE, 0 , i ,MPI COMM WORLD, &s t a t u s ) ;

/ / guardando l o r e c i b i d o en l a i−esima f i l a de Af o r ( j =0; j<DIMENSION ; j ++) A[ j ] [ i ] = b u f f e r [ j ] ;

}}

}

/ / paso 2 :f o r ( k =0; k<DIMENSION−1;k++) {

i f ( my rank == k%p ) {f o r ( i =k +1; i<DIMENSION ; i ++){A[ i ] [ k ] = −1.0 ∗ A[ i ] [ k ] / A[ k ] [ k ] ;

/ / l l e n a a b u f f e r con e s t o s e lemen tosb u f f e r [ i − k − 1] = A[ i ] [ k ] ;

}}

/ / D i fundimos t o d o s l o s d a t o s desde r o o t/ / a t o d o s l o s p r o c e s o s .MPI Bcast ( b u f f e r , DIMENSION−k−1,MPI DOUBLE,k %p ,MPI COMM WORLD) ;

f o r ( j =k +1; j<DIMENSION ; j ++) {f o r ( i =k +1; i<DIMENSION ; i ++) {

A[ i ] [ j ] += b u f f e r [ i −k −1] ∗ A[ k ] [ j ] ;}

}}

i f ( my rank == 0){f o r ( i =0; i<DIMENSION ; i ++) {i f ( i %p != 0) {MPI Recv ( b u f f e r , DIMENSION, MPIDOUBLE, i %p ,i ,MPI COMM WORLD,& s t a t u s ) ;f o r ( j =0; j<DIMENSION ; j ++) A[ j ] [ i ] = b u f f e r [ j ] ;

}}f o r ( i =1; i<DIMENSION ; i ++) {

f o r ( j =0; j<i ; j ++) A[ i ] [ j ] = 0 . 0 ;}

end par = MPI Wtime ( ) ;} e l s e{

f o r ( i =0; i<DIMENSION ; i ++){i f ( my rank == i %p ){

f o r ( j =0; j<DIMENSION ; j ++) b u f f e r [ j ] = A[ j ] [ i ] ;MPI Send ( b u f f e r , DIMENSION, MPIDOUBLE, 0 ,i ,MPI COMM WORLD) ;}

}}

UNI-CTIC 5

i f ( my rank == 0){s t a r t s e r = MPI Wtime ( ) ;f o r ( k =0; k<DIMENSION−1;k++) {

f o r ( i =k +1; i<DIMENSION ; i ++){l = A ser [ i ] [ k ] / A ser [ k ] [ k ] ;f o r ( j =k ; j <DIMENSION ; j ++)

A ser [ i ] [ j ] −= l ∗A ser [ k ] [ j ] ;}

}f o r ( i =1; i<DIMENSION ; i ++) {f o r ( j =0; j<i ; j ++) A ser [ i ] [ j ] = 0 . 0 ;

}p r i n t f ( ” despues de l a e l i m i n a c i o n de gauss\n\n ” ) ;f o r ( i = 0 ; i <DIMENSION ; ++ i ){f o r ( j = 0 ; j <DIMENSION ; ++ j )p r i n t f ( ” %f\ t ” , A ser [ i ] [ j ] ) ;p r i n t f ( ” \ n ” ) ;}

end se r = MPI Wtime ( ) ;

s e r i a l t i m e = end se r − s t a r t s e r ;p a r a l l e l t i m e = end par − s t a r t p a r ;speedup = s e r i a lt i m e / p a r a l l e l t i m e ;

p r i n t f ( ” Ap l i cando e l i m i n a c i o n g a u s s i a n a en una%dx %d−m a t r i x\n ” ,DIMENSION , DIMENSION ) ;p r i n t f ( ” P a r a l l e l ve rs i on : %e seconds\n ” , p a r a l l e l t i m e ) ;p r i n t f ( ” S e r i a l ve rs i on : %e seconds\n ” , s e r i a l t i m e ) ;

}

f f l u s h ( s t d o u t ) ;f f l u s h ( s t d e r r ) ;MPI Bar r ie r (MPI COMM WORLD) ;MPI F ina l i ze ( ) ;re turn 0 ;}