10.05.2013 Views

pdf 224167 bytes - Cimat

pdf 224167 bytes - Cimat

pdf 224167 bytes - Cimat

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!