Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Posible PDF
Posible PDF
Pág.
AUTORES ............................................................................................................................................. 1
RESUMEN ............................................................................................................................................. 2
ABSTRACT ............................................................................................................................................. 2
1. INTRODUCCIÓN .......................................................................................................................... 3
1.1 Definición contextual ............................................................................................................ 4
1.2 Motivación ............................................................................................................................ 4
1.3 Plan de trabajo ..................................................................................................................... 4
1.4 Organización ........................................................................................................................ 4
8. CONCLUSIONES .......................................................................................................................... 69
9. APÉNDICES .................................................................................................................................. 71
A. Matrices dispersas en C ...................................................................................................... 71
B. Método de Aasen con pivoteo en Fortran ............................................................................ 81
REFERENCIAS .................................................................................................................................. 85
LISTA DE FIGURAS
Pág.
FIGURA 8. Matriz de discretización de ecuación de Poisson con una malla de 7x7. ............................... 17
FIGURA 10. Matriz dispersa de 9x9 (b), su grafo de adyacencia (a) y resultado de una factorización LU
de la matriz (c). ....................................................................................................................... 20
FIGURA 11. Reordenación de la matriz dispersa (b), grafo de adyacencia (a) y el resultado de una
factorización LU de la matriz reordenada(c). .......................................................................... 20
FIGURA 18. Iteraciones para matriz definida positiva de 200x200. rc=0.01 .............................................. 26
FIGURA 19. Iteraciones para matriz definida positiva de 200x200. rc=0.001 ............................................ 26
FIGURA 20. Iteraciones para matriz definida positiva de 100x100. rc=0.00001 ........................................ 27
FIGURA 21. Arquitecturas SIMD (a) y MIMD (b) ........................................................................................ 34
FIGURA 22. Arquitecturas de memoria compartida (a) y paso de mensajes (b) ........................................ 35
FIGURA 27. Fill-in de método Aasen para una matriz en diferentes ordenaciones. .................................. 67
FIGURA 28. Fill-in de método Aasen para una matriz en diferentes ordenaciones. .................................. 67
“El secreto del éxito no es no tener problemas.
El secreto es encontrar soluciones”.
(Anónimo)
Cuaderno de Investigación No. 40
AUTORES
1
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
RESUMEN
Este trabajo se centra en la optimización de los métodos numéricos para la solución de sistemas de ecuaciones
lineales con matrices asociadas simétricas, indefinidas, dispersas y de gran dimensión. Los métodos se
definen en entornos paralelos, haciendo uso de librerías de optimización y buscando el correcto manejo de las
matrices dispersas para lograr la máxima optimización de los métodos definidos para la solución de sistemas
de ecuaciones lineales con matrices asociadas que posean las características mencionadas.
ABSTRACT
This work centers in the optimization of the methods for solving linear equation systems with sparse, symmetric,
indefinite, large associated matrices. The methods are defined in parallel computation environments, making use
of optimization libraries and looking for a correct use of sparse matrices to reach maximum optimization of the
methods defined for solving linear equations systems with associated matrices that posses the characteristics
mentioned above.
2
Cuaderno de Investigación No. 40
1
INTRODUCCIÓN
Al estudiar las matrices generadas por los sistemas de El interés por la optimización de los métodos para
ecuaciones se pueden observar ciertas características la solución de sistemas de ecuaciones lineales ha
y propiedades, que pueden permitirnos en algunas generado diversos enfoques en cuanto a los métodos
ocasiones un tratamiento especial del problema existentes para mejorar los algoritmos actuales.
mejorando los algoritmos tradicionales al explotar la Aparecen entonces herramientas tan importantes
estructura y las propiedades de la matriz. como la computación paralela, librerías optimizadas
con funciones básicas, librerías más avanzadas,
En nuestro trabajo particular hemos pretendido tratamiento de la estructura de la matriz, etc. Todos
encontrar métodos para la solución de sistemas estos enfoques no son mutuamente excluyentes, y
de ecuaciones con matrices asociadas simétricas, por el contrario se intentará en este proyecto obtener
indefinidas, de estructura dispersa y de gran el máximo provecho de cada uno de ellos, obteniendo
dimensión. Los métodos se definen con base en un buen rendimiento global.
métodos ya existentes, y se busca la solución tanto
en procesamiento secuencial como paralelo. Las aplicaciones son muchas, incluso en un
enfoque tan específico como el de las matrices
Este tipo de sistemas se encuentran en diversas simétricas, dispersas e indefinidas. Entre ellas están
áreas como optimizaciones lineales y no lineales, los problemas de redes eléctricas, problemas de
análisis de elementos finitos, problemas inversos elementos finitos, y en general muchas aplicaciones
de valores propios y muchas más. En general se de ingeniería, como por ejemplo el resultado de la
debe usar algún tipo de pivoteamiento para resolver discretización de ecuaciones diferenciales parciales
correctamente estos sistemas y el reto es mantener en diferentes tipos de simulaciones. Cualquier
una estabilidad computacional y la estructura optimización que se logre en este campo, será un
dispersa en las matrices [1]. gran aporte, debido a la gran cantidad de datos que
3
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
4
Cuaderno de Investigación No. 40
para dar las bases suficientes para el buen clusters y los entornos de programación paralela MPI
entendimiento del documento. y PVM.
Sección 6. Bibliotecas numéricas optimizadas.
Sección 3. Matrices Dispersas. Se profundiza Se muestran otras formas de optimización mediante
sobre el manejo de las matrices dispersas en la el uso de técnicas manuales de optimización de
computación numérica. Se trabajan diferentes códigos y las bibliotecas numéricas optimizadas.
formatos de almacenamiento y se dan ejemplos de
su utilización. Sección 7. Caso de estudio: descomposición
LDLT. Se trabaja sobre el problema específico de la
Sección 4. Métodos de resolución de sistemas solución de sistemas lineales simétricos, dispersos
lineales. Se trabajan los métodos numéricos para e indefinidos. Uno de los algoritmos bases para este
la solución de sistemas lineales, tanto directos como tipo de sistemas es la descomposición LDLT.
iterativos, haciendo comparaciones entre ellos, y
mostrando algunos ejemplos de los códigos. Sección 8. Conclusiones. Se dan las conclusiones
que deja este largo proceso de investigación, dejando
Sección 5. Computación paralela. Se da un interrogantes abiertos y posibilidades de un enfoque
completo repaso sobre la computación paralela, desde para trabajos futuros.
las diferentes topologías de red, la conformación de
5
2
CONCEPTOS PRELIMINARES
6
Cuaderno de Investigación No. 40
Matriz indefinida
Matriz simétrica
Una matriz A es considerada indefinida cuando su
Una matriz es simétrica si se cumple que forma cuadrática xTAx toma valores tanto positivos
aij = aji. Es decir, cada elemento de A ubicado en como negativos. Aunque la matriz A puede tener
una factorización LDLT, las entradas en los factores
la fila i, columna j, es igual al elemento ubicado en
pueden tener una magnitud arbitraria [4].
la fila j, columna i. Este tipo de matrices nos puede
ahorrar espacio de memoria en su almacenamiento, Matriz dispersa
ya que con almacenar los elementos localizados por
debajo de la diagonal principal de la misma (triángulo Una matriz A se considera dispersa cuando un alto
inferior), se conocen los valores de los elementos porcentaje de sus elementos son ceros. En nuestro
ubicados por encima de la diagonal superior (trián- caso consideraremos las matrices dispersas en
gulo superior), y viceversa. Del mismo modo pode- cuanto pueda optimizarse la computación de la
mos ahorrar operaciones al aplicar algoritmos que misma mediante el uso de estructuras especiales
exploten esta estructura. para el almacenamiento. Las matrices dispersas
nos ahorran operaciones en las que su resultado se
Matriz definida positiva conoce de antemano, como productos y sumas con
ceros. Las características de las matrices dispersas
se estudian en detalle en la sección siguiente.
Una matriz es definida positiva si es
simétrica y x T Ax > 0 para todo diferente Sistemas de gran dimensión
de cero. Los sistemas con matrices asociadas
definidas positivas constituyen una de las clases más Los sistemas de ecuaciones se consideran de gran
importantes de problemas Ax = b [4]. Las matrices dimensión cuando se trabaja con miles de incógnitas
definidas positivas tienen una diagonal de peso, es y los costos de computación son elevados. En
decir con valores relativamente grandes. estos casos se debe prestar mucha atención a mini-
mizar los errores de redondeo y truncamiento que
Además, las matrices definidas positivas cumplen las puedan generar los algoritmos. Al mismo tiempo
se desea minimizar los tiempos de ejecución y el
siguientes propiedades:
almacenamiento en memoria, haciendo algoritmos
• Una matriz A definida positiva es no singular. eficientes y con soluciones adecuadas en tiempos
• Si una matriz A es definida positiva entonces aceptables. En problemas de ingeniería y aplicaciones
todas sus submatrices principales son definidas reales aparecen frecuentemente sistemas de este
positivas. En particular, todas las entradas de la tipo.
diagonal son positivas. La resolución de sistemas de ecuaciones algebraicas
• Si una matriz A es definida positiva entonces existe que son lineales de gran dimensión subyace en la
una factorización A = LDMT, y la matriz diagonal D solución numérica de problemas de la mecánica del
tiene valores positivos. continuo y muchos otros problemas de ingeniería,
7
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
En cada paso de los métodos directos, un elemento Si P es una matriz de permutación, entonces PA
de la diagonal es utilizado como pivote para calcular la es una versión de A con filas permutadas y AP es
factorización de las filas restantes, dividiéndolas por una versión de A con columnas permutadas. Una
este valor. Elementos muy pequeños en la diagonal permutación simétrica de A tiene la forma PAPT, e
pueden entonces ocasionar elementos muy grandes intercambia tanto filas como columnas.
8
Cuaderno de Investigación No. 40
3
MATRICES DISPERSAS
No siempre las matrices asociadas a un sistema de contiene las matrices cuyas entradas no nulas forman
ecuaciones lineales son matrices completamente un patrón regular; ejemplos de ellas son las matrices
llenas de valores. En muchas ocasiones una gran banda, o con una estructura por bloques. La matriz
parte de sus elementos, o incluso la mayoría, son no estructurada es la que no presenta ningún patrón
ceros, y por lo tanto estos elementos no toman parte claro en sus entradas no nulas [2].
en los cálculos del algoritmo ya que el resultado
de operar un número con un cero se conoce de Una matriz dispersa puede ser almacenada
antemano. Un buen tratamiento de estas matrices guardando solamente sus elementos no nulos, para lo
nos ahorra espacio en memoria y tiempo de cual se utiliza una estructura diferente a la tradicional
ejecución en los métodos. Siempre que sea posible para matrices densas. Estos almacenamientos hacen
utilizar métodos alternativos de almacenamiento y de necesario modificar los algoritmos que recorren
solución para explotar la estructura de una matriz, normalmente matrices densas.
podemos considerar a ésta como dispersa.
El esquema de almacenamiento más simple para
Los primeros en hacer uso de dichas técnicas fueron matrices dispersas y base para los demás esquemas
los ingenieros eléctricos en los 60s, sin embargo no es conocido como el formato coordinado (COO).
recibieron mucha atención hasta ahora. El uso de Esta estructura de datos, como se muestra en la
matrices dispersas es especialmente útil en métodos figura 1, consiste en tres arreglos: el primero (AA)
iterativos, donde la principal operación suele ser contiene todos los valores reales (o complejos) de
un producto matriz-vector, que se ve afectado los elementos no nulos de la matriz; el segundo (AI)
de gran manera por los diferentes esquemas de es un arreglo de enteros y contiene los índices de fila
almacenamiento y computación. de los elementos correspondientes; el último (AJ) es
igualmente un arreglo de enteros y contiene todos los
3.1 MÉTODOS DE ALMACENAMIENTO índices de columna. El espacio de almacenamiento
que ocupa esta estructura es de 3nz, donde nz
Se consideran dos tipos de matrices dispersas: representa el número de elementos no nulos de la
estructuradas y no estructuradas. La primera clase matriz.
9
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
FIGURA 1
Almacenamiento disperso por coordenadas (COO)
Para mejorar este formato se pueden utilizar dos mismo tamaño que el anterior. El último es un arreglo
variantes sencillas, una de compresión por filas CSR de enteros que contiene apuntadores a la posición
(Compressed Sparse Row) y otra de compresión en los arreglos AA y JA donde esté ubicado el primer
por columnas CSC (Compressed Sparse Column). elemento de cada fila. El contenido de este tercer
Ambas poseen también tres arreglos, que en el arreglo llamado IA, en el elemento i, es la posición
caso de CSR (figura 2) son los siguientes: Un en los arreglos AA y JA donde comienza la fila i, y su
arreglo que contiene los valores Aij diferentes de tamaño es n+1, con n el número de filas de la matriz.
cero almacenados en orden por filas, desde la Este formato es probablemente el más popular para
fila 1 hasta n. Este vector se denomina AA y tiene el almacenamiento general de matrices dispersas.
tamaño nz. El segundo es un arreglo de enteros que El formato de almacenamiento por CSC puede
contiene los índices de columna de los elementos Aij deducirse fácilmente a partir del CSR, haciendo una
almacenados en el arreglo AA, denominado JA y del compresión por columnas en lugar de filas.
FIGURA 2
Almacenamiento disperso por fila comprimida (CSR)
Otra variación común explota el hecho que los CSR. El segundo arreglo, llamado AJ, contiene
elementos de la diagonal son usualmente diferentes en los primeros n elementos las posiciones de los
de cero y accedidos con mayor frecuencia que los elementos en el primer arreglo que corresponden a
demás elementos. El formato modificado de la primeras entradas de cada fila. En la posición n+1
compresión por filas (MSR) contiene sólo dos arreglos. aparece el numero nz+1 que indica que termina la
El primero llamado AA contiene las entradas no nulas diagonal y que continúan los otros elementos. De
de la matriz comenzando por la diagonal principal la posición n+2 en adelante están los índices de
seguida de un marcador (*) y finalmente las demás columna de los elementos en AA.
entradas no nulas en el orden del almacenamiento
10
Cuaderno de Investigación No. 40
FIGURA 3
Almacenamiento disperso por fila comprimida modificada (MSR).
11
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
12
Cuaderno de Investigación No. 40
TABLA 1
Comparación de costes por flops y tiempo de ejecución para el producto matriz-vector
con diferentes tipos de almacenamiento en matlab
FIGURA 4
Flops del producto matriz-vector
13
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
FIGURA 5
Tiempos de ejecución del producto matriz-vector
A partir de los resultados podemos observar en las del formato coordenado. También influye el hecho
figuras 4 y 5 que en el formato denso se mantiene de que los formatos comprimidos requieran mayor
una misma velocidad de procesamiento, que es cantidad de direccionamientos para cada valor, y
superada por los formatos definidos para matrices ciclos anidados, que pueden hacer diferencias en el
dispersas, especialmente cuando la densidad es acceso a la memoria.
muy baja. En los formatos de coordenadas y denso
solo es necesario hacer 2 operaciones por cada Así pues podemos concluir que escoger un formato
elemento de la matriz (elementos no nulos en el caso adecuado para almacenar las matrices con que
del formato COO). En los formatos de CSC y CSR es se trabaje es importante para optimizar al máximo
necesario efectuar 3 operaciones por cada elemento los algoritmos, teniendo en la cuenta que el uso
no nulo de la matriz, además del costo de convertir de formatos poco comunes, no aceptados por las
la matriz a estos formatos en las pruebas realizadas. distintas librerías que existen, puede traer problemas,
o incluso el uso de aquellos formatos comunes
Igualmente los resultados pueden ser alterados por de almacenamiento puede agregar un tiempo de
el manejo óptimo que tiene el lenguaje Matlab con ejecución asociado a la conversión de formato de
este tipo de matrices en el formato coordenado, las matrices tantas veces como sea necesario,
pero podría ser diferente si se implementaran en influyendo en el tiempo global de ejecución de los
algoritmos.
un lenguaje común, ya que el formato COO no
tendría las ventajas de la optimización que hace
3.2 REPRESENTACIÓN POR GRAFOS
Matlab, o por lo menos ser menor la diferencia entre
los diferentes formatos de almacenamiento de las La teoría de grafos constituye una herramienta
matrices dispersas. Este menor tiempo de ejecución bastante útil para la representación de matrices
conlleva igualmente a un mayor requerimiento de dispersas [2], ayudando en la búsqueda de precondi-
memoria para el almacenamiento de los vectores cionadores y algoritmos paralelos.
14
Cuaderno de Investigación No. 40
15
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
FIGURA 7
Malla con puntos de la discretización de la ecuación diferencial
Este es un sistema de ecuaciones disperso, ya que dimensión (figura 9), dada unas condiciones iniciales
tiene n variables pero cada una de ellas se relaciona y los valores de la función en la frontera, que en
a lo sumo con otras 4 variables diferentes y por este caso son cero. Las aplicaciones en este campo
tanto podemos tratarlo con métodos especiales de son numerosas, lo que le da mayor importancia a
almacenamiento para la matriz asociada al sistema la optimización de los métodos para resolver los
de ecuaciones. sistemas que resultan. En este caso particular de
la ecuación para una superficie, la matriz resultante
Con este método se puede resolver, por ejemplo, el está formada por solo 5 diagonales. La estructura de
movimiento de una membrana que vibra sobre una esta matriz se muestra en la figura 8.
16
Cuaderno de Investigación No. 40
FIGURA 8
Matriz de discretización de ecuación de Poisson con una malla de 7x7
FIGURA 9
Simulación de la vibración de una membrana
17
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
FIGURA 10
Matriz dispersa de 9x9 (b), su grafo de adyacencia (a) y resultado de
una factorización LU de la matriz (c)
FIGURA 11
Reordenación de la matriz dispersa (b), grafo de adyacencia (a) y
el resultado de una factorización LU de la matriz reordenada(c)
18
Cuaderno de Investigación No. 40
Diferentes ordenaciones de la matriz pueden ser más Algoritmo de Cuthill-McKee inverso. El algoritmo
convenientes para métodos directos o para métodos de Cuthill-Mckee proporciona un método sencillo
iterativos. Dos de los métodos de reordenación más para reordenar una matriz dispersa con objeto de
utilizados son el algoritmo de grado mínimo y el de reducir el efecto fill-in transformando la matriz en una
Cuthill-McKee. matriz banda. La ordenación resultante al invertir el
algoritmo de Cuthill-Mckee resulta frecuentemente
Algoritmo de Grado Mínimo. Este algoritmo se usa mejor que el original [5], en términos de reducción de
para matrices con estructura simétrica y dispersa. perfil, manteniendo la anchura de banda.
Consiste en hacer una renumeración de los nodos
en orden creciente de sus grados respectivos ALGORITMO 8. Reordenación de Cuthil-McKee
(conexiones de dicho nodo en el grafo asociado) [5]. inverso
Los nodos de mayor grado originarán en teoría, un
1. Construir el grafo asociado a la matriz A, g(x) =
mayor fill-in. La idea es renumerarlos al final para
(V, E)
evitar el incremento del fill-in durante el proceso.
2. Determinar un nodo inicial (pseudo-periférico) y
renumerarlo como x1.
ALGORITMO 7. Reordenación de grado mínimo
3. Renumerar los nodos conectados a xi en orden
1. Construir el grafo asociado a la matriz A, g(x) = ascendente de grado.
(V, E) 4. Efectuar el ordenamiento inverso.
2. while V ≠ 0
En las figuras 12 a 14 se aprecia el efecto de estas
3. Elegir un nodo v de grado mínimo en g(x) y
reordenaciones al aplicar una descomposición
reordenar como siguiente.
LU sobre ellas. La elección del algoritmo de
4. Vv = V – {v} reordenación depende tanto del método que se
5. utilizará posteriormente como de la estructura de la
matriz original, por lo que un buen entendimiento del
6. % siendo, Adjg(v) el conjunto de nodos problema y de los métodos es siempre importante.
conectados a v en el grafo g(x) % En el ejemplo de las figuras 12 a 14 se aprecia que
una reordenación de grado mínimo nos reduce
7. V = Vv
casi a la mitad el llenado de la matriz resultante
8. E = Ev de la descomposición LU. La principal utilidad de
9. g(x) = (V, E) reordenar los elementos de una matriz es mejorar
10. end while las propiedades estructurales de la misma para la
aplicación de algún método.
19
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
FIGURA 12
Matriz dispersa de 60x60 y su descomposición LU
FIGURA 13
Reordenación Cuthill-McKee de la matriz y su descomposición LU
20
Cuaderno de Investigación No. 40
FIGURA 14
Reordenación de grado mínimo de la matriz y su descomposición LU
En función de un método u otro interesará un tipo u Los métodos directos realizan descomposiciones
otro de reordenación. Para métodos directos interesa LU de la matriz intentando minimizar el llenado de la
una reordenación donde se garantice que el grado matriz. Las estructuras utilizadas para almacenar los
de llenado sea mínimo (algoritmo de grado mínimo), datos hacen que sea más complicada la inserción de
mientras que en los métodos iterativos interesa que los nuevos valores que aparecen con el llenado. En
la reordenación minimice el ancho de banda de la principio se utilizaron listas enlazadas que permiten
matriz dispersa. una inserción más fácil, pero se ha optado por vectores
simples, reservando espacio para los elementos que
puedan aparecer al hacer la descomposición.
21
4
MÉTODOS DE RESOLUCIÓN DE
SISTEMAS LINEALES
Los métodos para resolver los sistemas lineales los métodos iterativos para mejorar el efecto del
se dividen en dos grandes grupos: directos e precondicionamiento, que acelera la convergencia
iterativos. Los métodos directos encuentran la del método.
solución en un número finito de pasos y cada paso
en las operaciones intermedias depende de los 4.1 MÉTODOS ITERATIVOS BÁSICOS
pasos previos. Los métodos iterativos generan una
sucesión cuyos valores se espera converjan a la Los métodos iterativos parten de una solución
solución del sistema. El error característico en los inicial y van modificando sus valores hasta alcanzar
métodos directos e iterativos es el de redondeo. una convergencia deseada cuando ésta sea posible.
Se dividen en estacionarios y no estacionarios.
A medida que se aumenta la dimensión de los Los métodos estacionarios son métodos clásicos
sistemas de ecuaciones, la principal desventaja de como Jacobi, Gauss-Seidel o SOR y tienen una
los directos frente a los iterativos es que los errores convergencia más lenta, aunque su programación es
de redondeo se acumulan durante el proceso, mucho más simple y son más fáciles de entender.
además de requerir mayor espacio de memoria Los métodos no estacionarios tienen una mayor
debido al efecto de llenado (fill-in). Por otro lado, convergencia.
en procesos donde se tienen que resolver diversos
sistemas del mismo tipo, los métodos iterativos La convergencia de los métodos estacionarios
pueden aprovechar, como aproximación inicial, la depende de algunas propiedades en la matriz inicial
solución obtenida en el paso de tiempo anterior. como la simetría o que sea definida positiva o diagonal
Todo ello hace que actualmente, en general, se opte dominante. En general estos métodos estacionarios
por la resolución mediante un método iterativo. tienen la forma Mx(k+1) = Nx(k) + b para la solución del
sistema lineal Ax=b, donde A=M-N y x(k) es el vector
Las técnicas de reordenación, aplicadas princi- aproximación a la solución del sistema en la etapa k.
palmente en la resolución de sistemas por métodos Despejando x(k+1) de la ecuación anterior obtenemos
directos y que están basadas en la teoría de una recurrencia de la forma x(k+1) = Bx(k) + c, donde
grafos, proporcionan matrices con ancho de banda B = M-1N es la matriz de iteración y c = M-1b.
o perfil menor, lo que reduce, en la resolución por
métodos directos, el coste de almacenamiento La velocidad de convergencia a la solución depende
en la factorización, pero pueden ser utilizadas por de los valores propios de la matriz de iteración B, y
22
Cuaderno de Investigación No. 40
Jacobi
Gauss-Seidel
SOR
El algoritmo 10 muestra una implementación del ALGORITMO 10. Versión escalar con formato CSR
algoritmo SOR en versión escalar utilizando un de algoritmo SOR
almacenamiento por columna comprimida (CSR),
donde: 1. nz = length(S)
2. nfil = length(xo)
A, b: matriz de coeficientes y vector de términos 3. x = zeros(nfil)
independientes del sistema. 4. k = 0
I,J,S: Vectores del formato CSR de la matriz A. 5. err = ε + 1
xo: aproximación inicial 6. while err > ε & k ≤ maxiter
7. for i = 1 : nfil
maxiter: número máximo de iteraciones (general-
8. x(i) = 0
mente 1000)
9. for j = I(i) : I(i+1) - 1
ε: tolerancia deseada expresada como error 10. if i < J(j)
relativo (8 cifras) 11. x(i) = x(i) + S(j) * xo(J(j))
x: solución del sistema 12. else if i > J(j)
ω: factor de relajación 13. x(i) = x(i) + S(j) * x(J(j))
23
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
FIGURA 15
Iteraciones para matriz Poisson 1D de 100x100
24
Cuaderno de Investigación No. 40
FIGURA 16
Iteraciones para matriz Poisson 2D de 400x400
FIGURA 17
Iteraciones para matriz Poisson 3D de 729x729
25
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
FIGURA 18
Iteraciones para matriz definida positiva de 200x200. rc=0.01
FIGURA 19
Iteraciones para matriz definida positiva de 200x200. rc=0.001
26
Cuaderno de Investigación No. 40
FIGURA 20
Iteraciones para matriz definida positiva de 100x100. rc=0.00001
El algoritmo SOR siempre llega a mejorar el Los métodos de proyección pueden ser usados para
rendimiento del algoritmo Gauss-Seidel cuando el ω hallar los valores propios de una matriz, como en
utilizado es el óptimo. En caso de que se desconozca el caso de los métodos de Gram-Schmidt, Arnoldi
este valor o no se tengan los métodos para hallarlo, el y Lanczos. Mediante estos es posible generar
uso del método de Gauss-Seidel es más apropiado. igualmente subespacios de Krylov.
27
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
28
Cuaderno de Investigación No. 40
29
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
30
Cuaderno de Investigación No. 40
que los producidos por otros algoritmos usados que utilizamos son la eliminación Gaussiana (para
comúnmente, incluyendo el algoritmo de grado mínimo. matrices generales) y la factorización de Cholesky
Para muchos problemas de computación científica y (para matrices simétricas y definidas positivas).
programación lineal METIS es capaz de reducir las
necesidades de almacenamiento y computación en En la eliminación Gaussiana para matrices densas se
la factorización de matrices dispersas por un orden escogen los pivotes secuencialmente, ya que éstos
de magnitud. Además, a diferencia del algoritmo de modifican todas las filas de la parte no factorizada de
grado mínimo, los árboles de eliminación producidos la matriz. Una fila puede ser escogida como pivote
por METIS son válidos para factorización directa en solo después de haber sido modificada por el pivote
paralelo. Finalmente METIS es bastante rápido y anterior. Sin embargo, en el caso de las matrices
puede reordenar matrices de más de 200,000 filas dispersas dos filas pueden ser completamente
en unos pocos segundos. independientes. En una matriz dispersa A, la fila k
modifica directamente la fila i si i > k y Aik ≠ 0. La fila k
4.3.2 Factorización Simbólica modifica indirectamente la fila i si una fila j modificada
(directa o indirectamente) por k modifica la fila i. Las
La fase de factorización simbólica determina la filas i y k son independientes si la fila k no modifica i
estructura de las matrices triangulares que resultarán directa ni indirectamente.
de factorizar las matrices de coeficientes ordenadas.
Se crea la estructura de las matrices resultantes y se Las filas independientes de una matriz dispersa
reserva la memoria necesaria para estas. pueden ser utilizadas como pivotes en cualquier orden,
o incluso simultáneamente en una implementación
La factorización simbólica es más complicada paralela. Para saber cuáles filas pueden ser
si se requiere pivoteo. En estos casos se suele utilizadas como pivotes al mismo tiempo se recurre a
combinar la factorización simbólica con la numérica. menudo a la utilización de árboles de eliminación. El
Si no se requiere pivoteo, determinar la estructura tiempo de ejecución dependerá entonces de la altura
dispersa de los factores es trivial. En este caso la del árbol. Este grado de paralelismo juega un papel
factorización simbólica determina el fill-in causado muy importante en la optimización de los métodos
por la eliminación de cada fila de la matriz en orden. directos. Por lo general la ordenación de grado
Como se dijo anteriormente, cuando la k-ésima fila es mínimo conlleva a menor fill-in, pero la ordenación por
el pivote, un cero en la posición Aij se hace diferente disección anidada genera un árbol mejor balanceado
de cero para todo i, j > k tal que Aik ≠ 0 y Akj ≠ 0. y aumenta el paralelismo.
Para la factorización simbólica sin pivoteo existen 4.3.4 Solución del sistema triangular
algoritmos seriales con un costo proporcional al
número de elementos no nulos de la matriz. Las La solución de un sistema triangular requiere
implementaciones en paralelo suelen ser poco poca computación a comparación de la fase de
eficientes, por lo que dichos algoritmos son los más factorización. Por lo general esta fase permite solo un
usados. cierto paralelismo dependiendo de las caracerísticas
de la matriz asociada, pero aún así puede generar
4.3.3 Factorización Numérica una ganancia en la eficiencia del algoritmo, y todo
esto suma para la ejecución total del proceso.
En la factorización numérica es donde se
hacen las operaciones aritméticas sobre la matriz de La solución del sistema triangular en paralelo es
coeficientes A para producir la matriz triangular inferior trivial. Primero se resuelven las ecuaciones con una
L y la matriz triangular superior U. Los algoritmos sola variable, luego se reemplazan estos valores en
31
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
las demás ecuaciones y se repite esto hasta que se De donde se obtiene fácilmente el valor x1 = b1 / a11.
resuelvan todas las incógnitas. A continuación se Luego se puede reemplazar este valor en la segunda
ilustra la resolución de un sistema triangular. ecuación para encontrar x2, y así sucesivamente
hasta calcular el valor de todas las incógnitas.
Se tiene el sistema triangular Lx=b.
32
5
COMPUTACIÓN PARALELA
33
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
unidad central de control (CPU) y una memoria. stream, multiple data stream (MIMD), donde cada
Los ordenadores que adoptan dicha formación se procesador es capaz de ejecutar un programa
conocen como single instruction stream, single data diferente.
stream (SISD). La velocidad de dichos computadores
tiene dos factores limitantes: la tasa de ejecución de Los computadores SIMD requieren menos hardware
instrucciones y la velocidad a la cual la información se y menos memoria, y son útiles para programas en
intercambia entre la memoria y la CPU. La segunda donde se requiere aplicar un mismo conjunto de
se puede mejorar mediante el aumento del número instrucciones a una gran cantidad de datos. En un
de canales a través de los cuales los datos son computador MIMD cada procesador tiene su propia
accedidos simultáneamente, que se logra mediante unidad de control, pero pueden ser construidos
el uso de diferentes bancos de memoria que pueden mediante arreglos de computadores de uso general.
accederse al mismo tiempo. Otra forma de mejorarla Así, los computadores MIMD pueden llegar a ser más
es utilizar memorias caché, las cuales son memorias rápidos y baratos que los SIMD, aunque necesitan
pequeñas, pero de alta velocidad, que sirven como mejores algoritmos de sincronización.
buffer a la memoria principal. Para mejorar la tasa
de ejecución de instrucciones se utiliza la ejecución FIGURA 21
en pipeline, donde se pueden ejecutar instrucciones Arquitecturas SIMD (a) y MIMD (b)
simultáneamente en diferentes unidades, sobrela-
pando la búsqueda de una instrucción con la
ejecución de la anterior. Sin embargo estas mejoras
también tienen sus límites, y el hardware se hace
más costoso para mejoras muy pequeñas, por lo que
el uso de clusters de computadores para trabajar en
paralelo se hace cada vez más popular.
34
Cuaderno de Investigación No. 40
Granularidad: Los computadores paralelos pueden Permitir lecturas concurrentes no crea discrepancias
estar compuestos por pocos procesadores muy semánticas en el programa. Sin embargo, accesos
potentes, o muchos procesadores de menor de escritura concurrentes requieren arbitración.
capacidad. Los procesos de comunicación y Algunos protocolos de arbitración son:
sincronización en la computación paralela crea
sobrecargas que disminuyen las prestaciones. • Común: Se permite la escritura concurrente si
La granularidad se define como el tiempo que se todos los valores que se intentan escribir son
utiliza en operaciones de comunicación, sobre el iguales.
tiempo utilizado en la computación de los datos. Así
podemos hablar de grano fino, tarea repartida entre • Arbitrario: Un procesador arbitrario puede escri-
muchos procesadores con un menor tamaño de bir. El resto fallan.
35
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
• Prioridad: Los procesadores tienen un orden de contiene log(p) etapas (p el número de procesadores
prioridad preestablecido y el de mayor prioridad y bancos de memoria). Cada etapa es un patrón de
logra la escritura. El resto fallan. interconexiones donde existen vínculos entre una
entrada i y una salida j si:
• Suma: Se escribe el total de la suma de todos los
intentos de escritura. (modificable por cualquier
operación).
5.1.3 Redes de interconexión dinámicas En cada etapa hay p/2 interruptores, y cada uno
puede actuar como directo o inverso. Las entradas
Consideremos la implementación de un PRAM (procesadores) se comunican con las salidas
EREW como un computador de memoria compartida (bancos de memoria) de manera sencilla: en cada
con p procesadores y m palabras de memoria. Los etapa el interruptor actúa como directo si los bits
procesadores se conectan a la memoria mediante en la posición de la etapa en la entrada y la salida
switches, que determinan la posición accesada son iguales, y como inverso si son diferentes. En
por cada procesador. Para reducir la complejidad algunos casos se puede presentar un bloqueo de
del sistema de switches se divide la memoria en comunicación cuando se requiere usar un mismo
bancos. camino entre 2 etapas.
36
Cuaderno de Investigación No. 40
Red de árbol: En una red de árbol existe una única destino. Las entradas son los procesadores fuente y
ruta entre dos procesadores. En un árbol estático destino, e información del sistema. Las salidas son
cada nodo es un procesador, mientras que en los uno o más caminos posibles. Los algoritmos pueden
dinámicos los nodos intermedios actúan como ser de orden mínimo o no. Los mínimos escogen
interruptores y las hojas son procesadores. Para siempre el camino más corto y pueden provocar
enviar un mensaje el procesador emisor envía el congestión. Los no mínimos escogen caminos que
mensaje hacia arriba en el árbol hasta encontrar el pueden ser más largos pero evitan la congestión.
procesador o interruptor del sub-árbol más pequeño
que contiene al emisor y al receptor. Luego el mensaje El tiempo que tarda la comunicación entre
es enviado hacia abajo hasta el receptor. Puede procesadores es un factor importante en la
haber cuellos de botella en la parte más alta de los computación paralela. El tiempo para comunicar un
mismos, por lo que suelen utilizarse más conexiones mensaje entre dos procesadores es la latencia, que
a medida que se acerca a la raíz. incluye la preparación del mensaje para el envío y
lo que tarda en llegar a su destino. Los principales
Hipercubo: Es una malla multidimensional con 2 parámetros para determinar la latencia son el tiempo
procesadores en cada dimensión. Un hipercubo d- de arranque, que es el tiempo requerido para manejar
dimensional contiene p=2d procesadores. Se puede el mensaje en el procesador fuente incluyendo el
construir un hipercubo de manera recursiva, así: algoritmo de enrutamiento; el tiempo por salto, que
- Un hipercubo 0-dimensional es un procesador. es el tiempo que tarda un mensaje para pasar de un
procesador al siguiente; y el tiempo de transferencia
- Un hipercubo 1-dimensional es la conexión de 2 por palabra, que es el tiempo que toma una palabra
procesadores o hipercubos 0-dimensionales. para atravesar el vínculo.
37
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
el momento en que el ordenador paralelo comienza, algoritmo secuencial para resolver un problema
hasta el momento en que el último procesador finaliza sobre un simple procesador. En general se da como
la ejecución (Tp). el orden del problema a nivel secuencial denotado
como W y es equivalente al Ts.
Aceleración (SpeedUp): es una medida que
captura el beneficio relativo de resolver un problema Función de sobrecarga: dicha función en un
en paralelo, se denomina como Sp y se calcula como sistema paralelo se da como parte del costo (tiempo
Ts /Tp. de producción del procesador) que no es incurrido
por el algoritmo serial más rápido sobre un ordenador
Eficiencia: en la teoría la eficiencia de tener p- secuencial. (Diferencia entre costo y “run-time”
procesadores es p, pero en la práctica es difícil porque serial). Se calcula como T0 (W, p) = p*Tp − W.
no se puede obtener el 100% de la productividad
para computar un algoritmo. La eficiencia es una Grado de concurrencia: máximo número de tareas
medida de la fracción de tiempo para la cual un que pueden ser ejecutadas simultáneamente en un
procesador se mantiene en uso, definido a su vez algoritmo paralelo. Se denota como C(W) siendo
como una proporción entre la velocidad y el número W el tamaño del problema, e indica que no más de
de procesadores. Se denota con Ep y se calcula esta cantidad de procesadores puede ser empleada
como Sp /p. Normalmente la representamos como: efectivamente.
Tamaño del problema: consiste en el número básico 3. Extra computación: el algoritmo secuencial más
de pasos computacionales que se logra en el mejor rápido conocido puede ser difícil de paralelizar,
38
Cuaderno de Investigación No. 40
por lo que se dan algoritmos menos buenos. (alto están apareciendo en laboratorios de investigación,
grado de concurrencia). Entonces w0 − w es la departamentos de I+D de empresas, universidades
contribución a la sobrecarga de trabajo extra que e incluso pequeñas facultades. Si un problema
se realiza, donde w es el tiempo de ejecución del informático no puede solucionarse en un entorno de
algoritmo más rápido y w0 el menos bueno. memoria distribuida flojamente acoplada, un cluster
Beowulf puede ser la respuesta, a un precio que los
Otro aspecto fundamental en las métricas de un fabricantes tradicionales de computadoras paralelas
ambiente paralelo es la función de isoeficiencia, no pueden llegar.
que reúne los anteriores criterios donde el tiempo
de ejecución puede ser expresado en función del Construcción de un Beowulf: [9] Cualquiera
tamaño del problema, de la función de sobrecarga y puede construir un computador paralelo adecuado
del número de procesadores, donde resulta: para la enseñanza de la programación paralela y la
ejecución de programas paralelos, muchas veces
usando PCs sobrantes o ya existentes. Las PCs en
un laboratorio de informática pueden adaptarse para
Y teniendo en cuenta que: un uso dual gracias a sistemas de encendido dual
que les permiten ser encendidas en Linux o Windows,
dependiendo de las necesidades del momento.
Alternativamente, los equipos no utilizados pueden
ser recogidos y fusionados.
Tenemos la expresión de isoeficiencia:
Nunca dos clusters Beowulf son iguales. De hecho,
sus configuraciones hardware y software son tan
flexibles y adaptables que presentan un amplio
abanico de posibilidades. Aunque cada cluster es
De donde podemos obtener, diferente y las configuraciones están dictadas por las
necesidades de la aplicación, es posible especificar
algunos requerimientos mínimos.
39
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
mejor rendimiento bajo otras condiciones, cada nodo tiempo que se necesita para comunicar los datos
tendría que tener suficiente espacio en el disco local entre los nodos y sincronizarlos sobrepasa el
para el sistema operativo, la memoria virtual y los tiempo de computación real de la CPU. En este
datos. Cada nodo tendría que tener como mínimo caso, usar menos nodos puede resultar en un mejor
200 MB de espacio de disco para los componentes tiempo de ejecución y una utilización más eficiente
del sistema operativo y la memoria virtual, pero 400 de los recursos. Este equilibro entre la carga de
MB o más permite tener espacio libre que puede ser computación local en un nodo y las comunicaciones
usado para las aplicaciones en tiempo de ejecución. para coordinar esfuerzos entre los nodos tiene que
Como mínimo cada nodo tiene que incluir una tarjeta ser optimizado para cada aplicación paralela.
de red Ethernet o Fast Ethernet. Alternativamente,
interconexiones de más alto rendimiento, incluyendo
Finalmente, la heterogeneidad de los clusters juega
la Gigabit Ethernet y la Myrinet, podrían ser usadas
en conjunción con CPUs más rápidas. Finalmente, un papel importante en el desarrollo de los algoritmos
cualquier tarjeta de video, una lectora de disquetes, paralelos. Un factor de dos o más entre las velocidades
la caja y la batería, completan un nodo funcional. Los de las CPUs de los nodos es muy significativo cuando
teclados y los monitores solo se necesitan para la se ejecutan aplicaciones paralelas. Si el trabajo se
carga y configuración inicial del sistema operativo, a distribuye uniformemente entre todas las CPUs de un
no ser que las máquinas individuales sean usadas cluster heterogéneo, las CPUs más rápidas tendrán
interactivamente además de servir como nodos en el que esperar a las más lentas para completar su parte
sistema paralelo. dentro de la tarea global. Los algoritmos diseñados
correctamente pueden superar esta heterogeneidad
Si es posible, los nodos tendrían que estar aislados sobre dividiendo la tarea de forma que se puedan
en una red privada de área local con su propio hub o asignar nuevas subtareas a los nodos que completen
switch Ethernet. Esto evitará que el tráfico de la red
las anteriores subtareas asignadas.
normal interfiera en la comunicación entre los nodos
y viceversa. Para incrementar aún más el ancho de
5.3.1 PVM – Parallel Virtual Machine
banda entre los nodos, se pueden instalar tarjetas de
red adicionales en los nodos.
PVM es un entorno de programación [10] que
Hay disponibles para Linux tanto compiladores permite que un conjunto de máquinas heterogéneas,
comerciales como gratuitos. En general desarrollar conectadas en red, puedan ser utilizadas como una
código paralelo requerirá un paso explícito de única máquina paralela desde el punto de vista de un
mensajes entre los procesadores utilizando la PVM usuario.
(Parallel Virtual Machine - Máquina virtual paralela),
MPI (Message Passing Interface - Interfaz de paso Velocidad computacional: Una máquina PVM
de mensajes), u otras librerías de comunicaciones. puede estar compuesta por computadores con
Ambas, la PVM y la MPI están disponibles potencias computacionales muy diferentes. Esto ha
gratuitamente y permiten al programador definir de ser tenido en cuenta tanto por el sistema PVM
fácilmente los nodos usados para ejecutar el código como por el programador.
paralelo y pasar datos entre los nodos durante la
ejecución usando simples invocaciones a la librería.
Carga de la máquina: Los computadores que
Uno de los errores más peligrosos es convertir forman parte de una máquina PVM utilizan UNIX.
un problema computacional en un problema de Esto supone que pueden estar ejecutando varios
comunicaciones. Esto puede suceder cuando el procesos a la vez. Esto influye sobre el rendimiento
problema está demasiado dividido, con lo que el de las aplicaciones PVM.
40
Cuaderno de Investigación No. 40
Red: La gran mayoría de máquinas UNIX suelen primitivas del sistema PVM para paso de mensajes,
estar conectadas a través de la red Ethernet. El arranque (spawn) de procesos, coordinación de
rendimiento de la máquina PVM se verá afectado en tareas y manejo de la máquina virtual. Acepta
gran manera en función del tipo y de la carga de la red. llamadas de los lenguajes Fortran, C y C++. Está
El tipo puede ser Ethernet (10 Mbit/s), Fast Ethernet compuesta por 3 ficheros que contienen la librería en
(100Mbit/s), FDDI (100 Mbit/s), HiPPI (800 Mbit/s ó sí: libpvm.a (para C , C++ y Fortran), libfpvm.a (para
1.6Gbit/s), ATM, entre otras. La carga depende del Fortran), libgpvm3.a (para grupos). Y varios ficheros
que contienen definiciones, constantes del sistema
tráfico y número de máquinas conectadas a la red.
y algunas variables: pvm3.h, fpvm3.h (Fortran),
PVM utiliza el modelo de programación de los pvmsdpro.h, pvmtev.h.
computadores MPP y de la computación distribuida
mediante paso de mensajes, pero también puede - Y las tareas de usuario, donde un conjunto de
utilizarse para computadores con Memoria ellas constituye la aplicación PVM. Cada tarea PVM
Compartida, simulando la gestión de mensajes a es identificada mediante un identificador de tarea
través de memoria compartida. Sin embargo los único TID (Task Identifier) dentro de la máquina
programas deben ser diseñados según el modelo de virtual y proporcionado por ésta. El destino de un
computación distribuida. mensaje, se referencia mediante el identificador de
la tarea a la cual se le quiere enviar dicho mensaje.
PVM maneja de forma transparente al usuario el PVM contiene varias rutinas para obtener el TID de
encaminamiento de mensajes, la conversión de datos una determinada tarea. También es posible construir
entre computadores y la gestión de tareas (tasks). El grupos de tareas.
usuario escribe su aplicación como un conjunto de
tareas que cooperan entre sí, y éstas acceden a los Ejemplo de programación en PVM:
recursos PVM a través de una librería de rutinas, que Producto matriz-vector
permiten iniciar tareas (pvm_spawn), finalizar tareas
(pvm_kill, pvm_exit, ...), comunicación entre tareas, Se ha implementado un algoritmo que realiza el
sincronizar tareas, agrupar tareas. producto de una matriz y un vector dados, suponiendo
que cada procesador guarda un bloque de filas de la
El entorno PVM está compuesto de tres partes: matriz y un bloque igual del vector.
- El daemon (demonio) conocido como pvmd o a
La implementación consta de dos procesos: un
veces pvmd3, que reside en todos los computadores
maestro y un esclavo. El proceso maestro genera la
que forman parte de la máquina virtual. Su misión
matriz y el vector y las envía a los esclavos. La matriz
principal es crear la máquina virtual, de tal forma que
la envía por bloques, y el vector completo. Luego
una aplicación de un determinado usuario pueda
espera a que los esclavos retornen sus resultados y
acceder a todos los computadores (hosts). Cuando
los almacena en un nuevo vector. Finalmente realiza
un usuario desea ejecutar una aplicación PVM,
el producto en secuencial para comparar resultados
en primer lugar crea la máquina PVM arrancando
y calcular el tiempo del algoritmo secuencial. Los
el entorno PVM, con lo que arrancan todos los
esclavos reciben un bloque de la matriz y el vector
daemon´s de todos los computadores. Una vez han
completo, pero como en métodos iterativos se utiliza
arrancado todos los daemons en todos los hosts y se
este producto repetidamente y los resultados quedan
ha efectuado la configuración de la maquina virtual,
repartidos por bloques en cada procesador, se ha
el usuario puede arrancar la aplicación PVM desde
hecho una multidifusión de cada bloque del vector,
cualquiera de los hosts.
para que cada procesador cuente con el vector
- Una librería de funciones que contiene las completo. Antes de esta multidifusión se crea una
41
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
42
Cuaderno de Investigación No. 40
43
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
FIGURA 23
Tiempo de ejecución en secuencial y paralelo con 6 procesadores
44
Cuaderno de Investigación No. 40
5.3.2 MPI – Message Passing Interface aparentes. Además permite que se ofrezca soporte
hardware y se aumente la escalabilidad.
MPI es un estándar que ha sido implementado
MPI ofrece varias características al usuario:
por numerosos desarrolladores sobre diferentes
plataformas. MPI funciona sobre Linux, MS Windows, Operaciones colectivas: una operación colectiva
IRIX, AIX, HP-UX y muchos otros sistemas operativos, es una operación ejecutada por todos los procesos
utilizando de forma optimizada los recursos de cada que intervienen en un cálculo o comunicación. En
máquina. MPI existen dos tipos de operaciones colectivas:
operaciones de movimiento de datos y operaciones
Existen implementaciones específicas para sistemas
de cálculo colectivo. Las primeras se utilizan para
concretos, desarrolladas por los fabricantes y centros
intercambiar y reordenar datos entre un conjunto de
de investigación, que permiten aprovechar al máximo
procesos. Un ejemplo típico de operación colectiva
las prestaciones de una máquina determinada. La
es la difusión (broadcast) de un mensaje entre varios
compatibilidad entre versiones es un hecho, lo que
procesos. Las segundas permiten realizar cálculos
ha permitido una amplia portabilidad del software
colectivos como mínimo, máximo, suma, OR lógico,
desarrollado sobre MPI.
etc., así como operaciones definidas por el usuario.
La versión más utilizada es mpich, desarrollada por
Topologías virtuales: ofrecen un mecanismo de
el Laboratorio Nacional de Argonne y la Universidad
alto nivel para manejar grupos de procesos sin tratar
de Chicago. Esta versión, de libre distribución, ha
con ellos directamente. MPI soporta grafos y redes
sido portada a numerosos sistemas operativos y
de procesos.
máquinas, incluyendo clusters Linux y Windows. La
segunda versión más utilizada y que proporciona Modos de comunicación: MPI soporta operaciones
muy buenos resultados bajo cluster es LAM (Local bloqueantes, no bloqueantes o asíncronas y sín-
Area Multicomputer), desarrollada por el Centro de cronas. Una operación de envío bloqueante bloquea
Supercomputación de Ohio. al proceso que la ejecuta sólo hasta que el buffer
pueda ser reutilizado de nuevo. Una operación
El objetivo básico de MPI [11] es desarrollar un
no bloqueante permite solapar el cálculo con las
estándar de amplia utilización para escribir programas
comunicaciones. En MPI es posible esperar por la
de paso de mensajes. Esta interfaz intenta establecer
finalización de varias operaciones no bloqueantes.
un práctico, portable, eficiente y flexible estándar para
Un envío síncrono bloquea la operación hasta que
el paso de mensajes. En el diseño del MPI se utilizó
la correspondiente recepción tenga lugar. En este
en gran medida el “MPI Forum” de forma que se
sentido, una operación bloqueante no tiene por qué
tomaba en cuenta la opinión de los programadores.
ser síncrona.
Ha sido influenciado en gran medida por el trabajo en
el IBM T. J. Watson Research Center, Intel’s NX/2, Soporte para redes heterogéneas: los programas
Express, nCUBE’s Vertex, p4, y PARMACS. Otras MPI están pensados para poder ejecutarse sobre
contribuciones importantes provienen de Zipcode, redes de máquinas heterogéneas con formatos y
Chimp, PVM, Chamaleon y PICL. La principal ventaja tamaños de los tipos de datos elementales totalmente
de establecer un estándar en el paso de mensajes diferentes.
es la portabilidad y la facilidad de uso. En un sistema
de memoria compartida en el cual las rutinas de más Tipos de datos: MPI ofrece un amplio conjunto de
alto nivel y las abstracciones están construidas sobre tipos de datos predefinidos (caracteres, enteros,
una capa de bajo nivel de paso de mensajes los números en coma flotante, etc.) y ofrece la posibilidad
beneficios de la estandarización son particularmente de definir tipos de datos derivados. Un tipo de datos
45
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
46
Cuaderno de Investigación No. 40
47
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
48
Cuaderno de Investigación No. 40
49
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
p tsec/tp
2 1,92290065
4 3,69968288
6 4,56451076
8 4,51412541
16 7,12877382
FIGURA 24
Tiempos de ejecución con diferente número de procesadores
50
6
BIBLIOTECAS NUMÉRICAS OPTIMIZADAS
Hasta ahora se han mostrado algunas formas de 6.1 OPTIMIZACIÓN MANUAL DE CÓDIGOS
optimizar los programas como la computación SECUENCIALES
paralela y el uso de diferentes formatos de
almacenamiento en el caso de las matrices Los códigos secuenciales de los programas
dispersas. En este capítulo se estudiarán otras pueden optimizarse manualmente utilizando dife-
maneras de optimizar un código, utilizando librerías rentes técnicas que buscan, en general, reducir el
optimizadas de álgebra lineal y mediante métodos de número de operaciones realizadas y el número de
optimización manuales. Nos centraremos en el uso de accesos a memoria para mejorar el rendimiento
bibliotecas de funciones numéricas optimizadas para global.
el desarrollo de programas secuenciales y paralelos
de altas prestaciones. Existen diversas bibliotecas 6.1.1 Optimización de bucles
de funciones que ofrecen rutinas que resuelven de
forma eficiente diversos problemas numéricos tanto La mayor parte de las acciones orientadas a
básicos (sumas y productos de matrices y vectores,
optimizar el coste computacional de los algoritmos
normas, etc.) como de mayor nivel (resolución de
numéricos se centran en mejorar la localidad de
sistemas de ecuaciones, mínimos cuadrados, valores
referencia y las operaciones innecesarias en bucles.
propios, etc.).
Reordenación de bucles. El acceso a los datos
Se analizarán las bibliotecas secuenciales BLAS
en los bucles debe realizarse de forma que se
y LAPACK, que constituyen dos kernels básicos
maximice la localidad de referencia. Las matrices
computacionales ampliamente utilizados y con buen
soporte. Sus versiones originales y actualizadas son en C se almacenan por filas, y por tanto conviene,
de libre distribución y código abierto [31], además en la medida de lo posible, ordenar los bucles para
de versiones comerciales optimizadas para diversas que sucesivas iteraciones reutilicen las mismas
arquitecturas. También existen versiones en paralelo posiciones de datos. Cambiando únicamente el orden
de estas bibliotecas (PBLAS y ScaLAPACK), de los bucles, se puede realizar la misma operación
además de la librería de comunicaciones BLACS, con costes diferentes. El siguiente es un ejemplo de
adaptada a problemas de álgebra lineal. Se completa reordenación de bucles.
el tema con una descripción de técnicas manuales
de optimización de códigos.
51
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
Desenrollado de bucles. La sobrecarga causada por el manejo de los índices de los bucles no sólo influye
en el número de operaciones, sino que además afecta a la localidad de referencia. En determinados casos es
recomendable expresar de forma explícita varias iteraciones dentro del bucle. Al hacer el desenrollado del bucle
se obtiene una mejora en cuanto al número de accesos a memoria y el uso de los registros del computador.
Esta técnica se conoce como loop unrolling.
1. for (i=0; i<N; i++) for (i=0; i<N; i++)
2. for (j=0; j<M; j++) for (j=0; j<M; j+=4){
3. c[j] += b[i] * a[i,j]; c[j] += b[i] * a[i,j];
4. c[j+1] += b[i] * a[i,j+1];
5. c[j+2] += b[i] * a[i,j+2];
6. c[j+3] += b[i] * a[i,j+3];
7. }
Fusión de bucles. Cuando no hay interferencias con la localidad de referencia (por ejemplo, no hay escrituras
y lecturas del mismo componente en la misma iteración), es conveniente fusionar los bucles para reducir la
sobrecarga de los contadores de bucles. Así se reduce el impacto de los accesos a los contadores, se aumenta
el grano de las operaciones y se mejora el acceso a la caché.
Orientación a bloques. Cuando los datos que se manejan no caben en la memoria caché disponible, es
conveniente orientar el problema de forma que la operación básica sea un bloque. De esta forma es posible que
se aumente el impacto de la caché. Este método es recomendable en operaciones de orden cúbico o superior.
52
Cuaderno de Investigación No. 40
Optimización escalar. El acceso a una componente de un vector requiere resolver una referencia a memoria.
Este acceso puede penalizar notablemente los tiempos de cómputo si se realiza de forma repetida e innecesaria
dentro de un bucle. Una solición a este problema es la ubicación del valor en un registro, como se muestra a
continuación
Pruebas
Para analizar el efecto de los diferentes métodos de optimización de códigos secuenciales, como el
reordenamiento y desenrollado de bucles y la ordenación orientada a bloques se hicieron pruebas utilizando
un algoritmo sencillo de orden cúbico para calcular el producto de dos matrices. Además de las diferentes
optimizaciones mencionadas anteriormente se analiza el efecto de compilar el código con diferentes opciones
que nos da el compilador como se observa en la tabla 2. Los resultados (en segundos) obtenidos con los
diferentes métodos son los siguientes:
53
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
TABLA 2
Comparación de tiempos de ejecución del producto matricial con
diferentes técnicas de optimización de bucles
i-j-k i-k-j j-i-k j-k-i k-i-j k-j-i k-i-j LU i-j-k OB i-k-j OB i-k-j LU+OB
-o 4,14 1,17 4,61 13,59 1,36 14,43 1,21 4,17 1,34 1,15
-o1 4,13 1,21 4,72 15,41 1,35 13,73 1,27 4,15 1,41 1,19
-o2 4,14 1,22 4,63 13,46 1,43 14,01 1,26 4,23 1,39 1,17
-o3 4,17 1,21 4,66 15,31 1,43 15,32 1,24 4,17 1,44 1,19
Como se aprecia claramente en la tabla, el función se reserva espacio en la pila para las variables
ordenamiento de bucles juega un papel importante locales, se realiza el apilamiento de la dirección de
en el desempeño del programa, ejecuta más de 10 retorno y se realiza la asignación de los resultados.
veces más rápido el algoritmo en algunas ocasiones Cuando las funciones sean suficientemente sencillas,
con el simple hecho de cambiar el recorrido por filas es conveniente sustituir su código directamente
o por columnas. Esto se debe al manejo que le da el en el código de la función que realiza la llamada.
procesador a la memoria, y el funcionamiento de las La sustitución puede hacerse de forma explícita,
cachés. mediante el uso de macros o con la directiva inline.
El proceso de inlining consiste en la sustitución de
Al combinar los diferentes métodos de optimización una llamada a función por el código propiamente
se consiguió el mejor tiempo, pero éste no dicho. Reduce la legibilidad del código, pero evita
es significativamente superior al de la simple el sobrecosto de paso de parámetros, llamada a
reordenación del bucle. También observamos que función, reserva de pila y retorno de resultados.
no siempre el compilador optimiza más el código al
utilizar los métodos de compilación -o1, -o2, -o3. 1. double hilbert(int i, int j) {
2. double res;
Entre mayor sea la cantidad de datos que se deben 3. res = 1/( (double)i + (double)j - 1);
procesar, mayor será el impacto que puede tener la 4. return res;
utilización de estas sencillas técnicas de optimización, 5. }
aunque requieren de un buen conocimiento de la
arquitectura sobre la que se trabaja y del lenguaje
usado, pues lo que se busca es explotar aspectos
1. #define hilbert(i,j) (1.0/((double)(i)+
propios de cada uno de ellos. (double)(j)-1))
54
Cuaderno de Investigación No. 40
programas es mediante el uso de librerías estándar lenguaje Fortran, y existen interfaces que permiten
para la resolución de los problemas numéricos. El uso su uso en C. BLAS dispone de versiones especiales
de este tipo de librerías permite acelerar el proceso para matrices estructuradas (triangulares, banda,
de desarrollo garantizando altos niveles de calidad y etc.) y se encuentra organizado por niveles. El
robustez. Las librerías numéricas secuenciales más nivel 1 corresponde a las funciones que realizan
utilizadas en la actualidad son BLAS y LAPACK. operaciones sobre vectores (como la suma de
El código fuente básico de ambas librerías se vectores). El nivel 2 corresponde a las funciones
encuentra libremente disponible, aunque existen que realizan operaciones sobre matrices y vectores
versiones optimizadas para diferentes plataformas (como el producto de matriz por vector) y el nivel 3
(Intel Pentium, Intel Itanium II, G5). corresponde a las funciones que realizan operaciones
sobre matrices.
6.2.1 BLAS – Basic Linear Algebra
Subroutines Cuanto mayor sea el nivel de las operaciones, mejores
resultados de optimización se obtienen. Todas
El paquete BLAS contiene una serie de las funciones BLAS mantienen una nomenclatura
funciones básicas para la resolución de problemas estándar. Asumiendo un nombre de función con
simples de álgebra lineal, como la suma o el siete letras agrupadas en tres bloques (TMMOOOO,
producto de vectores y matrices elaboradas en el tipo de datos, tipo de matriz, código de operación),
las opciones son las siguientes:
Para comprobar las mejoras que se pueden obtener con el uso de estas bibliotecas en la eficiencia de los
programas, hemos realizado el producto matricial en C mediante tres diferentes aproximaciones. Primero,
utilizando un algoritmo normal con los correspondientes bucles; segundo, mediante el uso de la función de
producto matriz-vector de blas (dgemv) para calcular cada columna; y por último con una sola llamada a la
función del producto matricial de blas (dgemm).
55
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
56
Cuaderno de Investigación No. 40
FIGURA 25
Tiempos del producto matricial en C utilizando BLAS
6.2.2 LAPACK – Linear Algebra Package lugar se definen las funciones computacionales,
que resuelven tareas computacionales completas
El paquete LAPACK contiene una serie (factorización LU, descomposción QR) que si bien
de funciones para la resolución de problemas pueden utilizarse directamente, están generalmente
fundamentales del álgebra lineal, como la resolución orientadas a resolver una parte de un problema
de sistemas de ecuaciones, la factorización en valores completo que resuelve una rutina driver. Finalmente
propios, numerosas descomposiciones matriciales, se encuentran las rutinas auxiliares, utilizadas por las
etc. LAPACK dispone de versiones especiales para rutinas driver y computacionales para la resolución
matrices estructuradas (triangulares, banda, etc.) y de los problemas.
se encuentra en continuo desarrollo desde 1992.
La nomenclatura de las funciones LAPACK sigue los
LAPACK utiliza BLAS para la implementación de las
mismos patrones que en el caso de las funciones
funciones.
BLAS. Como ejemplo se citan las siguientes
funciones:
Las rutinas de LAPACK se estructuran en tres niveles.
En primer lugar, se definen las rutinas driver, que dgesv_ Función que resuelve un sistema de
resuelven problemas completos (resolución de un ecuaciones Ax=b
sistema de ecuaciones, resolución de un problema de dgeqrf_ Función que calcula la descomposición QR
mínimos cuadrados, cálculo de los valores propios o de A (A = QR)
singulares de una matriz). Las funciones driver son las dgetrf_ Función que calcula la factorización LU de
que se recomienda que utilice el usuario. En segundo una matriz
57
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
58
Cuaderno de Investigación No. 40
66. % usando resolucion directa % Los promedios de operaciones por segundo que
67. ctimer(&elapsed, &ucpu, &scpu); realizó cada uno de los métodos, considerando un
68. time = elapsed; total de n3 operaciones, son los siguientes:
69. dgesv_(&n, &nrhs, A3, &n, piv, B3, &n,
&error); • sin librerías: 129,49 MFLOPS
70. ctimer(&elapsed, &ucpu, &scpu); • con mv: 741,70 MFLOPS
71. t3 = elapsed-time; • con mm: 724,46 MFLOPS
72.
73. printf(«\n%d\t%10.6f\t%10.6f\
t%10.6f»,n,t1,t2,t3);
74. }
FIGURA 26
Tiempos de ejecución de descomposición LU
Nuevamente la superioridad sobre nuestro algoritmo El único inconveniente que puedan presentar estas
es bastante notable. La diferencia entre los otros bibliotecas es que están basadas en fortran, y por tanto
dos métodos sin embargo es muy poca, lo que nos se debe tener en cuenta el tipo de almacenamiento
deja ver que cada parte de este algoritmo está bien que este lenguaje maneja al utilizarlas sobre un
optimizada, y que una llamada de más a una función lenguaje diferente como C, y también recordar
no hace mucha diferencia en el comportamiento del que los parámetros deben pasarse siempre como
programa, ya que la función que realiza el proceso punteros a memoria. Una vez acostumbrados a esto,
completo utiliza prácticamente el mismo tiempo que permite programar de manera más rápida, legible
al llamar las funciones por separado. y eficiente, centrándonos en otros problemas a la
59
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
hora de hacer nuestros programas. Por otro lado, 6.3.1 BLACS – Basic Linear Algebra
no siempre encontramos funciones que se adapten Communication Subprograms
exactamente a nuestras necesidades, pero vale la
pena hacer ensayos con aproximaciones utilizando La biblioteca de funciones BLACS constituye
estas bibliotecas. un nivel de abstracción superior a las bibliotecas
de comunicaciones estándar (MPI, PVM, etc),
6.3 BIBLIOTECAS DE OPTIMIZACIÓN proporcionando herramientas que son específicas
PARALELAS para los problemas de computación numérica
(Grids de procesos bidimensionales, operaciones
Las bibliotecas de optimización secuenciales de comunicación orientadas a bloques de filas o
tienen sus respectivas versiones paralelas para la columnas, etc.). Los conceptos fundamentales de
optimización de programas ejecutados en paralelo. El la biblioteca BLACS son el grid de procesadores y
conjunto de bibliotecas que constituye ScaLAPACK la distribución de las matrices. Los procesadores
(versión paralela de LAPACK) se estructura en tres se estructuran en un grid bidimensional de N X Q
partes fundamentales: procesadores, sobre los que se definen varios
• Versiones paralelas de las funciones de LAPACK. contextos de comunicación independientes que
Contenidas en el directorio SRC del paquete, son permiten especificar los subgrupos de comunicación
las versiones equivalentes paralelas de casi todas naturales en álgebra lineal (fila, columna o todos).
las funciones disponibles en LAPACK. Estas BLACS es una biblioteca de código abierto que
funciones utilizan como núcleo computacional puede descargarse e instalarse libremente y su
básico la biblioteca PBLAS. instalación es sencilla.
• Versiones paralelas de las funciones de BLAS. De la misma forma que BLAS proporciona una
Contenidas en la biblioteca PBLAS distribuida interfaz compatible con Fortran y otra con C,
con el paquete, contiene las versiones paralelas además BLACS incluye la versión CBLACS con
de las funciones básicas que utiliza ScaLAPACK. una interfaz en C. La diferencia es que éste viene
Estas funciones están implementadas utilizando incluido con el código original y se elige en tiempo
las funciones de BLAS y utilizando funciones de de compilación. Las funciones que se muestran en
comunicaciones adaptadas a los problemas de esta sección se corresponden con la interfaz en C.
álgebra lineal. Todas las funciones en la interfaz en C comienzan
por el carácter C en mayúsculas y el nombre de la
función se define en minúsculas. La nomenclatura de
• Versiones especializadas de funciones de
comunicaciones. Contenidas en la biblioteca las funciones de comunicaciones, por ejemplo, utiliza
BLACS, constituyen las funciones necesarias la siguiente estructura: CvXXYY2d
para la distribución de datos y resultados entre
los diferentes procesadores. Tipo de datos (v) i (Integer), s, d, c, z
Forma de la matriz (XX) ge, tr
Las bibliotecas PBLAS y ScaLAPACK son versiones Comunicación (YY) sd, rv (Send, Receive)
muy similares a las versiones originales secuenciales bs, br (Broadcast)
tanto en su nomenclatura como en la forma de
utilizarlas, por lo que se explicará únicamente la Las funciones disponibles se pueden clasificar en los
biblioteca BLACS. siguientes grupos:
60
Cuaderno de Investigación No. 40
Cblacs_get(int ictxt, int what, int *val). Devuelve – ICONTX: Contexto de Comunicación (Cblacs_
gridinit)
información interna de BLACS (context handle, rango
de IDs de mensajes, nivel de depuración,...). Un uso – M, N, A, LDA: Dimensiones de la matriz, punte-
típico esictxt a 0 y what a 0. Devuelve el contexto por ro a la matriz con los datos y dimensión de
defecto. almacenamiento.
– RDEST: Índice de fila del procesador destino.
Cblacs_gridinit(int *ictxt, char *major, int nrow, int – CDE ST: Índice de columna del procesador
ncol). Crea un contexto para la aplicación en marcha. destino.
Debe invocarse tras obtener el contexto por defecto
de BLACS, que se suministra como entrada en el Cvgerv2d(int ICONTX, int M, int N, XXX *A, int LDA,
primer parámetro (el contexto por defecto puede int RSRC, int CSRC). Recepción de un bloque de
obtenerse mediante la función Cblacs_get). El MxN elementos desde el procesador en la fila RSR y
en la columna CSRC (-1 implica a todos los procesos).
segundo parámetro define el orden de distribución
Los parámetros tienen el mismo significado que en la
de los procesos en el grid y los dos parámetros
función anterior.
siguientes las dimensiones del mismo.
Cvgebs2d(int ICONTX, char SCOPE, char *TOP, int M,
Cblacs_gridexit(int ICTXT). Libera un contexto int N, XXX *A, int LDA). Difusión del bloque apuntado
BLACS. por A a todos los procesos de una fila, columna o
del grid. Scope Indica el Ámbito de la Difusión:
Cblacs_exit(int Val). Esta rutina se debe llamar “COLUMNS”, Implica a todos los procesadores
cuando un proceso ha terminado de usar BLACS. en la columna del procesador que realiza el envío,
Un valor de 1 en Val permite seguir utilizando el MPI. “ROWS”, Equivalente a la anterior pero por filas o
“ALL”, Implica a todos los procesadores del grid. Top
Indica la Topología: “ “ Para la topología por defecto
Cblacs_gridinfo(int ICTXT, int *nP_Row, int *nP_
o “INCREASING_RING”, “DECREASING_RING”,
Col, int *my_P_Row, int *my_P_Col). Devuelve etc para otras topologías.
información acerca de un proceso en un determinado
contexto (ICTXT), devolviendo en nP_Row, nP_Col el Cvgebr2d(int ICONTX, char SCOPE, char *TOP,
número de procesos por fila y columna, además de int M, int N, XXX *A, int LDA, int RSRC, int CSRC).
las coordenadas my_P_Row, my_P_Col, (posición fila Recepción de una difusión iniciada con la operación
/ columna) del proceso que ha realizado la llamada. anterior.
61
7
CASO DE ESTUDIO:
SISTEMAS SIMÉTRICOS, DISPERSOS E INDEFINIDOS
Como hemos visto hasta ahora, la explotación simétrico, cuando A = AT, se da también la igualdad
de la estructura de una matriz en la resolución de entre L y M, y el trabajo asociado a la factorización es
un sistema de ecuaciones lineales es un campo la mitad del requerido en la eliminación Gaussiana.
que despierta mucho interés en el mundo de la
computación numérica, y donde queda aún muchísimo Algoritmo 21. Factorización LDMT
por hacer. En el álgebra lineal, los algoritmos para
resolver sistemas generales pueden optimizarse al 1. for j = 1 : n
enfocarlos a problemas que involucren propiedades
2. υ(1:j) = A(1:j,j)
como la simetría, la dispersión y el hecho de ser
definidas positivas. Así, múltiples variaciones a los 3. for k = 1 : j – 1
algoritmos básicos como la descomposición LU 4. υ(k+1:j) = v(k+1:j) – v(k) A(k+1:j,k)
pueden generar soluciones más eficientes para 5. end for
matrices estructuradas.
6. for I = 1 : j-1
Las matrices que hemos trabajado en este proyecto 7. A(i,j) = v(i) / A(i,i)
son simétricas, dispersas e indefinidas, por lo cual se 8. end for
comenzó por analizar los algoritmos comunes para
9. A(j,j) = v(j)
la factorización de matrices simétricas.
10. for k = 1 : j-1
7.1 FACTORIZACIÓN LDL T
11. A(j+1:n) = A(j+1:n,j) – v(k) A(j+1:n,k)
12. end for
Se desea desarrollar un método que nos
13. A(j+1:n,j) = A(j+1:n,j) / v(j)
permita explotar la estructura simétrica para un
sistema de ecuaciones lineales Ax = b. Se hace 14. end
entonces una variación a la factorización LU donde
A se factoriza al producto de tres matrices LDMT. Este algoritmo requiere la misma cantidad de trabajo
Donde D es una matriz diagonal y L y M son matrices que la factorización LU, cerca de 2n3 /3 flops. Sin
triangulares inferiores. Al obtener esta factorización embargo para obtener una mejor solución, haría falta
podwemos encontrar la solución a Ax = b en O(n2) aplicarle pivoteamiento a este algoritmo.
flops [4] resolviendo Ly = b (sustitución progresiva),
Dz = y, y MTx = z (sustitución regresiva). En el caso El siguiente es un ejemplo de la factorización LDMT:
62
Cuaderno de Investigación No. 40
1. G = In
Cuando A es simétrica, entonces L = M, y podemos 2. for j = 1 : n
ahorrar buena parte de la computación, haciendo la 3. υ(j:n) = A(j:n,j)
mitad del trabajo que el algoritmo anterior, cerca de 4. for k = 1 : j-1
n3 /3 flops. 5. υ(j:n) = υ(j:n) - G(j,k) * G(j:n,k)
6. end for
ALGORITMO 22. Factorización LDLT 7. G(j:n,j) = υ(j:n) / √υ(j)
8. end for
1. d = diagonal(A) 9. y = sustitución Progresiva (G, b)
2. υ = zerosn 10. x = sustitución Regresiva (G’, y)
3. L = In
4. for j = 1:n La factorización Cholesky requiere n3 /3 flops, y tiene
5. for i = 1:j-1 una gran estabilidad numérica, pero solo funciona
6. υ(i) = L(j,i) * d(i) con matrices simétricas definidas positivas.
7. end
8. υ(j) = A(j,j) - L(j,1:j-1) * v(1:j-1) 7.3 SISTEMAS TRIDIAGONALES
9. d(j) = v(j)
10. L(j+1:n,j) = (A(j+1:n,j) - L(j+1:n,1:j-1) * La solución de sistemas tridiagonales se hace
v(1:j-1)) / v(j) importante en algunos de los métodos que se
11. end explicarán más adelante, por lo que presentamos
12. y = sustitucionProgresiva(L,b) aquí un corto algoritmo para resolver dichos sistemas,
13. y = y ./ d luego de aplicar una descomposición LDLT, con un
14. x = sustitucionRegresiva(L’,y) orden lineal.
1. for k = 2:n
2. t = e(k-1)
3. e(k-1) = t / d(k-1)
4. d(k) = d(k) – t.e(k-1)
7.2 SISTEMAS DEFINIDOS POSITIVOS 5. end for
6. for k=2:n
Una matriz A ∈ ℜnxn es definida positiva si
7. b(k) = b(k) – e(k-1) b(k-1)
xT Ax>0 para todo diferente de cero. En tal caso,
8. end for
existe una factorización A = GGT, que tiene además
gran estabilidad numérica. La mtriz G es triangular 9. b(n) = b(n) / d(n)
inferior y su diagonal tiene valores positivos. 10. for k = n – 1 : -1 : 1
Esta factorización se conoce comúnmente como 11. b(k) = b(k) / d(k) – e(k) b(k+1)
factorización Cholesky. 12. end for
63
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
Con el algoritmo 24 se sobrescribe el vector b con permutaciones y de multiplicadores para generar así
la solución al sistema Ax = b, donde A es simétrica, la factorización PAPT = LTLT.
tridiagonal, definida positiva, con diagonal principal d
y diagonal secundaria e. El algoritmo 25 realiza dicha factorización en el
lenguaje MATLAB.
7.4 SISTEMAS SIMÉTRICOS INDEFINIDOS
ALGORITMO 25. Método de Parlett y Reid.
Una matriz cuya forma cuadrática xTAx toma PAPT = LTLT
valores positivos y negativos se denomina indefinida.
Aunque una matriz indefinida A puede tener una 1. ind = [1:n];
factorización LDLT, las entradas en estos factores 2. I = eye(n);
pueden tener una magnitud arbitraria. Es cierto que 3. P = I;
las estrategias de pivoteo comunes podrían usarse 4. M = I;
para evitar este inconveniente, pero también es 5. L = I;
cierto que dichas estrategias destruirían la estructura 6. for i = 1 : n-2
simétrica de la matriz, y con ello la oportunidad de 7. % se busca el mayor elemento de la columna %
explotar su estructura en la solución del sistema.
8. [mayor,index] = max(A(i,i+1:n));
Así pues debemos utilizar un pivoteo simétrico, de
9. index = index + i;
la forma A ← PAPT, pero lamentablemente así no
10. % se crea el vector de permutación %
siempre se obtiene estabilidad en la factorización
11. p = ind;
LDLT.
12. p(i+1) = index;
El reto es entonces utilizar elementos fuera de 13. p(index) = i+1;
la diagonal para hacer el pivoteamiento. Con 14. % se crea la matriz de permutación %
este objetivo surgen 2 formas de conseguirlo. La 15. per = I(:,p);
primera forma es mediante el método de Aasen que 16. A = per * A * per’;
computa una factorización de la forma PAPT = LTLT, 17. P = per * P;
donde L es triangular inferior y T es tridiagonal. La 18. L(i+1:n,i) = L(p(i+1:n),i);
segunda forma es utilizando el método de Bunch y 19. % se crea el vector de multiplicadores alfa %
Parlett que computa una factorización PAPT = LDLT, 20. m = zeros(n,1);
donde D es una suma directa de bloques pivote de 21. for j = i+2 : n
tamaño 1x1 y 2x2 (matriz diagonal por bloques). 22. m(j) = A(i,j) / mayor;
Ambas factorizaciones involucran n3 / 3 flops y una 23. end for
vez computadas pueden utilizarse para resolver el 24. % se crea la matriz de multiplicadores %
sistema Ax = b en O(n2). 25. mult = I - m * I(:,i+1)’;
26. A = mult * A * mult’;
7.4.1 Método de Aasen 27. M = mult * M;
El método de Aasen está basado en el 28. L = L - tril(mult,-1);
algoritmo de Parlett y Reid (1970) para computar la 29. end for
descomposición PAPT = LTLT. El proceso requiere 30. T = A;
2n3 / 3 flops, por lo que no es tan bueno como 31. z=L\(P*b); % Lz = Pb %
deseamos, pero es un punto de partida para 32. ω=T\z; % Tω = z %
los métodos siguientes. El método premultiplica 33. y=L’\w; % L’y = w %
y postmultiplica la matriz A por matrices de 34. x=P*y; % x = Py %
64
Cuaderno de Investigación No. 40
Dicho método aplicado a la matriz ALGORITMO 26. Método para calcular columna
j de H
1. β = [0, β]
2. if j == 1
3. h(1) = A(1,1)
4. else if j == 2
En cada paso tendríamos
5. h(1) = β (1)
6. h(2) = A(2,2)
7. else
8. l(1) = 0
9. l(2) = 0
10. l(3:j) = L(j,2:j-1)
11. l(j+1) = 1
12. h(j) = A(j,j)
Y PAPT = LTLT, con P = [e1, e3, e4, e5], 13. for k = 1:j-1
14. h(k) = β (k) * l(k) + α(k) * l(k+1) +
β (k+1) * l(k+2)
15. h(j) = h(j) - l(k+1) * h(k)
16. end
17. end
65
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
66
Cuaderno de Investigación No. 40
FIGURA 27
Fill-in de método Aasen para una matriz en diferentes ordenaciones
FIGURA 28
Fill-in de método Aasen para una matriz en diferentes ordenaciones
67
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
7.4.2 Factorización LDLT por bloques D3 Un pivote de 1x1 de Ai,i será estable. Se
hace intercambio simétrico con las filas y
El algoritmo de Bunch-Kaufman para columnas i y j.
la factorización LDLT por bloques realiza la
descomposición de una matriz A en una matriz D4 Un pivote de 2x2 usando columnas j e i será
triangular inferior L y una matriz diagonal por estable. Se hace un intercambio simétrico
bloques D, donde cada bloque tiene un tamaño con las filas y columnas i y j+1. Ambas
1x1 o 2x2. Un bloque de 2x2 indica que un pivote columnas son eliminadas en este paso.
de 2x2 fue requerido para una eliminación estable
de las columnas correspondientes; el elemento α es una constante para el algoritmo. El valor
subdiagonal correspon-diente en L será cero. La maximiza la estabilidad de este algo-
librería de optimización LAPACK [31] implementa
este algoritmo para la factorización de matrices algoritmo [4]. Para sistemas definidos positivos solo
simétricas e indefinidas en la función dsytrf. se necesita el caso D1. El caso D3 es requerido
también cuando el sistema es semi-definido. El
En la eliminación de la columna j se pueden dar 4 caso D4 se necesita para sistemas indefinidos. El
casos [24]: caso D2 existe para prevenir los casos donde D4
pueda ser inestable. Este algoritmo, comparado con
D1 |Aij| ≥ α |Aij|, donde j < I < N y |Aij| = la descomposición LTLT requeriría mayor tiempo de
|Akj|. Aquí un pivote de 1x1 de Aij comunicación al ser implementado en su versión
será estable, no se necesita intercambio paralela. Para un análisis más completo de este
simétrico. algoritmo en su versión densa ver [24].
68
8
CONCLUSIONES
Para la solución de sistemas de ecuaciones lineales En el caso de los métodos directos hemos encontrado
cuya matriz asociada sea dispersa hemos encontrado que su aplicación, para matrices asociadas dispersas,
que los métodos iterativos funcionan de manera no es apropiada porque la dispersión de la matriz se
adecuada, logrando buenos niveles de convergencia puede perder en los procesos intermedios cuando
y con grandes posibilidades de implementar los se intenta hallar la inversa de la matriz de entrada.
algoritmos de forma paralela. Para evitar esto existen algunas soluciones que
nos permiten conservar la estructura de la matriz y
En el caso de matrices dispersas en el que la ejecutar el método sin encontrar explícitamente la
factorización no requiera pivoteo y se preserve en inversa de la matriz.
gran medida el grado de dispersión observamos
que Cholesky y LDLT funcionan correctamente y se Con la experimentación realizada con el método
obtienen resultados adecuados en el proceso. de Aasen encontramos que éste funciona adecua-
damente para el caso de matrices densas, pero al
A pesar de que el algoritmo de Gauss-Seidel no se
aplicarlo a matrices dispersas esta propiedad se
puede paralelizar en el caso de matrices densas,
pierde, haciendo que el método sea más lento en el
hemos encontrado que si la matriz es dispersa
sentido que los métodos de almacenamiento para
con muchos ceros por debajo de la diagonal
principal y con valores diferentes de cero cercanos matrices dispersas no son adecuados ni eficientes
a la diagonal principal, es posible paralelizar dicho para el caso de matrices densas.
método, teniendo en la cuenta la comunicación
entre diferentes procesadores (computadores) de La utilización de las librerías de optimización para
los resultados parciales. Adicionalmente creemos operaciones de álgebra lineal (Blas, Lapack, etc)
que generar métodos híbridos en los que se aplique para la utilización con matrices dispersas se ha
un preprocesamiento del sistema, por ejemplo una comprobado que funcionan de manera eficiente. Sin
factorización o reodenamiento para el caso de embargo, éstas librerías nos restringen la estructura
matrices dispersas, y luego se aplique un algoritmo de la matriz y no están desarrolladas para utilizar
iterativo en forma paralela puede ser útil para lograr todos los tipos de almacenamiento mencionados en
eficiencia en la solución del sistema. este reporte.
69
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
70
9
APÉNDICES
71
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
72
Cuaderno de Investigación No. 40
73
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
18. //Convertir una matriz a Coordenadas 54. for(i=0; i < size; i++){
19. int fcn_mat2coor(double* A[], int size, Coord 55. R[i]=0;
*sparse){ 56. }
20. int i,j; 57. for(i=0; i < nz; i++){
21. int cont=0; 58. R[sparse.JR[i]] += (V[sparse.JC[i]] *
22. for(i=0; i < size; i++){ sparse.AA[i]);
23. for(j=0; j < size; j++){ 59. }
24. if(A[i][j]!=0){ 60. return R;
25. sparse->AA[cont]=A[i][j]; 61. }
26. sparse->JR[cont]=i; 62.
63. //Imprimir componentes de matriz Coord
27. sparse->JC[cont]=j;
64. void fcn_printCoo(Coord sparse, int nz){
28. cont++;
65. int i;
29. }
66. for(i=0;i<nz;i++){
30. }
67. printf(“AA: %lf\tJR: %d\tJC: %d\n”,
31. }
sparse.AA[i], sparse.JR[i], sparse.JC[i]);
32. return cont;
68. }
33. }
69. }
34. 70.
35. //Convertir de Coordenadas a Matriz 71. #endif
36. double ** fcn_coor2mat(int size, int nz,
Coord sparse){
37. int i,j; ALGORITMO A3. Encabezado con funciones
38. double **A; para formato CSC – csc.h
39. A = (double **)malloc(size*sizeof(
double*)); 1. /************************************************
40. for(i=0;i<size;i++){ 2. Fichero: csc.h -> Sparse Matrices stored in
41. A[i] = (double *)malloc(size*sizeof Compressed Sparse Column format.
(double));
3. Funciones para trabajar matrices dispersas
42. }
almacenadas en formato
43. for(i=0; i < nz ; i++){
4. de columna comprimida (CSC).
44. A[sparse.JR[i]][sparse.JC[i]]=sparse.AA[i];
5. Por: Juan David Jaramillo J.
45. }
6. ************************************************/
46. return A;
7. #ifndef CSC_H
47. }
48. 8. #define CSC_H
49. //Producto Matriz-Vector 9.
50. double * fcn_mulCooVec(Coord 10. typedef struct csc CSC;
sparse, double V[], int size, int nz){ 11.
51. int i,j; 12. struct csc{
52. double *R; 13. double* AA;
53. R = (double *)malloc(size*sizeof(double)); 14. int* IA;
74
Cuaderno de Investigación No. 40
75
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
34. }
ALGORITMO A4. Encabezado con funciones
35.
para formato CSR – csr.h
36. //Convertir de CSR a Matriz
1. /************************************************ 37. double ** fcn_csr2mat(int size, int nz, CSR
2. Fichero: csr.h -> Sparse Matrices stored in sparse){
Compressed Sparse Row format. 38. int i,j;
3. Funciones para trabajar matrices dispersas 39. double **A;
almacenadas en formato 40. A = (double **)malloc(size*sizeof(double*));
4. de fila comprimida (CSR). 41. for(i=0;i<size;i++){
5. Por: Juan David Jaramillo J. 42. A[i] = (double *)malloc(size*sizeof
6. ************************************************/ (double));
7. #ifndef CSR_H 43. }
8. #define CSR_H 44. i=0;
9. 45. for(j=0; j < nz ; j++){
10. typedef struct csr CSR; 46. while(sparse.IA[i+1]==j){
11. 47. i++;
12. struct csr{ 48. }
13. double* AA; 49. A[i][sparse.JA[j]]=sparse.AA[j];
14. int* JA; 50. }
15. int* IA; 51. return A;
16. };
52. }
17.
53.
18. //Convertir una matriz a CSR
54. //Producto Matriz-Vector
19. int fcn_mat2csr(double* A[], int size, CSR
55. double * fcn_mulCsrVec(CSR sparse, double
*sparse){
V[], int size, int nz){
20. int i,j;
56. int i,j;
21. int cont=0;
57. double *R;
22. for(i=0; i < size ; i++){
58. R = (double *)malloc(size*sizeof(double));
23. sparse->IA[i]=cont;
59. for(i=0; i < size; i++){
24. for(j=0; j<size; j++){
25. if(A[i][j]!=0){ 60. R[i]=0;
26. sparse->AA[cont]=A[i][j]; 61. }
27. sparse->JA[cont]=j; 62. j=0;
28. cont++; 63. for(i=0; i < nz; i++){
29. } 64. while(sparse.IA[j+1]==i)
30. } 65. j++;
31. } 66. R[j] += (V[sparse.JA[i]] * sparse.AA[i]);
32. sparse->IA[size]=cont; 67. }
33. return cont; 68. return R;
76
Cuaderno de Investigación No. 40
77
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
78
Cuaderno de Investigación No. 40
79
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
80
Cuaderno de Investigación No. 40
81
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
82
Cuaderno de Investigación No. 40
83
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
1. subroutine sustReg(U,x,b,n)
ALGORITMO B5. Sustitución progresiva -
2.
sustProg.f90
3. implicit none
4. integer:: i
1. subroutine sustProg(L,x,b,n)
5. integer,intent(in)::n
2. 6. real(kind=8),intent(in)::U(n,n),b(n,1)
3. implicit none 7. real(kind=8),intent(out)::x(n,1)
4. integer:: i 8. real(kind=8)::T(1,1)
5. integer,intent(in)::n 9. real(kind=8),allocatable::S1(:,:),S2(:,:)
6. real(kind=8),intent(in)::L(n,n),b(n,1) 10.
7. real(kind=8),intent(out)::x(n,1) 11. x=b
8. real(kind=8)::T(1,1) 12. x(n,1)=x(n,1)/U(n,n)
9. real(kind=8),allocatable::S1(:,:),S2(:,:) 13. do i=n-1,1,-1
10. 14. allocate(S1(1,n-i))
11. x=b 15. allocate(S2(n-i,1))
12. x(1,1)=x(1,1)/L(1,1) 16. S1(1,:)=U(i,i+1:n)
13. do i=2,n 17. S2(:,1)=x(i+1:n,1)
14. allocate(S1(1,i-1)) 18. T=matmul(S1,S2)
15. allocate(S2(i-1,1)) 19. x(i,1)=(x(i,1)-T(1,1))/U(i,i)
16. S1(1,:)=L(i,1:i-1) 20. deallocate(S1,S2)
17. S2(:,1)=x(1:i-1,1) 21. end do
18. T=matmul(S1,S2) 22.
19. x(i,1)=(x(i,1)-T(1,1))/L(i,i) 23. return
20. deallocate(S1,S2) 24. end subroutine sustReg
84
Cuaderno de Investigación No. 40
REFERENCIAS
[1] O. Schenk and K. Gärtner. On fast factorization International Conference on Parallel Processing.
pivoting methods for sparse symmetric 1995.
indefinite systems. 2004.
[9] A. Rodríguez. Paralelismo en Linux.
[2] Y. Saad. Iterative methods for sparse linear http://eureka.ya.com/arielrodriguez/tutoriales/
systems. 2000. linuxpar.html
[3] V. Kumar. Introduction to parallel computing. [10] A. Geist. PVM: Parallel Virtual Machine. The
The Benjamin/Cummings Publishing Company, MIT Press, Massachusetts. 1994.
California. 1994.
[11] A. Vidal and J. Pérez. Introducción a la
[4] G. Golub and C. Van Loan. Matrix computations. programación en MPI. Universidad Politécnica
The Jones Hopkins University press, Baltimore. de Valencia.
1996
[12] CESGA. Introducción a Fortran 90. Sección 5:
[5] G. Montero et al. Resolución de sistemas de
Métodos numéricos.
ecuaciones tipo sparse: la estrategia RPK.
http://www.cesga.es/telecursos/F90/sec5/
2003.
cap1/Tema5_Cap1_5.html
[6] E. Flórez. Construcción de inversas aproximadas
tipo sparse basada en la proyección ortogonal [13] V. Pérez and H. Herrero. Métodos matemáticos,
de Frobenius para el precondicionamiento de apuntes de la asignatura. Universidad de
sistemas de ecuaciones no simétricos. Las Castilla-La Mancha. 2002.
Palmas de Gran Canaria. 2003.
[14] V. Sonzogni et al. Resolución de grandes
[7] J. Brandts. Projection methods for oversized sistemas de ecuaciones en un cluster de
linear algebra problems. Utrecht. NAW 5/1 nr. computadoras. Argentina. 2004.
3, September 2000.
[15] N. Scenna et al. Modelado, simulación y
[8] D. Becker et al. Beowulf: A Parallel Workstation optimización de procesos químicos. Universidad
for Scientific Computation. Proceedings, Tecnológica Nacional. Argentina. 1999.
85
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
[16] M. Heath. Parallel numerical algorithms - [26] I. Duff and S. Pralet. Strategies for scaling
Cholesky factorization. University of Illinois. and pivoting for sparse symmetric indefinite
2004. problems. CCLRC Rutherford Appleton
Laboratory. Inglaterra. 2004.
[17] M. Heath. Parallel numerical algorithms - Band
and tridiagonal systems. University of Illinois. [27] B. Lang. Parallel Direct Methods for Dense Linear
2004. Systems. Institute for Scientific Computing.
Aachen University of Technology. Alemania.
[18] J. Bunch and R. Marcia. A pivoting strategy for 2001.
symmetric tridiagonal matrices. John Wiley and
sons, ltd. EEUU. 2005. [28] K. Shen et al. Efficient 2D sparse LU factorization
on parallel machines. University of California.
[19] S. Wright. Modified Cholesky factorizations in EEUU. 2000.
interior-point algorithms for linear programming.
US department of energy. EEUU. [29] D. Irony and S. Toledo. The snap-back pivoting
method for symmetric banded indefinite
[20] F. Villatoro et al. Métodos directos para matrices. Israel Science Foundation. 2002.
ecuaciones lineales. España. 2002.
[30] G. Karypis et al. METIS: Family of multilevel
[21] P. Matstoms. Sparse QR Factorization in partinioning algorithms.
MATLAB. Linköping University. Suecia. 1994. http://www-users.cs.umn.edu/~karypis/metis/
metis/index.html
[22] W. Lin. Finding optimal ordering of sparse
matrices for column-oriented parallel Cholesky [31] The Netlib Repository: Colección de software
factorization. I-Shou University. Taiwan. The matemático de libre distribución.
Journal of Supercomputing, 24, 259–277, http://www.netlib.org/
2003.
[32] R. Burden and J Faires. Análisis numérico.
[23] A. George and M. Saunders. Solution of sparse Thomson Learning. México. 2002. Secciones
linear equations using cholesky factors of 6 y 7.
augmented systems. Canadá. 2000.
86
Cuaderno de Investigación No. 40
87
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
88
Cuaderno de Investigación No. 40
89
Métodos directos para la solución de sistemas de ecuaciones lineales simétricos, indefinidos, dispersos y de gran dimensión
90