100 likes | 367 Views
ALGORITMO PARALELO PARA LA RESOLUCIÓN DE SISTEMAS DE ECUACIONES APLICABLES AL MÉTODO DE LOS ELEMENTOS FINITOS Mroginski, Javier L. - Di Rado, H. Ariel Beneyto, Pablo A. - Awruch, Armando M. UNIVERSIDAD NACIONAL DEL NORDESTE FACULTAD DE INGENIERIA. INTRODUCCIÓN
E N D
ALGORITMO PARALELO PARA LA RESOLUCIÓN DE SISTEMAS DE ECUACIONES APLICABLES AL MÉTODO DE LOS ELEMENTOS FINITOSMroginski, Javier L. - Di Rado, H. Ariel Beneyto, Pablo A. - Awruch, Armando M. UNIVERSIDAD NACIONAL DEL NORDESTE FACULTAD DE INGENIERIA
INTRODUCCIÓN • Con el devenir de los años y el desarrollo industrializado de las computadoras personales (PC), muchos problemas de la ingeniería que estaban restringidos a grupos selectos de investigación hoy pueden ser resueltos empleando computación paralela. Existen muchas formas de implementar una estación de computadoras en paralelo, sin embargo la mas económica probablemente resulta ser la denominada “Clusters Beowulf”. En estos computadores usualmente se ejecuta un único programa en una PC (servidor) que reparte la tarea a las demás PC (nodos) por medio de una interfase de mensajería (ej. MPI, PVM, OpenMP, etc.). • Los problemas de ingeniería que representan un desafío a la tecnología actual (ej. Predicción climática, modelación de la turbulencia, etc.) requieren un gran costo computacional y necesitan del empleo de supercomputadoras o bien, sin que represente un desmedro en el rendimiento, estaciones en paralelo. Tal vez la herramienta numérica mas empleada en la actualidad para resolver los problemas ingenieriles sea el Método de los Elementos Finitos (MEF), el cual presenta en un punto crítico al momento de paralelizar los códigos. Dicha situación se debe a que el MEF conduce a un sistema de ecuaciones algebraicas lineales (SEAL) cuya resolución debe ser abordada en paralelo. • Existen muchos métodos de resolución de sistemas de ecuaciones aplicables al MEF, uno de ellos es el método de Jacobi. • En el presente trabajo se muestra un algoritmo, con el código fuente de F90, capaz de resolver sistemas de ecuaciones en PC paralelas por el método iterativo de Jacobi. Se indican a su vez valores de eficiencia comparándolos con algoritmos secuénciales.
MÉTODO DE JACOBI Es un método iterativo con el cual se resuelve el sistema lineal comenzando con una aproximación inicial y genera una sucesión de vectores que converge a x. Los métodos iterativos traen consigo un proceso que convierte el sistema en otro equivalente de la forma para alguna matriz fija T y un vector c. Luego de seleccionar el vector inicial la sucesión de los vectores de la solución aproximada se genera calculando: para k = 1,2,3, ... El método se escribe en la forma original separando A en sus partes diagonal D, triangular inferior L y triangular superior U. Con lo cual A = D+L+U, entonces transformamos la ecuación, en con , o bien y explicitando el vector incógnita se tiene Esta demostrado que el método de Jacobi así planteado converge a la solución cuando la matriz A es diagonalmente dominante.
BIBLIOTECAS MPI • El paquete MPI (Message Passing Interface) consiste de una serie de bibliotecas con funciones que el programador puede utilizar en el código de su aplicación y así transmitir la información entre las tareas distribuidas en los diferentes procesadores conectados en red. Además, provee el entorno y protocolos sobre el sistema operativo, para que el código paralelo se ejecute en forma consistente y ordenada (esto frecuentemente se conoce como communicator en la terminología MPI). • La complejidad subyacente en los algoritmos en paralelo determina que no siempre sea conveniente distribuir una tarea. Las aplicaciones de cálculo numérico (con cierta estructura algorítmica) donde se requiere cálculo intensivo pueden ser paralelizados en forma eficiente. Un ejemplo típico son los algoritmos de inversión de matrices o de solución de sistemas de ecuaciones algebraicos, presentes en una gran variedad de problemas ingenieriles que atañen al MEF. • Existen muchas distribuciones e implementaciones de MPI. En nuestro caso se instaló MPICH2 (versión 1.0.5). Este es un software de código abierto y distribución gratuita que está disponible en Internet.
Algoritmo RETOR=0 DO I=1,N SUMA(I)=0.0D00 END DO DO j=icolu,fcolu DO i=1,N IF(i.NE.j)THEN SUMA(i) = SUMA(i) + A(i,j)*X(j) ENDIF END DO END DO CALL MPI_BARRIER(MPI_COMM_WORLD,ierror) CALL MPI_REDUCE(SUMA,zuma,N,MPI_DOUBLE_PRECISION,MPI_ SUM,0,MPI_COMM_WORLD,ierror if(myid.eq.0)then IITER = IITER + 1 do i=1,N XANT=X(I) X(I)=(A(I,N+1)-zuma(i))/A(I,I) R(I)=ABS(X(I)-XANT) IF(R(I).gt.ERR.and.IITER.LT.MITER) RETOR=1 end do end if CALL MPI_BARRIER( MPI_COMM_WORLD, ierror) CALL MPI_BCAST(RETOR,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierror) IF(RETOR.eq.1)THEN CALL MPI_BCAST(X,N,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierror) GOTO 10 ENDIF !*** Impresion de los resultados PROGRAM JacobiPar !*** Metodo para resolver sistema de ecuaciones por el metodo de Jacobi en PARALELO INCLUDE 'mpif.h' INTEGER*4 N,MITER,IITER,size,myid,ierror,i,j,RETOR,REST,icolu,fcolu ALLOCATABLE A,X,R,SUMA,ZUMA REAL*8 ERR,XANT,A(:,:),X(:),R(:),clock,SUMA(:),ZUMA(:) CALL MPI_INIT( ierror ) CALL MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierror ) CALL MPI_COMM_SIZE( MPI_COMM_WORLD, size, ierror ) CALL MPI_BARRIER( MPI_COMM_WORLD, ierror) IF(myid.eq.0)THEN OPEN(UNIT=5,FILE='INDAT.DAT',FORM='FORMATTED',ACCESS='SEQUENTIAL') OPEN(UNIT=6,FILE='SOLUTION.DAT',FORM='FORMATTED',ACCESS='SEQUENTIAL') WRITE(*,*) 'RESOLUCION DE SISTEMAS DE ECUACIONES ' WRITE(*,*) 'POR EL METODO ITERATIVO DE JACOBI EN PARALELO' READ(5,*) READ(5,*) N END IF CALL MPI_BARRIER( MPI_COMM_WORLD, ierror) CALL MPI_BCAST( N, 1, MPI_INTEGER, 0, MPI_COMM_WORLD, ierror) ALLOCATE (A(N,(N+1)),X(N),R(N),SUMA(N),ZUMA(N)) !*** Generación de un sistema de ecuaciones aleatorio IF(myid.eq.0) CALL SISGEN(N,A,X,R,ERR,MITER) CALL MPI_BARRIER( MPI_COMM_WORLD, ierror) CALL MPI_BCAST(MITER,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierror) CALL MPI_BCAST(ERR,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierror) CALL MPI_BCAST(A,N*N,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierror) CALL MPI_BCAST(X,N,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierror) clock = secnds(0.0) !*** Inicio del Metodo de Jacobi IITER=0 REST=MOD(N,size) icolu = 1 + myid*(N-REST)/size fcolu = myid*(N-REST)/size + (N-REST)/size IF(myid.eq.(size-1)) fcolu = fcolu + REST 10 CONTINUE
EFICIENCIA EN PROGRAMAS PARALELOS Para determinar la eficiencia de un algoritmo paralelo es necesario definir en primer medida el speed-up, que se denota mediante y representa el grado de aprovechamiento que hace dicho algoritmo paralelo de los recursos físicos del sistema. El speed-up se define mediante la siguiente expresión: Donde Ts es el tiempo necesario para procesar el algoritmo en forma secuencial y Tp es el tiempo necesario para procesar el algoritmo en forma paralelo con p procesadores. El valor teórico máximo que puede tomar el speed-up es igual al número de procesadores, p. En la práctica, en vez de utilizar el speed-up de un algoritmo paralelo como medida de rendimiento del mismo se suele utilizar la eficiencia, ya que proporciona una medida más objetiva. La eficiencia de un algoritmo paralelo se denota por Ep y se define de la siguiente forma:
Cuanto más próxima se halle la eficiencia a la unidad tanto mejor es el rendimiento del algoritmo paralelo, independientemente del número de procesadores utilizados. La eficiencia se puede escribir de la siguiente forma: De las expresiones anteriores puede deducirse que la eficiencia de un algoritmo paralelo depende del cociente que se lo denomina isoeficiencia y se denota por Ip. Si el valor de Ip es pequeño la eficiencia será buena y a medida que este parámetro crezca la eficiencia del algoritmo paralelo se deteriorará.
RESULTADOS • Para probar la eficiencia del algoritmo paralelo, JacobiPar, mostrado en el Cuadro 1 se resolvieron diferentes sistemas de ecuaciones generados en forma aleatoria manteniendo el requerimiento del método de Jacobi de dominancia diagonal de la matriz A de los coeficientes. • En la Tabla 1 se comparan los resultados del algoritmo ejecutado en 2 computadoras conectadas en paralelo y en una que posee doble núcleo, con los resultados obtenidos de correr el problema en forma secuencial (1 procesador)
RESULTADOS Gráfico 1: Tiempo de ejecución vs. Orden del sistema de ecuaciones
CONCLUSIONES • Se ha presentado un algoritmo, codificado en F90, para resolver en paralelo sistemas de ecuaciones por el método de Jacobi. Los resultados obtenidos sobre sistemas aleatorios diagonalmente dominantes muestran un mejor rendimiento para los procesadores de doble núcleo comparándolo con una estación de trabajo formada con 2 PC y con el mismos algoritmo corrido secuencialmente. Esta mejora se debe fundamentalmente a que el procesamiento en paralelo se ve obligado a destinar un tiempo en comunicación en la red que no lo requiere el procesador de doble núcleo.