pdf 224167 bytes - Cimat
pdf 224167 bytes - Cimat
pdf 224167 bytes - Cimat
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Precondicionado con inversas aproximadas<br />
MSc. Miguel Vargas Félix<br />
miguelvargas@cimat.mx<br />
http://www.cimat.mx/~miguelvargas<br />
11/10/11 1/27
Contenido<br />
Número de condición<br />
Precondicionadores<br />
Algunos precondicionadores para sistemas ralos<br />
Gradiente conjugado precondicionado<br />
Precondicionadores con inversa aproximada rala<br />
Inversa aproximada rala con método del residuo minimo<br />
Gradiente biconjugado precondicionado con SAI<br />
Algunos resultados numéricos<br />
Inversa aproximada rala factorizada<br />
Algunos resultados numéricos<br />
Otro precondicionador<br />
¿Preguntas?<br />
Bibliografía<br />
Contenido<br />
11/10/11 2/27
Número de condición<br />
Número de condición<br />
El número de condición de una matriz A∈ℝ n×n no singular, para una norma ∥⋅∥ está dado por<br />
Para la norma ∥⋅∥ 2,<br />
A=∥A∥⋅∥A −1 ∥.<br />
2 A=∥A∥ 2⋅∥A −1 ∥ 2= max A<br />
min A ,<br />
donde son los valores singulares de la matriz.<br />
Para una matriz A simétrica positiva definida,<br />
donde son los eigenvalores de A.<br />
A= max A<br />
min A ,<br />
Un sistema de ecuaciones A x=b es considerado bien condicionado si un pequeño cambio en<br />
los valores de A o un pequeño cambio en b resulta en un pequeño cambio en x.<br />
Un sistema de ecuaciones A x=b es considerado mal condicionado si un pequeño cambio en los<br />
valores de A o un pequeño cambio en b resulta en un cambio grande en x.<br />
Así, matrices con un número de condición cercano a 1 se dicen que están bien condicionadas.<br />
11/10/11 3/27
Precondicionadores<br />
Precondicionadores<br />
Un precondicionador de una matriz A es otra matriz M tal que M A tiene un número de<br />
condición menor<br />
M A A.<br />
En los métodos iterativos estacionarios (ej. Gauss-Seidel) y los más generales métodos del<br />
subespacio de Krylov (ej. gradiente conjugado), el precondicionador, al reducir el número de<br />
condición, buscar reducir el número de pasos necesarios para converger a la solución de un<br />
sistema lineal de ecuaciones.<br />
En vez de resolver el problema<br />
se resuelve el problema<br />
A x−b=0,<br />
M A x−b =0.<br />
En otras palabras, un precondicionador ideal sería una matriz M tal que<br />
M A≈1,<br />
es decir M ≈ A −1 .<br />
11/10/11 4/27
Algunos precondicionadores para sistemas ralos<br />
• Jacobi<br />
M −1 =diag A.<br />
Para este precondicionador se toma la solo diagonal principal de A.<br />
Algunos precondicionadores para sistemas ralos<br />
• Factorización Cholesky incompleta. A=L L T sería la factoización completa, tomemos<br />
M −1 T<br />
=G l Gl ,<br />
con<br />
Para formar G l<br />
con<br />
G i j = 1<br />
G j j<br />
G l≈ L.<br />
G l i j ≠0 si A i j≠0,<br />
Ai j−∑ j−1<br />
l=1<br />
= G j j A j j−∑ j−1<br />
l=1<br />
l Gi l G j , para i j<br />
2<br />
G . j l<br />
11/10/11 5/27
Gradiente conjugado precondicionado<br />
x 0, coordenada inicial<br />
r 0 b− A x 0, gradiente inicial<br />
p 0 r 0, descenso inicial<br />
k 0<br />
mientras ∥r k∥<br />
αk ← r T<br />
k r k<br />
T<br />
p k A pk<br />
xk1 x k k pk r k1 rk− k A pk k r T<br />
k1 rk1 T<br />
r k r k<br />
p k1 r k1 k p k<br />
k k1<br />
Gradiente conjugado precondicionado<br />
x 0, coordenada inicial<br />
r 0 b− A x 0, gradiente inicial<br />
p 0 M r 0, descenso inicial<br />
k 0<br />
mientras ∥r k∥<br />
αk ← r T<br />
k M r k<br />
T<br />
p k A pk<br />
x k1 x k k p k<br />
r k1 r k− k A p k<br />
k r T<br />
k1 M r k1<br />
T<br />
r k M r k<br />
pk1 M r k1 k pk k k1<br />
Con los precondicionadores de factorización incompleta no definimos M, sino M −1 , entonces<br />
hacemos q k M r k, lo que quiere decir que en cada paso hay que resolver un sistema de<br />
ecuaciones M −1 q k r k.<br />
11/10/11 6/27
Precondicionadores con inversa aproximada rala<br />
Precondicionadores con inversa aproximada rala<br />
Vamos a describir algorimos que permitan generar una matriz M se sea una aproximación a la<br />
inversa de A, que además tenga la propiedad de ser rala.<br />
El problema es que a partir de una matriz rala su inversa no es necesariamente rala.<br />
Ejemplo de las estructuras de una matriz rala y de su inversa<br />
11/10/11 7/27
Precondicionadores con inversa aproximada rala<br />
Una forma de buscar la inversa aproximada se basa en minimizar la norma de Frobenius del<br />
residuo I −A M<br />
La norma de Frobenius se define como<br />
∥A∥ F= ∑ i=1<br />
2<br />
F M =∥I − A M∥F m<br />
n<br />
∑∣ai j∣<br />
j=1<br />
2 =tr A T A.<br />
Podemos descomponer (1) en sumas desacolpladas de las 2-normas de las columnas individuales<br />
del residuo I −A M, es decir<br />
2<br />
F M =∥I − A M∥F =∑<br />
j=1<br />
n<br />
2<br />
∥e j− Am j∥2, donde e j es la j-ésima columna de I y m j es la j-ésima columna de M .<br />
Podemos así paralelizar la construcción del precondicionador.<br />
El problema ahora es: ¿como elegir las entradas de M que son significativas para construir la<br />
inversa aproximada?<br />
(1)<br />
11/10/11 8/27
Inversa aproximada rala con método del residuo minimo<br />
Inversa aproximada rala con método del residuo minimo<br />
E. Chow, Y. Saad. Approximate Inverse Preconditioners via Sparse-Sparse Iterations. SIAM<br />
Journal on Scientific Computing. Vol. 19-3, pp. 995-1023. 1998<br />
El algoritmo para construir M es el siguiente:<br />
Sea M =M 0<br />
para j 1n<br />
Sea m j M e j<br />
para i 1s<br />
r j e j− Am j<br />
j <br />
T<br />
r j A r j<br />
Ar j T A r j<br />
m j m j j r j<br />
Truncar las entradas menos significativas de m j<br />
fin para<br />
fin para<br />
11/10/11 9/27
Inversa aproximada rala con método del residuo minimo<br />
Es un método iterativo donde s es usualmente pequeño. Si no se utilizan vectores ralos, este<br />
algorimo es de orden O n 2 .<br />
Para inicializar el algoritmo puede se utiliza:<br />
M 0=G,<br />
con<br />
=<br />
G puede ser elegido como G=I o como G= A T .<br />
tr AG <br />
tr AG AG T ,<br />
M 0= I es la elección más económica de calcular. Sin embargo M 0= A T produce una mejor<br />
aproximación inicial en algunos casos.<br />
Vamos ahora a ver como utilizar vectores ralos para reducir la cantidad de operaciones.<br />
Dado un vector ralo b, la notación b indica el número de entradas no cero de b.<br />
11/10/11 10/27
Inversa aproximada rala con método del residuo minimo<br />
Una técnica para elegir las entradas m j más significativas es truncar entradas en la dirección de<br />
descenso.<br />
Problemas:<br />
Sea M =M 0<br />
para j 1n<br />
Sea m j M e j un vector ralo<br />
Sea d j un vector ralo con la misma estructura que m j<br />
para i 1s<br />
r j e j− Am j<br />
d j r j se toman solo las entradas de r j con estructura en d j<br />
j <br />
T<br />
r j Ad j<br />
Ad j T<br />
Ad j<br />
m j m j j d j<br />
si m jlfil<br />
agregar max∣r j k∣ tal que k no exista en la estructura de m j<br />
fin para<br />
fin para Approximate inverse via MR iteration with dropping in the search direction<br />
11/10/11 11/27
• La estructura final de M no será necesariamente simétrica.<br />
• No se garantiza que M no sea singular si s no es grande.<br />
Inversa aproximada rala con método del residuo minimo<br />
• No funciona como precondicionador para el gradiente conjugado precondicionado.<br />
• Funciona para el gradiente biconjugado precondicionado.<br />
11/10/11 12/27
Gradiente biconjugado precondicionado con SAI<br />
Gradiente biconjugado precondicionado con SAI<br />
El método de gradiente biconjugado se basa en el método de gradiente conjugado y al igual que<br />
éste sirve para resolver systemas de ecuaciones lineales<br />
A x=b,<br />
con la diferencia que A∈ℝ n×n no tiene que ser simétrica.<br />
Este método requiere calcular un pseudo-gradiente g k y una pseudo-dirección de descenso p k.<br />
El método se construye de tal forma que que los pseudo-gradientes g k sean ortogonales a los<br />
gradientes g k y que las pseudo-direcciónes de descenso p k sean A-ortogonales al las direcciones<br />
de descenso p k [Meie94 pp6-7].<br />
Si la matriz A es simétrica, entonces el método es equivalente al gradiente conjugado.<br />
No garantiza convergencia en n pasos como lo hace el gradiente conjugado.<br />
11/10/11 13/27
Gradiente biconjugado precondicionado con SAI<br />
Hay que hacer cuatro multiplicaciones matrix-vector: p k A, A p k, r k M, M r k. Para hacerlo<br />
eficiente, hay que almacenar A y M dos veces cada una usando CSR y CSC.<br />
x0, coordenada inicial<br />
r0 b− A x0, gradiente inicial<br />
T<br />
r 0 r 0,<br />
pseudo-gradiente inicial<br />
p0 M r0, dirección de descenso inicial<br />
p 0 r 0 M, pseudo-dirección de descenso<br />
, tolerancia<br />
k 0<br />
mientras ∥rk∥ α k ← ̃r k M r k<br />
̃p k A p k<br />
x k1 x k k p k<br />
r k1 r k− A p k<br />
r k1 r k− p k A<br />
k r k1 M r k1<br />
r k M r k<br />
p k1 M r k1 k1 p k<br />
p k1 r k1 M k1 p k<br />
k k1<br />
11/10/11 14/27
Algunos resultados numéricos<br />
Ecuación de calor 2D, elementos triangulares, 62,216 elementos, 31,615 variables.<br />
Algunos resultados numéricos<br />
Solver 1 Thread 2 Thread 4 Thread 6 Thread 8 Thread Steps Memory<br />
BG 1.40 1.02 0.76 0.68 0.69 721 14,879,486<br />
BG + Jacobi 1.68 1.09 0.81 0.73 0.72 682 15,132,430<br />
BG + ILU(0) 1.31 1.25 1.21 1.20 1.22 190 23,313,662<br />
BG + SAI(1) 26.93 14.05 7.40 5.36 4.55 465 21,323,518<br />
25<br />
20<br />
15<br />
10<br />
5<br />
0<br />
1 Thread 2 Thread 4 Thread 6 Thread 8 Thread<br />
BG<br />
BG + SAI(1)<br />
BG + ILU(0)<br />
BG + Jacobi<br />
11/10/11 15/27
Inversa aproximada rala factorizada<br />
Inversa aproximada rala factorizada<br />
Los precondicionadores para el gradiente conjugado requiere que al igual que la matriz A, el<br />
precondicionador M sea simétrico positivo definido.<br />
El siguiente método genera un precondicionador que cumple que M sea positivo definido y<br />
además es posible calcularlo en paralelo.<br />
Sea A que una matriz binaria construida a partir de A<br />
j={ A i 1 si i= j o ∣ D −1/2 A D −1/2 i j∣umbral<br />
,<br />
0 otro caso<br />
el umbral es un valor no negativo y la matriz diagonal D es<br />
={ Dii ∣Aii∣ si ∣Aii∣>0 1 otro caso .<br />
La matriz diagonal D funciona como un escalamiento.<br />
Notese que la estructura de A es más rala que la estructura de A.<br />
11/10/11 16/27
Buscamos construir un precondicionador<br />
M =G T G,<br />
donde G es una matriz triangular inferior tal que<br />
G≈ L −1 ,<br />
donde L es el factor Cholesky de A.<br />
Inversa aproximada rala factorizada<br />
Sea S L la estructura de G, ésta se construirá de tal forma que tenga la misma estructura que la<br />
parte triangular inferior de A.<br />
2<br />
Buscamos entonces minimizar ∥I−G L∥F, lo que puede lograrse sin conocer el factor L,<br />
resolviendo las ecuaciones<br />
(G L L T ) i j=( L T ) i j, (i , j )∈S L,<br />
donde S L contiene la estructura de G, la ecuación anterior es equivalente a<br />
( ̃G A) i j=( I ) i j, i , j ∈S L,<br />
con ̃G =D −1 G, y D es la diagonal de L, dado que {L T } i j para (i , j )∈S L es una matriz diagonal.<br />
Las entradas de ̃G se calculan por renglones (tiene la misma estructura que G). Éstas se pueden<br />
calcular en paralelo.<br />
11/10/11 17/27
El algoritmo para calcular las entradas de ̃G es el siguiente:<br />
Sea S L la estructura de G<br />
para i ← 1…n<br />
para ∀ (i , j )∈S L<br />
resolver ( A ̃G i) j =δ i j<br />
fin_para<br />
fin_para<br />
Inversa aproximada rala factorizada<br />
Resolver ( A ̃G i) j =δ i j significa que, si m=η( ̃G i) el número de entradas no cero del renglón i de<br />
̃G, entonces hay que resolver un sistema SPD local pequeño de tamaño m×m.<br />
( A ̃G i) j =δ i j, (i , j)∈S L,<br />
Ejemplo. Si la estructura del renglón 9 de ̃G contiene 4, 7, 8, 9, entonces, para calcular los<br />
valores de ̃G 9 hay que resolver el sistema:<br />
(a 4 4 a4 7 a4 8 a4 9 ̃g<br />
99)( a7 4 a7 7 a7 8 a79 a8 4 a8 7 a8 8 a89 a9 4 a9 7 a9 8 a<br />
9 4<br />
̃g 9 7 0<br />
̃g 0 98<br />
̃g 99)=(0<br />
1).<br />
11/10/11 18/27
Finalmente, para obtener G<br />
G = ̃G D.<br />
Inversa aproximada rala factorizada<br />
Como es un sistema simétrico positivo definido, podemos resolver estos sistemas utilizando<br />
factorización Cholesky.<br />
Es posible eficientar la solución de estos sistemas haciendo casos particulares para m=1, m=2,<br />
hasta m=3, y el caso general para m≥4.<br />
Este precondicionador M =G T G se puede aplicar entonces al gradiente conjugado<br />
precondicionado:<br />
• Este precondicionador es simétrico positivo definido si no hay ceros en la diagonal de G l.<br />
• El algoritmo para construir el precondicionador es paralelizable.<br />
• El algoritmo es estable si A es simétrica positiva definida.<br />
E. Chow. Parallel implementation and practical use of sparse approximate inverse<br />
preconditioners with a priori sparsity patterns. International Journal of High Performance<br />
Computing, Vol 15. pp 56-74, 2001.<br />
11/10/11 19/27
El algoritmo es el siguiente<br />
x 0, coordenada inicial<br />
r 0 b− A x 0, gradiente inicial<br />
p 0 M r 0, descenso inicial<br />
k 0<br />
mientras ∥r k∥<br />
αk ← r T<br />
k M r k<br />
T<br />
p k A pk<br />
x k1 x k k p k<br />
r k1 r k− k A p k<br />
k r T<br />
k1 M r k1<br />
T<br />
r k M r k<br />
pk1 M r k1 k pk k k1<br />
M r k se calcula con dos multiplicaciones matriz-triangular*vector,<br />
T<br />
M r k =G l<br />
(G l r k ).<br />
No hay que resolver un sistema de ecuaciones en cada paso.<br />
Inversa aproximada rala factorizada<br />
11/10/11 20/27
Inversa aproximada rala factorizada<br />
Es posible aumentar la cantidad de entradas del precondicionador y mejorar el número del<br />
condición del problema. Con el costo de aumentar la cantidad de tiempo utilizada en construir el<br />
precondicionador.<br />
El método se conoce como potencias de matrices ralas.<br />
Se puede construir S L es a través de las estructuras formadas por<br />
A, A 2 , ..., A l ,<br />
Las potencias de A pueden ser calculadas combinando los renglones de A. Denotemos el<br />
k-ésimo renglón de A l por A<br />
l<br />
k ,: , así<br />
A<br />
l<br />
k ,: = A<br />
l−1 A. k ,:<br />
La estructura S L será entonces la parte triangular inferior de A l .<br />
11/10/11 21/27
Algunos resultados numéricos<br />
Algunos resultados numéricos<br />
Ecuación de calor en 2D, 1’813,582 elementos, con 1,005,362 variables, A=6' 355,782.<br />
Solver 1 thread [s] 2 threads [s] 4 threads [s] 6 threads [s] 8 threads [s] Steps<br />
Cholesky 108.4 85.1 74.4 71.0 69.276<br />
CG 120.8 82.2 81.8 84.3 85.769 3,718<br />
CG-Jabobi 132.0 92.9 84.6 87.9 89.251 3,504<br />
CG-ICholesky 81.1 76.2 74.2 75.9 77.112 978<br />
CG-FSAI 116.9 74.2 66.4 57.3 55.707 1,288<br />
Time [s]<br />
140.000<br />
120.000<br />
100.000<br />
80.000<br />
60.000<br />
40.000<br />
20.000<br />
0.000<br />
Cholesky CG CG-Jabobi CG-ICholesky CG-FSAI<br />
1 thread 2 threads 4 threads 6 threads 8 threads<br />
11/10/11 22/27
Algunos resultados numéricos<br />
Deformación de sólidos en 2D, 501,264 elementos, con 909,540 variables, A=18' 062,500.<br />
Solver 1 thread [s] 2 threads [s] 4 threads [s] 8 threads [s] Steps Memory<br />
Cholesky 227.2 131.4 81.9 65.4 3,051,144,550<br />
CG 457.0 305.8 257.5 260.4 9,251 317,929,450<br />
CG-Jacobi 369.0 244.7 212.4 213.7 6,895 325,972,366<br />
CG-IChol 153.9 121.9 112.8 117.6 1,384 586,380,322<br />
CG-FSAI 319.8 186.5 155.7 152.1 3,953 430,291,930<br />
Time [s]<br />
450<br />
400<br />
350<br />
300<br />
250<br />
200<br />
150<br />
100<br />
50<br />
0<br />
1 thread<br />
2 threads<br />
4 threads<br />
8 threads<br />
Cholesky CG CG-Jacobi CG-IChol CG-FSAI<br />
11/10/11 23/27
Algunos resultados numéricos<br />
Deformación de sólidos en 3D, 264,250 elementos, con 978,684 variables, A=69' 255,522.<br />
Solver 1 thread [s] 2 threads [s] 4 threads [s] 6 threads [s] 8 threads [s] Memory<br />
Cholesky 8,562 4,418 2,635 2,055 1,911 19,864,132,056<br />
CG-FSAI 4,410 2,703 1,631 1,484 1,410 1,440,239,572<br />
CG-Jacobi 9,568 5,591 3,444 3,207 3,278 923,360,936<br />
Time [s]<br />
10000<br />
9000<br />
8000<br />
7000<br />
6000<br />
5000<br />
4000<br />
3000<br />
2000<br />
1000<br />
0<br />
1 2 4 6 8<br />
Cholesky CG-FSAI CG-Jacobi<br />
Memory [<strong>bytes</strong>]<br />
20,000,000,000<br />
18,000,000,000<br />
16,000,000,000<br />
14,000,000,000<br />
12,000,000,000<br />
10,000,000,000<br />
8,000,000,000<br />
6,000,000,000<br />
4,000,000,000<br />
2,000,000,000<br />
0<br />
Cholesky CG-FSAI CG-Jacobi<br />
11/10/11 24/27
Otro precondicionador<br />
Otro precondicionador<br />
M. J. Grote, T. Huckle. Parallel preconditioning with sparse approximate inverses. SIAM Journal<br />
of Scientific Computing, Vol. 18-3, pp. 838–853, 1997.<br />
También parte de minimizar por submatrices de A<br />
factorizando la matriz A<br />
donde R es una matriz triangular superior.<br />
Sea c=Q T e j, la solución de (2) es<br />
min∥e<br />
j−<br />
m j<br />
A m j∥2, (2)<br />
A=Q R<br />
0 ,<br />
m j =R −1 c.<br />
11/10/11 25/27
¿Preguntas?<br />
¿Preguntas?<br />
11/10/11 26/27
Bibliografía<br />
[Saad03] Y. Saad. Iterative Methods for Sparse Linear Systems. SIAM, 2003.<br />
Bibliografía<br />
[Benz02] M. Benzi. Preconditioning Techniques for Large Linear Systems: A Survey. Journal of<br />
Computational Physics 182, pp418–477. Elsevier Science, 2002.<br />
[Chow98] E. Chow, Y. Saad. Approximate Inverse Preconditioners via Sparse-Sparse Iterations.<br />
SIAM Journal on Scientific Computing. Vol. 19-3, pp. 995-1023. 1998<br />
[Chow01] E. Chow. Parallel implementation and practical use of sparse approximate inverse<br />
preconditioners with a priori sparsity patterns. International Journal of High Performance<br />
Computing, Vol 15. pp 56-74, 2001.<br />
11/10/11 27/27