Solvers con matrices ralas T T Parte II: Factorizaciones LL , LDL y LU ralas MC. Miguel Vargas Félix [email protected] http://www.cimat.mx/~miguelvargas 07/09/10 1/37 Contenido Contenido El plan La famosa factorización Cholesky Reordenamiento de renglones y columnas Matrices de permutación Representación de matrices ralas como grafos Algoritmos de reordenamiento Factorización Cholesky simbólica Llenado de la factorización Cholesky LL’ Llenado de la factorización Cholesky LDL’ Llenado de la factorización LU (con estructura simétrica) Un ejemplo ¿Preguntas? Para saber más... 27/09/10 2/37 El plan El plan Describiremos tres estrategias para disminuir el tiempo y uso de memoria en la factorizaciones Cholesky y LU. 1. Reordenar los renglones y columnas de la matriz del sistema de ecuaciones para reducir el tamaño de las matrices resultantes de la factorización. 2. Utilizar la factorización Cholesky simbólica para obtener la factorización exacta y formar con ésta matrices ralas sin elementos cero. 3. Cambiando la secuencia de llenado de la factorización es posible paralelizar [Heat91]. Las estrategias anteriores son aplicables también a la factorización LU aplicada a matrices no simétricas en cuanto a sus valores, pero simétricas con respecto a su estructura. Veremos el algoritmo. 27/09/10 3/37 La famosa factorización Cholesky La famosa factorización Cholesky Un sistema de ecuaciones A x= y, con una matriz A∈ℝ n×n simétrica positiva definida puede ser resuelto aplicando a esta matriz la factorización Cholesky A= L LT, donde L es una matriz triangular inferior. Ésta factorización existe y es única [Quar00 p80]. Las fórmulas para determinar los valores de L son j−1 1 Li j = Ai j− ∑ L i k L j k , para i j Lj j k =1 j−1 L j j= A j j− ∑ L 2j k. k =1 27/09/10 4/37 La famosa factorización Cholesky Sustituyendo A x= y tenemos por la factorización A= L LT, tenemos L L T x= y, hagamos z= LT x y entonces tendremos dos sistemas de ecuaciones L z= y, LT x=z, con L z= y se resuelve para z haciendo una sustitución hacia adelante con i−1 1 zi= y i −∑ Li , k z k Li , i k =1 y con L T x=z resolvemos para x sustituyendo hacia atrás con n 1 x i = T z i − ∑ LiT, k x k . Li ,i k =i1 27/09/10 5/37 Reordenamiento de renglones y columnas Reordenamiento de renglones y columnas Buscamos reordenar los renglones y las columnas de A, de tal forma que se reduzca el número de entradas no cero de la matriz factor L. Recordemos la notación L , que indica el número de elementos no cero de L. A= L= A la izquierda está una matriz de rigidez A∈ℝ556×556, con A =1810, a la derecha la matriz triangular inferior L, con L =8729, resultante de la factorización Cholesky de A. 27/09/10 6/37 Reordenamiento de renglones y columnas Ahora con reordenamiento tenemos que la matriz de rigidez A' con A ' =1810 (con la misma cantidad de elementos no nulos que A) y su factorización L ' tiene L ' =3215. Ambas factorizaciones permiten resolver el mismo sistema de ecuaciones. A' = L '= Es decir reducimos la factorización L' =3215 =0.368. L =8729 Para determinar este reordenamiento utilizamos las rutinas de la librería METIS [Kary99]. 27/09/10 7/37 Matrices de permutación Matrices de permutación Dada P una matriz de permutación, las permutaciones (reordenamientos) de columnas del tipo A' P A, o de renglón A' A P solas destruyen la simetría de A [Golu96 p148]. Para preservar la simetría de A solamente podemos considerar reordenamiento de las entradas de la forma A' P A P T. Es de notar que esta permutaciones no mueven los elementos fuera de la diagonal a la diagonal. La diagonal de P A P T es un reordenamiento de la diagonal de A. Dado que P A P T es además simétrica y positiva definida para cualquier permutación de la matriz P, podemos entonces resolver el sistema reordenado P A P T P x = P y . La elección de P tendrá un efecto determinante en el tamaño de las entradas no cero de L. Calcular un “buen” reordenamiento de la matriz A que minimice las entradas no cero de L es un problema NP completo [Yann81], sin embargo existen heurísticas que generan un reordenamiento aceptable en un tiempo reducido. 27/09/10 8/37 Representación de matrices ralas como grafos Representación de matrices ralas como grafos Un grafo G= X , E consiste en un conjunto finito de nodos o vértices X junto con un conjunto E de aristas, los cuales son pares no ordenados de vértices. Un ordenamiento (o etiquetado) de G es simplemente un mapeo del conjunto {1, 2, , N } en X, donde N denota el número de nodos de G. El grafo ordenado por será denotado como G = X , E . Sea A una matriz simétrica de N × N, el grafo ordenado de A, denotado por G A = X A , E A en el A cual los N vértices de G A están numerados de 1 a N, y { x i , x j }∈E si y solo sí ai j =a j i≠0, i≠ j. Aquí x i denota el nodo de X A con etiqueta i. 1 2 3 4 5 6 1 2 3 4 5 6 [ ] 1 * * * * * * * * * * * * * * * * * * 2 3 4 5 6 Matriz A Grafo G 27/09/10 A 9/37 Representación de matrices ralas como grafos Para cualquier matriz de permutación P ≠ I, los grafos no ordenados (o etiquetados) de A y P A P T son los mismos pero su etiquetado asociado es diferente. Así, un grafo no etiquetado de A representa la estructura de A sin sugerir un orden en particular. Esta representa la equivalencia de las clases de matrices P A P T. Entonces, encontrar una “buena” permutación de A equivale a encontrar un “buen” ordenamiento de su grafo [Geor81]. 1 2 3 4 5 6 1 2 3 4 5 6 [ ] 6 * * * * * * * * * * * * * * * * * * Matriz P A P 2 3 1 4 5 T Grafo G 27/09/10 P AP T 10/37 Representación de matrices ralas como grafos Dos nodos x , y ∈ X en un grafo G X , E son adyacentes si { x , y r }∈ E. Para Y ⊂ X, el conjunto adyacente de Y, denotado como ady Y , es adj Y ={ x ∈ X −Y ∣{ x , y }∈ E para algún y ∈Y }. En otras palabras, ady Y es simplemente el conjunto de nodos en G que no están en Y pero son adyacentes en al menos un nodo de Y. 1 2 3 4 5 6 1 2 3 4 5 6 [ ] 1 * * * * * * * * * * * * * * * * * * 2 3 4 5 6 gr x 2 =3 Ejemplo de adyacencia de un conjunto Y ⊂ X. Y ={ x 1 , x 2} adj Y = { x 3 , x 4 , x 6 } Para Y ⊂ X, el grado de Y, denotado por gr Y , es simplemente el número ∣ady Y ∣, donde ∣S∣ denota el número de miembros del conjunto S. En el caso de que se trate de un solo elemento, consideraremos gr { x 2 }≡gr x 2 . 27/09/10 11/37 Algoritmos de reordenamiento Algoritmos de reordenamiento Vamos a hablar muy brevemente de los algoritmos de reordenamiento. La heurística más común utilizada para realizar el reordenamiento es el algoritmo de grado mínimo. La versión básica de éste [Geor81 p116] es: Dada un matriz A y su correspondiente grafo G 0 i 1 repetir En el grafo de eliminación G i−1 X i−1 , E i−1 , elegir un nodo x i que tenga grado mínimo. Formar el grafo de eliminación G i X i , E i como sigue: Eliminar el nodo x i de G i−1 y sus aristas inicidentes Agregar aristas al grafo tal que los nodos adj x 1 sean pares adyacentes en G i. i i1 mientras i∣ X ∣ Cuando el grado mínimo se presenta en varios nodos, usualmente se elige uno de forma arbitraria. 27/09/10 12/37 Algoritmos de reordenamiento A continuación un ejemplo de una secuecia dada por el algoritmo de grado mínimo: i Grafo de eliminación G i−1 1 2 1 xi gr x i 4 1 2 2 3 2 3 4 5 6 1 2 3 2 6 1 5 3 3 6 5 27/09/10 13/37 Algoritmos de reordenamiento i Grafo de eliminación G i−1 xi gr x i 5 2 1 1 6 0 1 4 5 6 6 5 6 1 6 La secuencia de eliminación es entonces 4, 2, 3, 5, 1, 6. Éste es el nuevo orden para la matriz A, lo que equivale a una matriz de permutación 0 0 0 P= 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 . 0 0 1 Versiones más avanzadas de este algoritmo pueden consultarse en [Geor89]. 27/09/10 14/37 Algoritmos de reordenamiento Ahora vamos a revisar brevemente el método de disección anidada, el cual es más apropiado para matrices resultantes de problemas de diferencias finitas y elemento finito. La principal ventaja de este algoritmo comparado con el de grado mínimo es la velocidad y el poder predecir las necesidades de almacenamiento. La ordenación producida es similar a la del algoritmo de grado mínimo. Vamos a introducir la definición de separador. El conjunto S ⊂ X es un separador del grafo conectado G si el grafo sección G X −S está desconectado. Se muestra que S = { x 3 , x 4 , x 5 } es un separador de G, dado que G X −S tiene tres componentes, los conjuntos de nodos { x 1 }, { x 2 } y { x 6 , x 7 }: 5 1 2 3 G 4 6 7 Ejemplo de un conjunto separador S. 27/09/10 15/37 Algoritmos de reordenamiento Sea A una matriz simétrica y G A su grafo no dirigido asociado. Consideremos un separador S en G A, cuya remoción desconecta el grafo en dos conjuntos de nodos C 1 y C 2. Si los nodos en S son numerados después de aquellos de C 1 y C 2, entonces se inducirá una partición en la correspondiente matriz ordenada. La observación principal es que los bloques cero en la matriz continúan siendo cero después de la factorización. Cuando es elegido apropiadamente, una submatriz “grande” está garantizada de permanecer cero. La idea puede ser aplicada recursivamente, de tal forma que los ceros puedan ser preservados en la misma forma en las submatrices. C1 C2 [ A1 0 V 1 0 A2 V 2 V T1 V T2 AS ] S El efecto de un conjunto separador S en una matriz. Esta procedimiento aplicado de forma de forma recursiva se conoce como algoritmo de disección anidada generalizado [Lipt77]. Una versión mejorada de este algoritmo es la empleada en la librería METIS [Kary99], ésta es la que hemos utilizado en la implementación de nuestro programa. 27/09/10 16/37 Factorización Cholesky simbólica Factorización Cholesky simbólica Cuando trabajamos con matrices grandes y ralas, es muy costoso calcular directamente L utilizando j−1 j−1 1 Li j = Ai j− ∑ L i k L j k y L j j= A j j− ∑ L 2j k, Lj j k =1 k =1 dado que hay muchas entradas L i j que son cero. La solución a este problema es determinar a priori que elementos de L son distintos de cero y entonces sólo llenar éstos utilizando estas expresiones. El algoritmo para determinar los elementos distintos cero en L se le denomina factorización Cholesky simbólica [Gall90 p86-88]. 27/09/10 17/37 Factorización Cholesky simbólica Para una matriz rala A, definamos a j ≝ {k j Ak j≠0 }, j=1n como el conjunto de los índices de los elementos no nulos de la columna j de la parte estrictamente triangular inferior de A. De forma análoga definimos para la matriz L, los conjuntos l j ≝ { k j ∣ L k j ≠0 }, j=1n ∣ Requeriremos de conjuntos r j que serán usados para registrar las columnas de L cuyas estructuras afectarán a la columna j de L. para j 1n rj ∅ lj aj para i∈r j l j l j ∪l i ∖ { j } fin para min {i∈l j } si l j ≠∅ p j otro caso r p r p∪ { j } fin para { Factorización Cholesky simbólica. 27/09/10 18/37 Factorización Cholesky simbólica Esta algoritmo de factorización simbólica es muy eficiente, la complejidad en tiempo y espacio es de orden O L . Vamos ahora a mostrar visualmente como funciona la factorización simbólica, ésta puede ser vista como una secuencia de grafos de eliminación [Geor81 pp92-100]. Dado H 0 = A, podemos establecer una correspondencia entre una transformación de H 0 a H 1 como los cambios correspondientes en sus grafos respectivos. Denotamos H 0 por G H y H 1 por H G . Dado un ordenamiento implicado por G A, denotemos el nodo i por x i. 0 1 1 GH 0 2 3 4 5 6 27/09/10 [ x x x x x x x H 0= x x x x x x x x x x x ] 19/37 Factorización Cholesky simbólica 1) Eliminar el nodo x 1 y sus aristas incidentes 2) Agregar las aristas a el grafo tal que los nodos en adj x 1 sean pares adyacentes en G H . 1 1 G 2 H0 3 4 5 6 2 G H1 x x 3 H 1= 4 6 [ [ x x x x x x x H 0= x x x 5 x 27/09/10 x x x x x x x x x x x x x ] ] x X x x x x X x x x x x 20/37 Factorización Cholesky simbólica 1) Eliminar el nodo x 2 y sus aristas incidentes 2) Agregar las aristas a el grafo tal que los nodos en adj x 2 sean pares adyacentes en G H . 2 2 GH 1 H 1= 4 6 5 4 GH [ [ 3 3 2 H 2= 6 x x 5 x x x x x X x x x x x x x x x x x X 27/09/10 x x x X x x x x ] ] x x x X x X x X X x X x x x X X x x 21/37 Factorización Cholesky simbólica 1) Eliminar el nodo x 3 y sus aristas incidentes 2) Agregar las aristas a el grafo tal que los nodos en adj x 3 sean pares adyacentes en G H . 3 4 G H2 H 2= 6 GH [ [ 3 x x 5 4 3 x X x x x x x x x X H 3= 6 5 27/09/10 x x x x x x x X x X x X X x X x x x X X x x x x X x X x X x X X ] ] x X x X X X x x x x 22/37 Factorización Cholesky simbólica 1) Eliminar el nodo x 4 y sus aristas incidentes 2) Agregar las aristas a el grafo tal que los nodos en adj x 4 sean pares adyacentes en G H . 4 GH 3 4 x x x x x X x x x x x x H 3= 6 GH [ [ 4 x x 6 5 5 H 4= 27/09/10 x x x X x X x x X x X X x X x X X x X x X X X x x x x x x X X x X x X X X x x X x x ] ] 23/37 Factorización Cholesky simbólica 1) Eliminar el nodo x 5 y sus aristas incidentes 2) Agregar las aristas a el grafo tal que los nodos en adj x 5 sean pares adyacentes en G H . 5 GH 6 4 GH 5 5 6 [ [ x x x x x x x x X X x X x X X X x x X x x x x x x x x x X x X X X x x x x x x H 4= X x x X X H 5= 27/09/10 x x x X x X X x X x X X ] ] 24/37 Factorización Cholesky simbólica 1) Eliminar el nodo x 6 y sus aristas incidentes 2) Agregar las aristas a el grafo tal que los nodos en adj x 6 sean pares adyacentes en G H . 6 GH 5 6 [ [ x x H 5= H 6= 27/09/10 x x x x x x x x X x X X x X x X X X x x x x x x x X X x x X X X x X X X x x x x X x X X x x x x x X x X x x ] ] 25/37 Factorización Cholesky simbólica Sea L la matriz triangular factor de la matriz A. Definamos el grafo llenado de G A como el grafo simétrico G F = X F , E F , donde F = L LT. Así el conjunto de aristas E F consiste de todas las aristas en E A junto con todos las aristas agregadas durante la factorización. Obviamente X F = X A. 1 GH 2 [ 3 x x x x x x x x x x H 0= x x x x x x x x 4 0 5 6 1 2 [ 3 4 x x F = L L T= GF 5 6 x x x x x x x X x X X x X x X X x X x X X X x x x x ] ] Grafos inicial y el resultante de la secuencia de eliminación. 27/09/10 26/37 Llenado de la factorización Cholesky LL’ Llenado de la factorización Cholesky LL’ Las fórmulas para determinar los valores de L son j−1 1 Li j = A − ∑ L L , para i j L j j i j k =1 i k j k j−1 L j j= A j j− ∑ L 2j k. k =1 Para hacerlas más eficientes, podemos escribirlas como 1 Li j = A − ∑ L L L j j i j k ∈ J i ∩J j i k j k , para i j k j L j j= A j j − ∑ k ∈J j k j 27/09/10 L 2j k . 27/37 Llenado de la factorización Cholesky LL’ La secuencia de rellenado que permite la factorización en paralelo es: L5 4 L6 4 En este ejemplo se puede ver que se pueden calcular de forma independiente L 5 4 y L 6 4. Esto es, se puede paralelizar el algoritmo de llenado cada columna de L paralelizando en los renglones [Heat91 pp442-445]. 27/09/10 28/37 Llenado de la factorización Cholesky LL’ Una implementación del algoritmo sería: Para j 1n Lj j Aj j Para q 1∣V j L ∣ | | | | | | | | | | | | | q q | L j j L j j −V j L V j L L j j Lj j T Lj j Ljj Paralelizar para q 1∣J j LT ∣ | | | | | | | | i J qj LT L i j Ai j r 1 s 1 r J i L s J j L Repetir | Mientras | | 27/09/10 | r r1 r | J i L Mientras | s s1 s | J j L Mientras = | Si = j | | Salir del ciclo Repetir r s | L i j L i j −V i L V j L | r r1 r | J i L | s s1 s | J j L L Li j i j Lj j T L j i Li j | | | | | | | | | | | | | 29/37 Llenado de la factorización Cholesky LDL’ Llenado de la factorización Cholesky LDL’ Las fórmulas para determinar los valores de L son j−1 1 Li j = A −∑ L L D , para i j D j i j k =1 i k j k k j−1 2 D j = A j j − ∑ L j k D k. k =1 Para hacerlas más eficientes, podemos escribirlas como 1 Li j = A − ∑ L L D D j i j k ∈ J i ∩J j i k j k k , para i j k j D j= A j j− L 2j k D k . k∈J i ∑ k j 27/09/10 30/37 Llenado de la factorización LU (con estructura simétrica) Llenado de la factorización LU (con estructura simétrica) Las fórmulas para determinar los valores de L y U son j−1 U i j = Ai j − ∑ L i k U k j para i j, k =1 i−1 1 L j i= A −∑ L U para i j, U i i j i k =1 j k k i i−1 U i i = Ai i − ∑ Li k U k i, L ii =1. k =1 Para hacerlas más eficientes, podemos escribirlas como U i j = Ai j − ∑ Li k U j k k ∈ J i ∩ J j k j L j i= para i j, 1 A j i− ∑ L j k U ik para i j, U ii k ∈ J j ∩J i k i U i i = Ai i − ∑ k ∈ J i k i 27/09/10 Li k U i k , L ii =1. 31/37 Llenado de la factorización LU (con estructura simétrica) La secuencia en la que se rellenan las entradas de L y U es: U 4 5U 4 6 En este ejemplo se puede ver que se pueden calcular de forma independiente U 4 5 y U 4 6. Esto es, se puede paralelizar el algoritmo de llenado de los renglones U paralelizando por columnas y las columnas de L paralelizando por renglones. 27/09/10 32/37 Llenado de la factorización LU (con estructura simétrica) Una implementación del algoritmo sería: Para j 1n U j j Aj j Para q 1∣V j L ∣ q q | U j j U j j −V j L V j U Lj j 1 T U jj U jj Paralelizar para q 1∣J j L T ∣ | | | | | | | | | | i J qj LT L i j Ai j T U ji A ji r 1 s 1 r J i L s J j L Repetir | Mientras | | r r1 27/09/10 r | | | | | | | | | | | | | | | | | J i L Mientras | s s1 s | J j L Mientras = | Si = j | | Salir ciclo Repeat | L i j L i j −V ri L V sj U T | | | | | | | | | | | | | | | | Li j | | L ji U ji T U Tj i U Tj i −V sj L V ri U T r r1 r J i L s s1 s J j L Li j Ujj Li j T Ui j 33/37 o le 245 200 190 150 141 100 50 152 101 76 44 34 62 46 142 153 95 61 56 0 27/09/10 sk y( 1) sk Ch y( 2) o le sk Ch y( 4) ole sk y( 8) LU (1 ) LU (2 ) LU (4 ) LU (8 ) CG (1 ) CG (2 ) CG (4 ) CG C + J G (8 ) CG aco + J bi (1 ) CG aco + J bi (2 ) CG aco + J bi (4 ac ) ob i (8 ) 250 o le 350 o le 388 Ch 400 Memory [bytes] Problem: Dimension: Elements: Nodes: Variables: nnz(A): nnz(L): Solver tolerance Ch Ch sk y( 1) o le sk y( Ch 2) o le sk y( Ch 4) o le sk y( 8) LU (1 ) LU (2 ) LU (4 ) LU (8 ) CG (1 ) CG (2 ) CG (4 ) CG CG +J (8 ) ac CG ob i (1 +J ) ac CG ob i (2 +J ) ac CG ob i +J (4 ) ac ob i (8 ) Ch Time [m] Un ejemplo Un ejemplo Edificio 3 264,250 326,228 978,684 69,255,522 787,567,656 1e-5 30,000,000,000 25,000,000,000 300 20,000,000,000 15,000,000,000 10,000,000,000 5,000,000,000 0 34/37 ¿Preguntas? ¿Preguntas? 27/09/10 35/37 Para saber más... Para saber más... Bibliografía: [Gall90] [Geor81] [Geor89] [Golu96] [Heat91] [Kary99] [Lipt77] [Quar00] [Yann81] K. A. Gallivan, M. T. Heath, E. Ng, J. M. Ortega, B. W. Peyton, R. J. Plemmons, C. H. Romine, A. H. Sameh, R. G. Voigt, Parallel Algorithms for Matrix Computations, SIAM, 1990. A. George, J. W. H. Liu. Computer solution of large sparse positive definite systems. PrenticeHall, 1981. A. George, J. W. H. Liu. The evolution of the minimum degree ordering algorithm. SIAM Review Vol 31-1, pp 1-19, 1989. G. H. Golub, C. F. Van Loan. Matrix Computations. Third edidion. The Johns Hopkins University Press, 1996. M T. Heath, E. Ng, B. W. Peyton. Parallel Algorithms for Sparse Linear Systems. SIAM Review, Vol. 33, No. 3, pp. 420-460, 1991. G. Karypis, V. Kumar. A Fast and Highly Quality Multilevel Scheme for Partitioning Irregular Graphs. SIAM Journal on Scientific Computing, Vol. 20-1, pp. 359-392, 1999. R. J. Lipton, D. J. Rose, R. E. Tarjan. Generalized Nested Dissection, Computer Science Department, Stanford University, 1997. A. Quarteroni, R. Sacco, F. Saleri. Numerical Mathematics. Springer, 2000. M. Yannakakis. Computing the minimum fill-in is NP-complete. SIAM Journal on Algebraic Discrete Methods, Volume 2, Issue 1, pp 77-79, March, 1981. 27/09/10 36/37 Para saber más... Próximamente: Solvers con matrices ralas Parte III: Gradiente conjugado + precondicionadores Cholesky y LU incompletos Solvers con matrices ralas Parte IV: Gradiente conjugado + precondicionadores Sparse Approximate Inverse 27/09/10 37/37