Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Valencia, España
Noviembre 2005
Índice general
1. Introducción 6
1.1. Definición del Problema Inverso de
Valores Singulares . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1.1. Los Problemas Inversos de Valores Propios . . . . . . . . 8
1.1.2. Los Problemas Inversos de Valores Singulares . . . . . . . 10
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3. Estado del Arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4. Planteamiento del Problema . . . . . . . . . . . . . . . . . . . . . 13
1.5. Resolución y Casos de Prueba . . . . . . . . . . . . . . . . . . . . 15
1.6. Herramientas Hardware y Software de Entornos Paralelos . . . . 17
1.7. Evaluación de Algoritmos Paralelos . . . . . . . . . . . . . . . . . 21
1.8. Estructura del trabajo . . . . . . . . . . . . . . . . . . . . . . . . 23
1
3.3. Análisis y Evaluación de los Algoritmos Secuenciales del PIAVS . 72
3.3.1. Requerimientos de Memoria . . . . . . . . . . . . . . . . . 72
3.3.2. Convergencia . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.3.3. Exactitud de la solución . . . . . . . . . . . . . . . . . . . 73
3.3.4. Estimación de la complejidad de tiempo y tiempos de eje-
cución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.3.5. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . 75
2
Índice de tablas
3
4.11. Eficiencia Experimental de EP . . . . . . . . . . . . . . . . . . . 104
4.12. Eficiencia Experimental de MIII . . . . . . . . . . . . . . . . . . 104
4
Índice de figuras
5
Capı́tulo 1
Introducción
o bien como
Causa → M odelo → Ef ecto
x → K → ?
6
Bajo este esquema, cada problema directo sugiere dos problemas inversos in-
mediatos: uno denominado problema de causalidad y otro denominado problema
de identificación de modelo.
En el problema de causalidad, dado un modelo K y un efecto y, hay que
encontrar la causa del efecto:
Entrada P roceso Salida
? → K → y
x → ? → y
7
diferenciales, transformada de Laplace, métodos de diferencias fini-
tas y elementos finitos.
8
F representa el campo escalar de los reales < o de los com-
plejos C
σ(A) denota el espectro de la matriz A
Ψ denota cierto conjunto de matrices cuadradas, que entre
otras, pueden ser:
S(n) el conjunto de todas las matrices simétricas
en <n×n
O(n) el conjunto de todas las matrices ortogo-
nales en <n×n
DR (n) el conjunto de todas las matrices diagonales
en <n×n
H(n) el conjunto de todas las matrices Hermi-
tianas en C n×n
DC (n) el conjunto de todas las matrices diagonales
en C n×n
de los cuales son de particular interés en este trabajo el LSIEP o caso simétrico
aditivo [VA01] [VA02] y el MIEP o caso simétrico multiplicativo [FVA02], que
se definen como:
9
MIEP. Caso Multiplicativo Simétrico.
Esta definición también puede particulalizarse para los casos aditivo y mul-
tiplicativo como sigue:
−1 t
M = diag(S1∗ , S2∗ , ..., Sn∗ )QA SA PA ,
10
1.2. Objetivos
En este trabajo se tiene por objetivo general diseñar, implementar y evaluar
algoritmos secuenciales y paralelos para resolver eficientemente el Problema In-
verso de Valores Singulares. Para alcanzar este objetivo, se definen los siguientes
objetivos particulares:
11
En 1996 Chu y Chen formulan dos tipos de problemas de mı́nimos cuadra-
dos equivalentes entre sı́ y proponen una resolución para el PIVP llamada
Lift&Project [CC96], que se basa en el Método de Proyección Alternativa.
Nuevamente Chu, en 1999, introduce un método para la construcción de
matrices con valores singulares y elementos de la diagonal prescritos [Chu99].
Considera que el teorema de Schur-Horn caracteriza la relación entre entradas
diagonales y valores propios de matrices Hermitianas; de la misma forma el
teorema de Sing-Thompson caracteriza la relación entre entradas diagonales y
valores singulares de matrices arbitrarias. Basado en el principio de inducción
construye numéricamente esta matriz con un algoritmo recursivo, siempre que
los valores singulares dados y elementos diagonales satisfagan las condiciones
Sing-Thompson.
Posteriormente, en 2000, Chu propone un algoritmo recursivo que no sólo
considera la construcción de matrices con valores singulares prescritos, sino tam-
bién con valores propios prescritos [Chu00]. Para ello utiliza el teorema Weyl-
Horn que caracteriza la relación entre valores propios y valores singulares de
una matriz arbitraria. Basado en esta caracterización desarrolla un algoritmo
recursivo para construir numéricamente una matriz con los valores propios y
singulares deseados.
En el mismo tenor, se puede encontrar un método planteado por Kosowski
y Smoktunowicz [KA00] en 2000, para construir una matriz triangular inferior
unidad con valores singulares prestablecidos. También Li y Mathias [LM01], en
2001, establecen condiciones para la existencia de una matriz compleja n × n,
con n valores singulares deseados y m ≤ n valores propios deseados y diseñan
un algoritmo para generar tal matriz, pudiendo elegir el orden en que los valores
propios aparezcan en la diagonal.
Un trabajo reciente es el de Politi [Pol03] en 2003, quien considera la resolu-
ción de un problema inverso de valores singulares introduciendo la descomposi-
ción de una matriz cuadrada real A = P SQt , con P , Q matrices cuadradas reales
ortogonales, con respecto a un producto interno particular definido a través
de una matriz real diagonal G, de orden n, que tiene sus elementos iguales
a +1, −1, y S es matriz diagonal real con elementos no negativos llamados
valores G − singulares. Cuando G es la identidad, esta descomposición es la
descomposición en valores singulares usual y S es la matriz diagonal de valores
singulares. Ası́, dado un conjunto S1 , S2 , · · · , Sn de n números reales positivos
se considera el problema de encontrar una matriz real A que los tenga como
valores G − singulares.
En la mayorı́a de los trabajos de investigación mencionados se reportan
experimentos numéricos con problemas de tamaño paqueño, por ejemplo, m = 5
y n = 4 en [Chu92a] y [BMX03], m = n = 50 en [KA00], por lo tanto
es necesario observar el comportamiento de los algoritmos para problemas de
12
mayor tamaño. Por otra parte, no se reportan en la literatura aproximaciones
paralelas a la resolución del Problema Inverso de Valores Singulares, teniendo
en este rubro un campo abierto de investigación.
4 2 1 0 0 0 0 0 0 0 0 1
existen cX = [3, 2, 1]t y cY = [1, 2, 3]t tales que los valores singulares
de A(cX ) y A(cY ) son Σ∗ ={9.5, 1.8, 0.9}. Denotaremos con c∗ a
una de las soluciones del PIAVS, es decir al vector de números reales
c∗ = [c∗1 , c∗2 , ..., c∗n ]t , tal que los valores singulares de A(c∗ ) son Σ∗ .
Tı́picamente el PIAVS se resuelve con aproximaciones calculadas por
métodos iterativos, por lo que se denota con c(0) la aproximación ini-
cial.
13
donde U y V son vectores singulares de T correspondientes a Σ∗ .
Una matriz tipo Toeplitz puede representarse únicamente con su
primera columna y su primer renglón; ası́, la matriz T anterior se
puede expresar en una notación simplificada como:
T̃ = toep([1, t̃1 , ..., t̃(n−2) , t̃(n−1) ], [1, t̃−1 , t̃−2 , ..., t̃−(n−2) , t̃−(n−1) ]) =
= U diag([S̃1∗ , S̃1∗ , ..., S̃n∗ ])V t ,
donde
t̃i = ti /t0 , para i = −(n − 1), ..., 0, ..., n − 1
y
S̃i∗ = Si∗ /t0 , para i = 1, n,
toep([1, 0, ..., t̃(n/2)+1 , ..., t̃(n−1) ], [1, 0, ..., t̃−((n/2)+1) , ..., t̃−(n−1) ])+
t̃1 toep(e2 , 0tn ) + ... + t̃n/2 toep(e(n/2)+1 , 0tn )+
t̃−1 toep(0n , et2 ) + ... + t̃−(n/2) toep(0n , et(n/2)+1 ) =
= U diag(S̃1∗ , S̃2∗ , ..., S̃n∗ )V t
14
expresar al PIEVS como un PIAVS, el PIEVS puede tener más de
una solución y c∗ denota una de ellas.
15
un aporte de este trabajo.
Todos los métodos planteados para la resolución del PIAVS también resuel-
ven el PIEVS.
La experimentación con estos métodos se realiza utilizando los siguientes
casos de prueba:
Chu y Bai (ChuBai)
No estructurados General (Gral)
Diagonal (Diag)
Casos
Toeplitz Triangular Inferior (ToepTril)
Toeplitz General (ToepGral)
Estructurados
Triangular Inferior Unidad (TrilU)
Bidiagonal (Bidiag)
Caso Gral. Con el fin de probar los métodos del PIAVS para casos
aleatorios, se considera que las matrices A0 , A1 , ..., An no tienen es-
tructura ni valores particulares.
16
Caso Diag. Para probar los métodos del PIAVS con tamaños su-
ficientemente grandes, se utilizan las matrices A0 aleatoria sin es-
tructura y Ai = ei eti (i = 1, n); en este caso basta con almacenar
explı́citamente sólo la matriz A0 , disminuyendo sustancialmente el
almacenamiento requerido, pudiendo incrementar los valores de m y
n.
17
El entorno de programación alternativo es el que integra computadoras de
bajo costo unidos en un multicomprocesador. Con este tipo de entornos se logran
resoluciones eficientes sin el problema de las limitaciones fı́sicas ni de los altos
costos de un supercomputador secuencial, al tener la posibilidad de aumentar
el número de procesadores que se integran en el multicomprocesador.
En este trabajo se han utilizado esencialmente multiprocesadores de memoria
distribuida, cuyos componentes son PCs o estaciones de trabajo conectadas
mediante una red de interconexión de paso de mensajes. También se ha podido
contar con el uso de una multicomputadora de memoria compartida distribuida.
El uso de ambos tipos de sistemas ha dado la posibilidad de diseñar algoritmos
donde el control de la distribución y manipulación de los datos es manejada
por el programador, utilizando mecanismos de paso de mensajes; y también se
han podido diseñar algoritmos donde este control se realiza mediante el uso
de directivas, como las ofrecidas por OpenMP. Una breve descripición de los
clusters utilizados se da enseguida.
18
este documento, los algoritmos desarrollados en esta tesis se están
poniendo a punto para la experimentación en este cluster3 .
Para el tipo de hardware utilizado existe software adecuado que explota las
caracterı́sticas de la arquitectura y permite obtener el máximo rendimiento; por
eso se ha empleado, para los programas codificados en lenguaje de programación
Fortran90, las siguientes bibliotecas secuenciales:
19
de 2 renglones y 3 columnas (Pr = 2, Pc = 3, Prc = 6), se espera
que una matriz de tamaño 9 × 9 y un vector de tamaño 9, que se
descomponen en bloques de tamaño 2 × 2, queden distribuidos en
la malla de procesadores como sigue [BCC97]:
Pc
0 1 2
a11 a12 a17 a18 a13 a14 a19 a15 a16
a21 a22 a27 a28 a23 a24 a29 a25 a26
0 a51 a52 a57 a58 a53 a54 a59 a55 a56
a61 a62 a67 a68 a63 a64 a69 a65 a66
Pr a91 a92 a97 a98 a93 a94 a99 a95 a96
ScaLAPACK
↑ ↑
LAPACK PBLAS
↑ % ↑
BLAS BLACS
↑
MPI
20
Incluye: BLAS, LAPACK, PARDISO, biblioteca matemática vecto-
rial y biblioteca estadı́stica vectorial optimizadas para procesadores
Intel [Cor04].
21
donde
T (m, 1)
S(m, Prc ) = ,
T (m, Prc )
idealmente se espera que el Speedup sea igual al número de procesadores em-
pleados [KGGKrp94].
Eficiencia, que mide el porcentaje del tiempo de ejecución que los procesadores
se mantienen útilmente empleados. La Eficiencia se define como:
S(m, Prc )
E(m, Prc ) = ,
Prc
donde la eficiencia ideal es igual a 1 [KGGKrp94].
22
Tiempo de Flop (tf )
Cluster Escalares Vectoriales Matriciales
Kubrick 3e-3 µseg 2e-2 µseg 3e-4 µseg
Kefren 3e-3 µseg 1e-2 µseg 5e-4 µseg
Aldebarán 3e-3 µseg 1e-2 µseg 2e-4 µseg
MareNostrum 1e-5 µseg 1e-3 µseg 1e-4 µseg
23
Capı́tulo 2
Métodos y Algoritmos
Secuenciales para la
Resolución del PIAVS
24
Tabla 2.1: Puntos iniciales del caso ChuBai
Pruebas Chu Pruebas Bai
casos c(0) S (0) c(0) S (0)
A 4.4029e-1 6.8899e0 1.4922e0 1.0619e1
3.9909e-1 5.1196e0 8.2514e-1 9.5193e0
-1.5330e0 3.9921e0 2.0528e0 5.8848e0
-1.3434e0 1.4204e0 1.3341e0 3.3880e0
B 1.9984e0 1.0936e1 2.8790e0 1.5645e1
1.3802e0 6.5910e0 1.7106e0 1.1566e1
-6.5989e-1 4.4004e0 1.5505e0 6.1310e0
-9.7495e-1 8.0045e-1 5.0169e-1 3.9678e0
C 1.0639e0 6.8109e0 2.7143e0 1.2923e1
1.2202e0 5.6892e0 -5.7860e-1 1.0640e1
-4.4669e-2 3.2544e0 2.2674e0 7.1825e0
6.6640e-3 1.3534e0 5.7221e-1 2.7371e0
25
c∗ vector de tamaño n, almacena una de las soluciones del PIAVS.
sean un conjunto de valores dados S ∗ = {S1∗ , S2∗ , ..., Sn∗ }, es decir, tal que la
descomposición en valores singulares de A(c) sea
Qt Q = I n . (2.4)
donde
z = [Q1,1 , Q1,2 , ..., Qn,n , P1,1 , P1,2 , ..., Pm,n , c1 , c2 , ..., cn ]t , (2.6)
siendo que las incógnitas del sistema son: el vector c (n incógnitas) y los ele-
mentos de los vectores singulares P (mn incógnitas 1 ) y Q (n2 incógnitas); por
lo que (2.5) se expresa como
F (Q, P, c) = 0
1 Se consideran sólo los min{m, n} vectores singulares de P porque se manejan min{m, n}
valores singulares;
26
que por (2.2), (2.3) y (2.4), es el conjunto de ecuaciones siguientes
donde J(z (k) ) es la matriz Jacobiana de F (z) evaluada en z (k) . En este caso, la
matriz Jacobiana de F (Q, P, c) se define como
h i J1,1 0 0
∂Fr (z)
J(Q, P, c) = ∂zt = 0 J2,2 0
r=1:mn+n2 +n,t=1:mn+n2 +n
J3,1 J3,2 J3,3
donde J1,1 , J2,2 , J3,1 , J3,2 y J3,3 son bloques de tamaño n(n + 1)/2 × n2 , n(n +
1)/2 × mn, mn × n2 , mn × mn y mn × n, respectivamente, tales que
∂(Qt Q − In )i,j
J1,1 = ; k = 1, n; t = 1, n (2.11)
∂Qk,t i=1:n n+1 ,j=1:n2
2
∂(P t P − Im )i,j
J2,2 = ; k = 1, m; t = 1, n (2.12)
∂Pk,t i=1:n n+1
2 ,j=1,mn
Pn
∂(A0 + l=1 cl Al − P diag(S ∗ )Qt )i,j
J3,1 = ; k = 1, n; t = 1, n
∂Qk,t i=1:mn,j=1:n2
Pn (2.13)
∂(A0 + l=1 cl Al − P diag(S ∗ )Qt )i,j
J3,2 = ; k = 1, m; t = 1, n
∂Pk,t i=1:mn,j=1:mn
Pn (2.14)
∂(A0 + l=1 cl Al − P diag(S ∗ )Qt )i,j
J3,3 = ; k = 1, n (2.15)
∂ck i=1:mn,j=1:n
donde
P
para i = 0, n − 1; j = 1, n; row = 1 + i−1
k=0 (n − k); col = i + (j − 1)n + 1
27
(J1,1 )row,col = 2Qj,i+1
Pi−1
para i = 0, n − 1; j = 1, m; row = 1 + k=0 (n − k); col = i + (j − 1)n + 1
t
(J2,2 )row+1:row+n−i−1,col = Pj,i+2:n
y para i = 1, m; j = 1, n; t = 1, n
28
Tabla 2.3: Dimensiones de F y J del algoritmo FB
m = n dimensiones de F dimensiones de J
4 36 × 1 36 × 36
10 210 × 1 210 × 210
30 1830 × 1 1830 × 1830
50 5050 × 1 5050 × 5050
100 20100 × 1 20100 × 20100
500 500500 × 1 500500 × 500500
1000 2001000 × 1 2001000 × 2001000
29
Tabla 2.5: Resultados y convergencia del caso ChuBai con FB
Pruebas Chu Calculadas Pruebas Bai Calculadas
caso k c(k) S (k) k c(k) S (k)
A 5 -8.8570e-2 5.2995e0 9 1.2541e0 7.6932e0
5.1462e-1 3.3937e0 7.8632e-1 6.4255e0
-1.0132e0 2.2206e0 1.1208e0 3.8780e0
-8.8725e-1 1.0707e0 8.2783e-1 2.2199e0
B 6 2.3693e0 1.3414e1 5 2.6314e0 1.2159e1
1.6524e0 8.0733e0 1.2748e0 8.3927e0
-1.3027e0 5.0761e0 5.7291e-1 3.8461e0
-9.3529e-1 3.8912e-1 -3.5826e-1 2.4688e0
C 4 8.8169e-1 6.9200e0 6 1.6635e0 1.0321e1
1.3168e0 5.1246e0 -1.1349e0 8.4827e0
-2.5081e-1 3.3331e0 2.2105e0 6.1540e0
-1.5865e-1 1.0240e0 6.6457e-1 1.8127e0
Pruebas Chu Esperadas Pruebas Bai Esperadas
casos c∗ S∗ c∗ S∗
A -8.8571e-2 5.2995e0 1.2541e0 7.6932e0
5.1462e-1 3.3937e0 7.8632e-1 6.4255e0
-1.0132e0 2.2206e0 1.1208e0 3.8780e0
-8.8725e-1 1.0707e0 8.2783e-1 2.2199e0
B 2.3693e0 1.34141e0 2.6314e0 1.2159e1
1.6524e0 8.0733e0 1.2748e0 8.3927e0
-1.3027e0 5.0761e0 5.7291e-1 3.8461e0
-9.3529e-1 3.8912e-1 -3.5826e-1 2.4688e0
C 8.8169e-1 6.9200e0 1.8505e0 1.0321e1
1.3168e0 5.1245e0 -1.4848e0 8.4827e0
-2.5081e-1 3.3331e0 2.0673e0 6.1540e0
-1.5865e-1 1.0240e0 -2.8719e-1 1.8127e0
pero no ası́ la solución c∗ , véase la Tabla de errores 2.6 que refleja el hecho de
que el PIAVS puede tener más de una solución.
Los resultados arrojados por el algoritmo para el caso Gral están en la Tabla
2.7. Observando esta tabla, para los casos m = n ≤ 10 el algoritmo converge con
todos los puntos iniciales probados, mientras que para los casos m = n > 10 se
observa alta sensibilidad al punto inicial, éste debe ser más cercano a la solución
que para los casos de menor tamaño; ası́, cuando kF (c(0) )k2 > 10e4 el algoritmo
empeora las aproximaciones calculadas en 10 iteraciones.
A la vista de los resultados obtenidos, se puede concluir que, cuanto más
grande sea m será necesario dar un c(0) más cercano a c∗ para converger.
30
Algoritmo 1 Fuerza Bruta (FB)
1. Calcular A(0) de acuerdo a (2.1)
2. Calcular descomposición en valores singulares de A(0)
A(0) = P (0) diag(S (0) )Q(0)t
3. Calcular F (0) de acuerdo a (2.7), (2.8) y (2.9)
4. Para k = 0,1,..., Mientras kF (k) k2 > tol
4.1. Calcular J (k) de acuerdo a (2.11) - (2.15)
4.2. Calcular sol (k) resolviendo el sistema J (k) sol(k) = −F (k)
4.2.1. Calcular descomposición lu de J (k)
4.2.2. Resolver los sistemas triangulares
L(k) x(k) = −F (k)
U (k) sol(k) = x(k)
4.3. [c(k+1) , P (k+1) , Q(k+1) ] ← [c(k) , P (k) , Q(k) ] + sol(k)
4.4. Calcular F (k+1) de acuerdo a (2.7), (2.8) y (2.9)
31
Tabla 2.7: Resultados del caso Gral con FB
(0)
ci = c∗i + 1e − 1 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗ k2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e1 2e-3 3 4e-12 1e-16
5 1e2 1e-3 2 5e-7 2e-12
10 4e2 2e-3 3 3e-11 1e-16
15 1e3 2e-3 3 5e-10 1e-16
20 1e3 2e-3 3 4e-10 1e-16
25 3e3 2e-3 3 2e-8 1e-15
30 4e3 2e-3 3 9e-9 5e-16
40 8e3 1e-3 3 1e-9 2e-16
50 1e4 1e-3 3 2e-6 1e-14
(0)
ci = c∗i + 1e0 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗ k2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e2 2e-2 3 3e-6 5e-11
5 1e3 1e-2 3 8e-9 4e-14
10 4e3 2e-2 4 4e-11 8e-17
15 1e4 2e-2 4 1e-6 4e-14
20 1e4 2e-2 5 2e-10 2e-16
25 3e4 2e-2 6 3e-10 1e-16
30 4e4 2e-2 5 5e-10 2e-16
40 8e4 1e-2 4 5e-8 2e-16
50 1e5 1e-2 10 1e10 8e1
(0)
ci = c∗i + 1e1 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗k 2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e3 2e-1 4 2e-10 6e-15
5 1e4 1e-1 5 9e-12 8e-17
10 4e4 2e-1 6 2e-8 1e-14
15 1e5 2e-1 10 4e7 2e0
20 1e5 2e-1 10 1e7 7e-1
25 3e5 2e-1 10 9e8 1e1
30 4e5 2e-1 10 9e9 3e1
40 8e5 1e-1 10 5e8 5e0
50 1e6 1e-1 10 1e11 1e1
32
2.2. Método I (MI)
Friedland, Nocedal y Overton presentan en [FNO87] un método llamado
Method I (y habitualmente referenciado ası́ por otros autores) que resuelve el
caso aditivo del PIVP. En esta sección se utiliza la idea del Method I para
desarrollar un algoritmo tipo Newton: el Método I (MI), para resolver el PIAVS.
Por definición del PIAVS, si la descomposicion en valores singulares de la matriz
A(c) (ecuacion (2.1)) es A(c) = P (c)diag(S(c))Q(c)t , se requiere encontrar un c
tal que Si∗ −Si (c) = 0, para i = 1, n (Si∗ valor singular dado, Si (c) valor singular
de A(c)). De aquı́ se puede definir la función
para el que se utiliza el método de Newton que, como se vió en 2.1, consiste en
calcular una sucesión de aproximaciones a la solución de (2.16), de modo que si
c(k) es el último elemento de la sucesión, para calcular el siguiente se resuelve
J(c(k) ) c(k+1) − c(k) = −F (c(k) ),
donde
∂Fi ∂Si ∂Si∗
= − , i, j = 1, n.
∂cj ∂cj ∂cj
De la descomposición en valores singulares de A(c), y siendo A ≡ A(c),
S ≡ S(c), P ≡ P (c), Q ≡ Q(c), se tiene que
y también que
P t A = diag(S)Qt y AQ = P diag(S),
33
por lo que
2(p ) ∂(pi )1 + · · · + 2(p ) ∂(pi )m = 0
i 1 ∂cj i m ∂cj
⇒
2(qi )1 ∂(qi )1 + · · · + 2(qi )n ∂(qi )n = 0
∂cj ∂cj
h i
∂(pi )1 · · · ∂(pi )m [(pi )1 · · · (pi )n ]t = 0
∂c ∂cj
⇒ h ∂(q j) ∂(qi )n
i
t
i 1
···
∂cj ∂cj [(qi )1 · · · (qi )n ] = 0
h i t
∂pi pi = 0
∂c
⇒ h j it i, j = 1, n
∂qi q = 0
∂cj i
entonces
∂Si ∂A
= pti qi =
∂cj ∂cj
∂(A0 + c1 A1 + · · · + cn An )
= pti qi =
∂cj
= pti Aj qi ; i, j = 1, n,
por lo que
∂Fi ∂Si ∂Si∗
= − = pti Aj qi − 0, para i, j = 1, n.
∂cj ∂cj ∂cj
34
= [pti A0 qi − Si∗ ]i=1,n +
c1
c2
+ [pti A1 qi , pti A2 qi , · · · , pti An qi ]i=1,n
.. ,
.
cn
entonces
F = pti A0 qi − Si∗ i=1,n + Jc. (2.18)
es decir
J (k) c(k+1) = b(k) (2.19)
donde h i
(k)t (k)
b(k) = S ∗ − pi A0 qi . (2.20)
i=1,n
35
Tabla 2.8: Requerimiento de memoria de algoritmo MI
Estructuras Número de elementos de doble precisión
Ai=0,n 8.0e1 1.1e3 2.8e4 1.3e5 1.0e6 1.3e8 1.0e9
J, AoP, Qt 1.6e1 1.0e2 9.0e2 2.5e3 1.0e4 2.5e5 1.0e6
S ∗ , S, c∗ , c 4.0e0 1.0e1 3.0e1 5.0e1 1.0e2 5.0e2 1.0e3
Total
dobles 1.5e2 1.5e3 3.1e4 1.4e5 1.0e6 1.3e8 1.0e9
Memoria
requerida 1.2 Kb 12 Kb 250 Kb 1.1 Mb 8.3 Mb 1 Gb 8 Gb
m=n 4 10 30 50 100 500 1000
Algoritmo 2 Método I
1. Calcular A(0) de acuerdo a (2.1)
2. Calcular descomposición en valores singulares de A(0)
A(0) = P (0) diag(S (0) )Q(0)t
3. Para k = 0,1,..., Mientras kS (k) − S ∗ k2 > tol
3.1. Calcular J (k) de acuerdo a (2.17)
3.2. Calcular b(k) de acuerdo a (2.20)
3.3. Calcular c(k+1) resolviendo el sistema J (k) c(k+1) = b(k)
3.3.1. Calcular descomposición lu de J (k)
3.3.2. Resolver los sistemas triangulares
L(k) x(k) = b(k)
U (k) c(k+1) = x(k)
3.4. Calcular A(k+1) de acuerdo a (2.1)
3.5. Calcular descomposición en valores singulares de A(k+1)
A(k+1) = P (k+1) diag(S (k+1) )Q(k+1)t
36
Tabla 2.9: Resultados del caso ChuBai con MI
Pruebas Chu Calculadas Pruebas Bai Calculadas
caso k c(k) S (k) k c(k) S (k)
A 4 -8.8571e-2 5.2995e0 7 1.6023e0 7.6932e0
5.1462e-1 3.3937e0 5.2371e-1 6.4255e0
-1.0132e0 2.2206e0 9.8096e0 3.8780e0
-8.8725e-1 1.0707e0 8.2035e-1 2.2199e0
B 6 2.3693e0 1.3414e1 4 2.6314e0 1.2159e1
1.6524e0 8.0733e0 1.2748e0 8.3927e0
-1.3027e0 5.0761e0 5.7291e-1 3.8461e0
-9.3529e-1 3.8912e-1 -3.5826e-1 2.4688e0
C 4 8.8169e-1 6.9200e0 5 1.6635e0 1.0321e1
1.3168e0 5.1245e0 -1.1349e0 8.4827e0
-2.5081e-1 3.3331e0 2.2105e0 6.1540e0
-1.5865e-1 1.0240e0 6.6457e-1 1.8127e0
Pruebas Chu Esperadas Pruebas Bai Esperadas
casos c∗ S∗ c∗ S∗
A -8.8571e-2 5.2995e0 1.2541e0 7.6932e0
5.1462e-1 3.3937e0 7.8632e-1 6.4255e0
-1.0132e0 2.2206e0 1.1208e0 3.8780e0
-8.8725e-1 1.0707e0 8.2783e-1 2.2199e0
B 2.3693e0 1.34141e0 2.6314e0 1.2159e1
1.6524e0 8.0733e0 1.2748e0 8.3927e0
-1.3027e0 5.0761e0 5.7291e-1 3.8461e0
-9.3529e-1 3.8912e-1 -3.5826e-1 2.4688e0
C 8.8169e-1 6.9200e0 1.8505e0 1.0321e1
1.3168e0 5.1245e0 -1.4848e0 8.4827e0
-2.5081e-1 3.3331e0 2.0673e0 6.1540e0
-1.5865e-1 1.0240e0 -2.8719e-1 1.8127e0
37
alejados estén de la solución, más casos van teniendo problemas de convergencia.
38
Tabla 2.11: Resultados y convergencia del caso Gral con MI
(0)
ci = c∗i + 1e − 1 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗ k2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e1 2e-3 2 3e-6 1e-10
5 1e2 1e-3 2 1e-7 2e-12
10 4e2 2e-3 2 2e-7 1e-12
15 1e3 2e-3 3 7e-11 1e-16
20 1e3 2e-3 3 6e-10 6e-16
25 3e3 2e-3 3 1e-9 8e-16
30 4e3 2e-3 3 9e-10 4e-16
40 8e3 1e-3 3 1e-0 2e-16
50 1e4 1e-3 3 1e-6 2e-13
(0)
ci = c∗i + 1e0 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗ k2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e2 2e-2 3 1e-6 5e-11
5 1e3 1e-2 3 1e-9 1e-14
10 4e3 2e-2 3 1e-6 4e-12
15 1e4 2e-2 4 3e-8 8e-14
20 1e4 2e-2 5 2e-10 2e-16
25 3e4 2e-2 5 1e-6 8e-13
30 4e4 2e-2 4 2e-7 1e-13
40 8e4 1e-2 4 5e-10 1e-16
50 1e5 1e-2 10 2e6 3e-1
(0)
ci = c∗i + 1e1 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗k 2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e3 2e-1 5 2e-10 1e-14
5 1e4 1e-1 4 1e-7 2e-12
10 4e4 2e-1 6 2e-11 1e-16
15 1e5 2e-1 10 2e7 3e1
20 1e5 2e-1 10 2e5 5e-1
25 3e5 2e-1 10 2e6 1e0
30 4e5 2e-1 10 2e8 7e1
40 8e5 1e-1 10 1e6 8e-1
50 1e6 1e-1 10 1e7 4e0
39
2.3. Método Elevación-Proyección (EP)
El método Elevación-Proyección para resolver el PIAVS se deriva de manera
similar a como lo hace el método Lift&Project propuesto por Chu [Chu98] y
Chen [CC96] para el caso aditivo del PIVP. El método consiste en definir los
conjuntos Γ(S ∗ ) y Λ(c), donde Γ(S ∗ ) es el conjunto de todas las matrices en
<m×n , m ≥ n, cuyos valores singulares son S ∗ = {S1∗ , S2∗ , ..., Sn∗ }
para calcular la distancia más corta entre A(k) y Γ(S ∗ ), que se alcanza en el
punto [Bro91] [Chu92b]
40
El gradiente de F (k+1) se desarrolla como sigue. De la función (2.23) se
tiene que
= ϕ1 − 2ϕ2 + ϕ3 ,
donde
ϕ1 = tr A(k+1)t A(k+1)
ϕ2 = 2tr A(k+1)t P (k) diag(S ∗ )Q(k)t
ϕ3 = tr Q(k) diag(S ∗ )P (k)t P (k) diag(S ∗ )Q(k)t ;
t
Pn (k+1) Pn (k+1)
= tr A0 + i=1 ci Ai A0 + i=1 ci Ai =
Pn (k+1) t Pn (k+1)
= tr At0 + i=1 ci Ai A0 + i=1 ci Ai =
Pn (k+1) t Pn (k+1) t
= tr(At0 A0 + i=1 ci A0 Ai + i=1 ci Ai A0 +
Pn Pn (k+1) t (k+1)
+ i=1 j=1 ci Ai cj Aj ) =
41
Pn (k+1)
= tr (At0 A0 ) + 2 i=1 ci tr (At0 Ai ) +
Pn Pn (k+1) (k+1)
+ i=1 j=1 ci cj tr (Ati Aj ),
h i
∂ϕ1
∇ϕ1 = (k+1) =
∂cr r=1,n
Pn (k+1)
= [0 + 2tr (At0 Ar ) + i=1 ci tr (Ati Ar ) +
Pn (k+1)
+ i=1 ci tr (Atr Ai )]r=1,n =
h Pn (k+1) i
= 2tr (At0 Ar ) + 2 i=1 ci tr (Ati Ar ) ;
r=1,n
ϕ2 = 2tr A(k+1)t P (k) diag(S ∗ )Q(k)t =
Pn
(k+1) t
= 2tr At0 + i=1 ci Ai P (k) diag(S ∗ )Q(k)t =
P
n (k+1) t (k)
= 2tr At0 P (k) diag(S ∗ )Q(k)t + 2tr i=1 ci Ai P diag(S ∗ )Q(k)t =
Pn (k+1)
= 2tr At0 P (k) diag(S ∗ )Q(k)t + 2 i=1 ci tr Ati P (k) diag(S ∗ )Q(k)t ,
h i
∂ϕ2
∇ϕ2 = (k+1) = 0 + 2tr Atr P (k) diag(S ∗ )Q(k)t r=1,n ;
∂cr r=1,n
h i
∂ϕ3
∇ϕ3 = (k+1) = 0.
∂cr r=1,n
" n
#
X
(k+1) (k+1)
∇F = 2tr Atr A0 +2 ci tr Ati Ar − 2tr Atr P (k) diag(S ∗ )Q(k)t
i=1 r=1,n
=0
entonces
" n
#
X h i
(k+1)
ci tr Ati Ar = tr Atr P (k) diag(S ∗ )Q(k)t − tr Atr A0
r=1,n
i=1 r=1,n
h i
⇒ tr Ati Ar r,i=1,n [c]i=1,n = tr Atr P (k) diag(S ∗ )Q(k)t − A0 ;
r=1,n
(2.27)
42
ahora, si se define
Atr = tr Ati Ar r,i=1,n (2.28)
y
h i h i
btr = tr Atr P (k) diag(S ∗ )Q(k)t − A0 = tr Atr X (k) − A0
r=1,n r=1,n
(2.29)
(2.27) se escribe como
(k)
Atr c(k+1) = btr , (2.30)
Por otra parte, en la (k+1)ésima fase de elevación las matrices que minimizan
kA(k+1) − X (k+1) kF son P (k+1) y Q(k+1) , entonces
por lo que
kA(k+1) − X (k+1) kF ≤ kA(k+1) − X (k) kF .
43
Tabla 2.12: Requerimiento de memoria de EP
44
Tabla 2.13: Resultados del caso ChuBai con EP
Pruebas Chu Calculadas Pruebas Bai Calculadas
caso k c(k) S (k) k c(k) S (k)
A 901 -8.8371e-2 5.2994e0 1080 1.2533e0 7.6933e0
5.1430e-1 3.3936e0 7.8646e-1 6.4254e0
-1.0125e0 2.2208e0 1.1214e0 3.8781e0
-8.8843e-1 1.0710e0 8.2787e-1 2.2201e0
B 4339 2.3670e0 1.3414e1 202 2.6313e0 1.2159e1
1.6615e0 8.0737e0 1.2748e0 8.3927e0
-1.2933e0 5.0769e0 5.7296e-1 3.8462e0
-9.2641e-1 3.8932e-1 -3.5816e-1 2.4688e0
C 115 8.8174e-1 6.9200e0 1947 1.6635e0 1.0321e1
1.3168e0 5.1246e0 -1.1331e0 8.4828e0
-2.5084e-1 3.3331e0 2.2105e0 6.1541e0
-1.5863e-1 1.0239e0 6.6644e-1 1.8131e0
Pruebas Chu Esperadas Pruebas Bai Esperadas
casos c∗ S∗ c∗ S∗
A -8.8571e-2 5.2995e0 1.2541e0 7.6932e0
5.1462e-1 3.3937e0 7.8632e-1 6.4255e0
-1.0132e0 2.2206e0 1.1208e0 3.8780e0
-8.8725e-1 1.0707e0 8.2783e-1 2.2199e0
B 2.3693e0 1.34141e0 2.6314e0 1.2159e1
1.6524e0 8.0733e0 1.2748e0 8.3927e0
-1.3027e0 5.0761e0 5.7291e-1 3.8461e0
-9.3529e-1 3.8912e-1 -3.5826e-1 2.4688e0
C 8.8169e-1 6.9200e0 1.8505e0 1.0321e1
1.3168e0 5.1245e0 -1.4848e0 8.4827e0
-2.5081e-1 3.3331e0 2.0673e0 6.1540e0
-1.5865e-1 1.0240e0 -2.8719e-1 1.8127e0
45
Algoritmo 3 Elevación-Proyección
1. Calcular Atr de acuerdo a (2.28)
2. Calcular inversa de Atr
3. parar ← F ALSO
4. Para k = 0,1,..., Mientras N O parar
4.1. Calcular A(k) de acuerdo a (2.1)
4.2. Calcular descomposición en valores singulares de A(k)
A(k) = P (k) diag(S (k) )Q(k)t
4.3. X ← P (k) diag(S ∗ )Q(k)t
(k)
(k)
4.4. Calcular btr de acuerdo a (2.29)
(k)
4.5. Calcular c(k+1) resolviendo el sistema Atr c(k+1) = btr
c(k+1) ← inversa(Atr ) ∗ btr
4.6. error ← kc(k+1) − c(k) k2
4.7. Si error < tol entonces parar ← V ERDADERO
46
Tabla 2.15: Resultados del caso Gral con EP
(0)
ci = c∗i + 1e − 1 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗ k2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e1 2e-3 365 3e-3 1e-7
5 1e2 1e-3 206 3e-3 4e-8
10 4e2 2e-3 561 1e-2 6e-8
15 1e3 2e-3 3398 8e-2 1e-7
20 1e3 2e-3 2629 1e-1 1e-7
25 3e3 2e-3 1998 2e-1 1e-7
30 4e3 2e-3 4048 2e-1 1e-7
40 8e3 1e-3 6304 2e-1 6e-8
50 1e4 1e-3 5303 4e-1 6e-8
(0)
ci = c∗i + 1e0 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗ k2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e2 2e-2 541 3e-3 1e-7
5 1e3 1e-2 298 3e-3 5e-8
10 4e3 2e-2 829 9e-2 4e-7
15 1e4 2e-2 9107 9e-2 2e-7
20 1e4 2e-2 10944 1e-1 1e-7
25 3e4 2e-2 44409 4e-1 2e-7
30 4e4 2e-2 17584 9e-1 4e-7
40 8e4 1e-2 20959 5e-1 1e-7
50 1e5 1e-2 17542 7e-1 1e-7
(0)
ci = c∗i + 1e1 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗k 2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e3 2e-1 661 3e-3 1e-7
5 1e4 1e-1 433 4e-3 6e-8
10 4e4 2e-1 44240 1e-1 5e-7
15 1e5 2e-1 13965 9e-2 2e-7
20 1e5 2e-1 36697 9e1 9e-5
25 3e5 2e-1 86799 7e-1 5e-7
30 4e5 2e-1 674557 2e0 1e-6
40 8e5 1e-1 51290 6e-1 1e-7
50 1e6 1e-1 126822 1e2 1e-5
47
Tabla 2.16: Convergencia de EP para el caso Gral
Errores kc(k) − c(k−1) k2
(0) (0) (0)
m=n ci = c∗i + 1e − 1 ci = c∗i + 1e0 ci = c∗i + 1e1
4 4e-6 4e-6 4e-6
5 4e-6 4e-6 4e-6
10 4e-6 4e-6 5e-6
15 5e-6 5e-6 5e-6
20 5e-6 5e-6 5e-6
25 5e-6 5e-6 5e-6
30 5e-6 5e-6 5e-6
40 5e-6 5e-6 5e-6
50 5e-6 5e-6 5e-6
48
2.4. Método III (MIII)
En [Chu92a], Chu presenta un método para resolver el PIAVS, basado en
el Method III que Friedland Nocedal y Overton dan en [FNO87] para resolver
el caso aditivo del PIVP, y que en esta sección se automatiza en el algoritmo
llamado Método III (MIII).
La idea de MIII, al igual que EP, es encontrar la intersección entre los con-
juntos Γ(S ∗ ) y Λ(c), definidos en (2.21) y (2.22), respectivamente, con el fin
de encontrar el c tal que los valores singulares de A(c) de la ecuación (2.1)
sean S ∗ ; pero, a diferencia de EP, que aplica técnicas de mı́nimos cuadrados
para calcular tal intersección, MIII lo hace a través de un método iterativo tipo
Newton. Se denota con k a la k-ésima iteración del método y se definen dos
problemas:
Para resolver el primer problema, como se tiene X (k) ∈ Γ(S ∗ ) dada, entonces
existen matrices P (k) y Q(k) tales que
o bien
diag(S ∗ ) = P (k)t X (k) Q(k) . (2.33)
Por otra parte, se puede probar que la tangente a Γ(S ∗ ) en X (k) es de la
forma [Chu92a] [BMX03]
que tiene como incógnitas las matrices H (k) , L(k) y el vector c(k+1) , y que por
(2.32) se puede escribir como
P (k)t P (k) diag(S ∗ )Q(k)t + P (k) diag(S ∗ )Q(k)t L(k) −
−H (k) P (k) diag(S ∗ )Q(k)t Q(k) = P (k)t A(c(k+1) )Q(k) ,
2 El PIAVS requiere de P (k+1)t A(c(k+1) )Q(k+1) = diag(S ∗ ). Suponer que P (k+1) y Q(k+1)
(k) (k)
se aproximan con P (k) eH y Q(k) eL (con H (k) y L(k) hemisimétricas) respectivamente.
49
es decir
y si se definen
L̃(k) = Q(k)t L(k) Q(k) ,
y
W (k) = P (k)t A(c(k+1) )Q(k) , (2.36)
3
donde
(k) (k)t (k)
Ji,j = pi Aj qi i = 1, n; j = 1, l
con el que se calcula c(k+1) y por lo tanto A(c(k+1) ) y por lo tanto W (k) .
De los elementos fuera de la diagonal de (2.37) se calculan H̃ (k) y L̃(k)
(k)
(k) (k) Wi,j
H̃i,j = −H̃j,i =− ∗ , i = n + 1, m; j = 1, n. (2.39)
Sj
Entonces
(k) (k)
e−H P (k)t A(c(k+1) )Q(k) eL = diag(S ∗ )
(k) (k)
⇒P (k)t A(c(k+1) )Q(k) = eH diag(S ∗ )e−L
! !
H (k) H (k)2 L(k) L(k)2
⇒P (k)t A(c(k+1) )Q(k) = I+ + + ··· diag(S ∗ ) I− + + ···
1 2 1 2
50
(k) (k)
(k) (k) Si∗ Wj,i + Sj∗ Wi,j
H̃i,j = −H̃j,i = , i = 1, n; j = i + 1, n; (2.40)
Si∗2 − Sj∗2
(k) (k)
(k) (k) Si∗ Wi,j + Sj∗ Wj,i
L̃i,j = −L̃j,i = , i = 1, n; j = i + 1, n. (2.41)
Si∗2 − Sj∗2
Se pueden ahora calcular
y
H (k) = P (k) H̃ (k) P (k)t
con lo que el sistema (2.35) ha quedado resuelto, y con él el primer problema.
Hay que notar que no es necesario calcular los denominadores de (2.40) y (2.41)
en cada iteración, por lo tanto, se puede definir la matriz
deno = Si∗2 − Sj∗2 i,j=1,n;excepto i=j (2.42)
X (k+1) ≈ A(c(k+1) )
4
y como
(k) (k)
A(c(k+1) ) ≈ e−H X (k) eL
4 Se tiene que
(k) (k)
P (k)t A(c(k+1) )Q(k) = eH diag(S ∗ )e−L
(k) (k) (k) (k)
⇒A(c(k+1) ) = P (k) eH diag(S ∗ )e−L Q(k)t ⇒ A(c(k+1) ) = e−H P (k)t diag(S ∗ )Q(k) eL .
También se sabe que
L2
„ «
L
eL = I+ + + ···
1 2
y
H2
„ «
H
e−H = I− + − ···
1 2
entonces
H2 L2
„ « „ «
(k) (k) H L
e−H X (k) eL = I− + − ··· X (k) I+ + + ···
1 2 1 2
por lo que
(k) (k)
e−H X (k) eL ≈ X (k) − H (k) X (k) + X (k) L(k)
que es tangente a Γ(S ∗ ) en X (k) . Como la intersección de la tangente con A(c(k+1) ) es
X (k) − H (k) X (k) + X (k) L(k) = A(c(k+1) ), entonces
(k) (k)
e−H X (k) eL ≈ A(c(k+1) ).
51
entonces
(k) (k)
X (k+1) ≈ e−H X (k) eL . (2.43)
(k) (k)
Como e−H y eL son costosas de calcular, en su lugar se utiliza (de
manera similar al Method III para el PIVP) la transformación de Cayley para
aproximarlas a través de las matrices ortogonales
−1
H (k) H (k)
R(k) = I+ I−
2 2
y
−1
(k) L(k) L(k)
T = I+ I−
2 2
teniendo, en lugar de (2.43), la siguiente expresión
2
t
I − H (k) P (k+1) = I + H (k)t P (k)
2 2
⇒
Q(k+1)t I − L(k) = Q(k)t I + L(k)
2 2
(k)
(k)
H
I+
2 P (k+1) = I − H2 P (k)
⇒ (k)
t (k)t
L
I−
2 Q(k+1) = I + L 2 Q(k) .
Entonces, para calcular P (k+1) y Q(k+1) basta con resolver los sistemas de
ecuaciones
H (k) (k+1) H (k)
I+ P = I− P (k) (2.44)
2 2
L(k) (k+1) L(k)
I+ Q = I− Q(k) (2.45)
2 2
con lo que queda resuelto el segundo problema.
De acuerdo a [Chu92a] y [CBM03] este método es cuadráticamente conver-
gente. A diferencia de los métodos desarrollados en las secciones anteriores, este
método aproxima en cada iteración los vectores singulares P (k+1) y Q(k+1) , en
lugar de calcularlos exactamente.
52
2.4.1. Algoritmo Secuencial del Método III
La cantidad de estructuras de datos que requiere este algoritmo se incremen-
ta por el uso de las matrices hemi-simétricas involucradas, a diferencia de los
algoritmos anteriores, teniendo que definir las siguientes: Ai (i = 0, n), S ∗ , c∗ ,
c, además de:
53
Tabla 2.17: Requerimiento de memoria de MIII
54
Tabla 2.18: Resultados del caso ChuBai con MIII
Pruebas Chu Calculadas Pruebas Bai Calculadas
casos k c(k) S (k) k c(k) S (k)
A 4 -8.8571e-2 5.2995e0 8 1.6308e0 7.6932e0
5.1462e-1 3.3937e0 4.6572e-1 6.4255e0
-1.0132e0 2.2206e0 9.9241e0 3.8780e0
-8.8725e-1 1.0707e0 7.9056e-1 2.2199e0
B 6 2.3693e0 1.3414e1 4 2.6314e0 1.2159e1
1.6524e0 8.0733e0 1.2748e0 8.3927e0
-1.3027e0 5.0761e0 5.7291e-1 3.8461e0
-9.3529e-1 3.8912e-1 -3.5826e-1 2.4688e0
C 4 8.8169e-1 6.9200e0 7 1.6635e0 1.0321e1
1.3168e0 5.1245e0 -1.1349e0 8.4827e0
-2.5081e-1 3.3331e0 2.2105e0 6.1540e0
-1.5865e-1 1.0240e0 6.6457e-1 1.8127e0
Pruebas Chu Esperadas Pruebas Bai Esperadas
casos c∗ S∗ c∗ S∗
A -8.8571e-2 5.2995e0 1.2541e0 7.6932e0
5.1462e-1 3.3937e0 7.8632e-1 6.4255e0
-1.0132e0 2.2206e0 1.1208e0 3.8780e0
-8.8725e-1 1.0707e0 8.2783e-1 2.2199e0
B 2.3693e0 1.34141e0 2.6314e0 1.2159e1
1.6524e0 8.0733e0 1.2748e0 8.3927e0
-1.3027e0 5.0761e0 5.7291e-1 3.8461e0
-9.3529e-1 3.8912e-1 -3.5826e-1 2.4688e0
C 8.8169e-1 6.9200e0 1.8505e0 1.0321e1
1.3168e0 5.1245e0 -1.4848e0 8.4827e0
-2.5081e-1 3.3331e0 2.0673e0 6.1540e0
-1.5865e-1 1.0240e0 -2.8719e-1 1.8127e0
55
2.21 se puede constatar este hecho a través de los errores alcanzados en el criterio
de parada del algoritmo.
Con MIII se concluye este capı́tulo donde se ha presentado el desarrollo
de cuatro algoritmos para la resolución del PIAVS: FB, MI, EP y MIII. Estos
cuatro algoritmos constituyen cuatro formas diferentes de encarar el PIAVS,
presentando caracterı́sticas propias con respecto a convergencia, exactitud y re-
querimientos de memoria. Para observar las dos primeras caracterı́sticas se han
realizado experimentos que indican que FB, MI y MIII, al ser algoritmos tipo
Newton, son sensibles al punto inicial dado, por lo que se consideran algoritmos
de convergencia local, mientras que EP se considera un algoritmo de convergen-
cia global en el sentido 2.31. Con respecto a la exactitud, se ha observado que
MIII alcanza mejores aproximaciones que el resto de los algoritmos, mientras
que EP es el menos exacto.
Por otra parte, los requerimientos de memoria se han estimado haciendo un
recuento de las estructuras de datos que cada algoritmo utiliza, considerando que
éstas almacenan flotantes de doble precisión. De acuerdo a estas estimaciones es
claro que FB es un algoritmo que demanda mucho almacenamiento, en contraste
con MI y EP que requieren relativamente poco almacenamiento.
Falta por analizar la complejidad de tiempo de ejecución que se presenta en
el siguiente capı́tulo para poder hacer una evaluación global de los métodos del
PIAVS.
56
Tabla 2.20: Resultados del caso Gral con MIII
(0)
ci = c∗i + 1e − 1 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗ k2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e1 2e-3 3 1e-11 3e-16
5 1e2 1e-3 2 1e-7 2e-12
10 4e2 2e-3 2 3e-7 1e-12
15 1e3 2e-3 3 9e-11 1e-16
20 1e3 2e-3 3 2e-10 2e-16
25 3e3 2e-3 3 1e-9 7e-16
30 4e3 2e-3 3 5e-10 2e-16
40 8e3 1e-3 3 1e-9 2e-16
50 1e4 1e-3 4 1e-9 3e-16
(0)
ci = c∗i + 1e0 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S ∗ k2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e2 2e-2 3 1e-6 3e-11
5 1e3 1e-2 3 8e-10 1e-14
10 4e3 2e-2 3 1e-6 7e-12
15 1e4 2e-2 4 8e-9 1e-14
20 1e4 2e-2 5 3e-10 3e-16
25 3e4 2e-2 5 7e-7 4e-13
30 4e4 2e-2 4 2e-7 1e-13
40 8e4 1e-2 4 1e-9 4e-16
50 1e5 1e-2 10 8e6 1e0
(0)
ci = c∗i + 1e1 (i = 1, m)
kS (0) −S ∗ k2 kS (k) −S ∗ k2
m=n kS (0) − S∗k 2 kS ∗ k2
k kS (k) − S ∗ k2 kS ∗ k2
4 8e3 2e-1 5 1e-11 3e-16
5 1e4 1e-1 4 2e-7 3e-12
10 4e4 2e-1 6 1e-8 8e-14
15 1e5 2e-1 10 1e+7 3e1
20 1e5 2e-1 10 3e+6 3e0
25 3e5 2e-1 10 7e+6 4e0
30 4e5 2e-1 10 1e+7 4e0
40 8e5 1e-1 10 1e+8 3e1
50 1e6 1e-1 10 4e+7 7e0
57
Tabla 2.21: Convergencia de MIII para el caso Gral
Errores |P (k)t A(k) Q(k) − S ∗ |F
(0) (0) (0)
m=n ci = c∗i + 1e − 1 ci = c∗i + 1e0 ci = c∗i + 1e1
4 6e-12 3e-6 2e-11
5 2e-7 1e-9 2e-7
10 6e-7 3e-6 3e-8
15 1e-10 4e-8 1e7
20 7e-10 2e-10 3e6
25 3e-9 2e-6 7e6
30 8e-10 2e-6 1e7
40 1e-9 1e-9 1e8
50 1e-9 1e7 4e7
58
Capı́tulo 3
Implementación, Análisis y
Evaluación de los
Algoritmos del PIAVS
59
En la última sección (Sección 3.3) se presentan el análisis y la evaluación
antedichos de los algoritmos.
Algoritmo 5 CalculaA
1. A ← A0
2. Para i = 1,n
2.1. A ← daxpy(m ∗ n, ci , Ai )
60
ddot BLAS xt y
dscal BLAS αx
daxpy BLAS αx + y
dgemv BLAS αAx + βy
dgemm BLAS αAB + βC
dgetri LAPACK A−1
Los algoritmos para calcular las matrices y vectores que se han listado arriba
se presentan del Algoritmo 6 al 20, indicando las rutinas BLAS y LAPACK
utilizadas.
En el primero de estos algoritmos, para calcular b, se requiere realizar n pro-
ductos matriz-vector (A0 qi ) y n productos escalares (pi A0 qi ). Esto es equivalente
a realizar un producto matriz-matriz (A0 Q) y n productos escalares (pi (A0 Q)i ),
que es más eficiente de implementar. Este proceder se ve en el Algoritmo 6 y se
repite n veces para calcular las n columnas de J en el Algoritmo 7.
Algoritmo 6 Calculab
1. { aux ← [A0 qi ]i=1,n }
aux ← dgemm(m, n, n, A0 , Q)
2. Para k = 1,n
2.1. bi ← ddot(m, pi , auxi )
3. { b ← b − S ∗ }
b ← daxpy(n, −1, S ∗, b)
4. { b ← sAster − b }
b ← dscal(n, −1, b)
Algoritmo 7 CalculaJ
1. Para k = 1,n
1.1 { aux ← [Ak qi ]i=1,n }
aux ← dgemm(m, n, n, Ak , Q)
1.2. Para i = 1,n
1.2.1. Ji,k ← ddot(m, pi , auxi )
61
Algoritmo 8 CalculaAtr
1. Para i = 1,n
1.1. Para j = 1,i
1.1.1. Atri,j ← 0
1.1.2. Para k = 1,n
1.1.2.1. Atri,j ← Atri,j + ddot(m, (Aj )k , (Ai )k )
Algoritmo 9 Calculabtr
1. { P ← P S ∗ }
Para i = 1,n
1.1. P:,i ← dscal(m, Si∗ , P:,i )
2. aux ← A0
3. aux ← dgemm(m, n, n, P, Qt , −aux)
4. Para i=1,n
4.1. btri ← 0
4.2. Para k = 1,n
4.2.1. btri ← btri + ddot(m, Ai:,k , aux:,k )
Algoritmo 10 CalculaJFB
1. ren ← 1
2. JF B1:n(n+1)/2,1:n2 ← CalculaJ11
3. ren ← n ∗ (n + 1)/2 + 1
4. JF Bn(n+1)/2+1:n(n+1),n2 +1:n2 +mn ← CalculaJ22
5. JF Bn(n+1):n(n+1)+mn,1:n2 ← CalculaJ31
6. col ← n ∗ n + 1
7. JF Bn(n+1):n(n+1)+mn,n2 +1:n2 +mn ← CalculaJ32
8. col ← n ∗ n + m ∗ n + 1
9. JF Bn(n+1):n(n+1)+mn,n2 +mn+1:n2 +mn+n ← CalculaJ33
62
Algoritmo 11 CalculaJ11
1. Para jj = 1,m
1.1. col ← jj
1.2. Para i = 1,m
1.2.1 JF Bren,col ← 2 ∗ Qi,jj
1.2.2. JF Bren+1:ren+n−jj,col ← Qi,jj+1:n
1.2.3. diag(JF Bren+1:ren+n−jj,col+1:col+n−jj ) ← Qi,jj
1.2.4. col ← col + n
1.3. ren ← ren + n − jj + 1
Algoritmo 12 CalculaJ22
1. Para jj = 1,n
1.1. col ← n ∗ n + jj
1.2. Para i = 1,m
1.2.1. JF Bren,col ← 2 ∗ Pi,jj
1.2.2. JF Bren+1:ren+n−jj,col ← Pi,jj+1:n
1.2.3. diag(JF Bren+1:ren+n−jj,col+1:col+n−jj ) ← Pi,jj
1.2.4. col ← col + n
1.3. ren ← ren + n − jj + 1
Algoritmo 13 CalculaJ31
1. Para i = 1,n
1.1. aux1:m,i ← dscal(m, −Si∗ , P1:m,i )
2. salvaren ← ren
3. Para i = 1,m
3.1. col ← 1
3.2. Para jj = 1,n
3.2.1. JF Bren,col:col+n−1 ← auxi,1:n
3.2.2. col ← col + n
3.2.3. ren ← ren + 1
Algoritmo 14 CalculaJ32
1. Para i = 1,n
1.1. aux1:n,i ← dscal(n, −Si∗, Q1:n,i )
2. ren ← salvaren
3. Para i=1,m
3.1. JF Bren:ren+n−1,col:col+n−1 ← aux
3.2. ren ← ren + n
3.3. col ← col + n
63
Algoritmo 15 CalculaJ33
1. Para i = 1,n
1.1. ren ← salvaren
1.2. Para jj = 1,m
1.2.1. JF Bren:ren+n−1,col ← Aijj,1:n
1.2.2. ren ← ren + n
1.3. col ← col + 1
Algoritmo 16 CalculaF
1. { aux ← Qt Q − In }
aux ← dgemm(n, n, n, Qt, Q, −In )
2. k ← 1
3. { Llena F1:n∗(n+1)/2 }
Para i = 1,n
3.1. Fk:k+n−i+1 ← auxi:n,i
3.2. k = k + n − i + 1
4. { aux ← P t P − Im }
aux ← dgemm(m, m, m, P t , P, −Im )
5. { Llena Fn∗(n+1)/2+1:n∗(n+1) }
Para i = 1,n
5.1. Fk:k+n−i+1 ← auxi:n,i
5.2. k ← k + n − i + 1
6. { aux ← P diag(S ∗ ) }
aux ← dgemm(m, n, n, P, diag(S ∗))
7. Calcular A
8. { A ← A − P diag(S ∗ )Qt }
A ← dgemm(m, n, n, −aux, Qt, A)
9. { Llena Fn∗(n+1)+1:mF }
Para i = 1,m
9.1. Fk:k+n ← Ai,1:n
9.2. k ← k + n
64
(k) (k)
(k) (k) Si∗ Wi,j + Sj∗ Wj,i
L̃i,j = −L̃j,i = , i = 1, n; j = i + 1, n;
Si∗2 − Sj∗2
pueden expresarse como:
(k) t(k)
(k) (k) Si∗ Wj,i + Sj∗ Wj,i
H̃i,j = −H̃j,i = , i = 1, n; j = i + 1, n;
Si∗2 − Sj∗2
(k) t(k)
(k) (k) Si∗ Wi,j + Sj∗ Wi,j
L̃i,j = −L̃j,i = , i = 1, n; j = i + 1, n.
Si∗2 − Sj∗2
Algoritmo 17 CalculaW
1. W ← dgemm(m, n, m, P t , A)
2. A ← dgemm(m, n, n, W, Q)
3. W ←A
4. aux ← W t
65
Algoritmo 18 AproximaP
1. { aux ← P H̃ }
aux ← dgemm(m, m, m, P, H)
2. { H ← −(1/2)P H̃P t }
H ← dgemm(m, m, m, −(1/2)aux, P t)
3. { H ← Im − (1/2)H }
Para i=1,m
Hi,i ← 1
4. { aux ← (Im − (1/2)H)P }
aux ← dgemm(m, m, m, H, P )
5. { P ← (Im − (1/2)H)P }
P ← aux
6. { aux ← Im − (1/2)H }
aux ← H
7. { aux ← −Im + (1/2)H }
aux ← dscal(m ∗ m, −1, aux)
8. { aux ← Im + (1/2)H }
Para i = 1,m
auxi,i ← 1
9. { Calcula ← lu(Im + (1/2)H) }
[L, U ] ← dgetrf (m, aux)
10. { Resuelve (Im + H2 )P+ = (Im − H2 )P }
P+ ← dgetrs(m, L, U, P )
Como sol = [Q1,1 , Q1,2 , ..., Qn,n , P1,1 , P1,2 , ..., Pm,n , c1 , c2 , ..., cn ] es el paso
calculado por el método de Newton y Z representa a P , Q y c, el Algoritmo 19
distribuye los componentes de sol para sumarlos en correspondencia con las
matrices P , Q y con el vector c.
Algoritmo 19 ActulizaZ
{ Z ← Z + sol }
1. Para i = 1,n
1.1. Qi,1:n ← daxpy(n, sol(i−1)n+1:in+1 , Qi,1:n )
2. Para i = 1,m
2.1. Pi,1:n ← daxpy(n, soln2 +(i−1)n+1:n2 +in+1 , Pi,1:n )
3. c ← daxpy(n, soln2 +mn+1:n2 +mn+n , c)
66
S1∗ S2∗ S3∗ S4∗ S5∗
↓ ↓ ↓ ↓ ↓
0 * * * *
* 0 * * *
* * 0 * *
* * * 0 *
H←
* * * * 0
× × × × ×
× × × × ×
↑ ↑ ↑ ↑ ↑
1/S1∗ 1/S2∗ 1/S3∗ 1/S4∗ 1/S5∗
W
Los pasos 2.1. y 2.3. del mismo algoritmo escalan con S ∗ y 1/S ∗ los renglores
de W t que está almacenada en aux y suma el resultado a la matriz H, como en
la siguiente figura:
S1∗ → 0 * * * * × × ← 1/S1∗
S2∗ → * 0 * * * × × ← 1/S2∗
S3∗ → * * 0 * * × × ← 1/S3∗
H ← H+ S4∗ → * * * 0 * × × ← 1/S4∗
S5∗ → * * * * 0 × × ← 1/S5∗
Wt
Por último, en el paso 3. se dividen los elementos H1:n,1:n por deno, que
tiene el resultado de las diferencias Si∗2 − Sj∗2 , para i = 1, n; j = 1, n.
67
Algoritmo 20 CalculaHL
1. Para j = 1,n
1.1. { Hi,j = −Hj,i ← Sj∗ Wi,j i = 1, n; j = i + 1, n }
H1:n,j ← daxpy(n, Sj∗ , W1:n,j )
1.2. { Li,j = −Lj,i ← Sj∗ Wj,i i = 1, n; j = i + 1, n }
L1:n,j ← daxpy(n, Sj∗ , aux1:n,j )
1.3. { Hi,j ← −Wj,i /Sj∗ i = n + 1, m; j = 1, n }
Hn+1:m,j ← daxpy(m − n, −1/sAsterj , Wn+1:m,j )
2. Para i = 1,n
2.1. { Hi,j = −Hj,i ← Sj∗ Wi,j + Si∗ Wj,i i = 1, n; j = i + 1, n }
Hi,1:n ← daxpy(n, Si∗ , auxi,1:n )
2.2 { Li,j = −Lj,i ← Sj∗ Wj,i + Si∗ Wi,j i = 1, n; j = i + 1, n }
Li,1:n ← daxpy(n, Si∗ , Wi,1:n )
2.3. { Hj,i (= −Hi,j ) ← −Wi,j /Sj∗ i = n + 1, m; j = 1, n }
∗
Hi,n+1:m ← daxpy(m − n, −1/Si , auxi,n+1:m )
3. Para i = 1,n
3.1. Para j = 1,n
3.1.1. Hi,j ← Hi,j /denoi,j
3.1.2. Li,j ← Li,j /denoi,j
4. diag(H), diag(L) ← 0
Con este algoritmo termina el detalle de las operaciones del PIAVS, lo que
da pie a expresar, también en detalle, los tiempos teóricos de ejecución de FB,
MI, EP y MIII, cuya complejidad de tiempo de ejecución se ha dado en la
Sección 3.3. Mientras tanto, en la siguiente sección se realizan experimentos
numéricos para complementar los realizados en el capı́tulo anterior.
68
rutina T (n)
ddot 2ntf
dscal ntf
daxpy 2ntf
dnrm2 (2n + 1)tf
dlange (2n2 + 1)tf
dgemv 2n2 tf
dgemm 2n3 tf
dgesv (2/3)n3 tf
dgesvd (38/3)n3 tf
CalcularA 2m3 tf
A continuación se presentan los algoritmos FB, MI, EP y MIII, señalando las
rutinas BLAS y LAPACK que se utilizan y los tiempos de ejecución estimados
(presentados en términos de orden mayor en la sección 3.3), donde k denota el
número de iteraciones que los algoritmos realizan para converger y t f el tiempo
que toma ejecutar una operación en punto flotante.
FB. Los tiempos de ejecución de los pasos 4.1., 4.4. y 4.5. del Algoritmo 21 son,
respectivamente:
TJF B (m, n) = (2mn + 2n2 )tf
TactualizaZ (m, n) = mn + n2 + n tf
TF (m, n) = 6mn2 + 2m3 + 2n3 tf .
Algoritmo 21 FB
1. A(0) ← CalculaA(c(0) , A0 , ..., An )
2. [P (0) , S (0) , Q(0) ] ← dgesvd(A(0) )
3. F (0) ← CalculaF(c(0) , A0 , ..., An , P (0) , S ∗ , Q(0) )
4. Para k = 0,1,..., Mientras dnrm2(F (k) ) > tol
4.1. JF B (k) ← CalculaJFB(S ∗ , A1 , ..., An , P (k) , Q(k) )
4.2. sol(k) ← dgesv(JF B (k) , −F (k) )
4.3. [c(k+1) , P (k+1) , Q(k+1) ] ← ActualizaZ(c(k) , P (k) , Q(k) , sol(k) )
4.4. F (k+1) ← CalculaF(c(k+1) , A0 , ..., An , P (k+1) , S ∗ , Q(k+1) )
69
MI. En el Algoritmo 22 las tiempos para calcular b y J son:
Tb (m, n) = 2mn2 + 2mn + 3n tf
TJ (m, n) = 2mn3 + 2mn2 tf .
Algoritmo 22 MI
1. A(0) ← CalculaA(c(0) , A0 , ..., An )
2. [P (0) , S (0) , Q(0) ] ← dgesvd(A(0) )
3. Para k = 0,1,..., Mientras dnrm2(S (k) − S ∗ ) > tol
3.1. J (k) ← CalculaJ(A1 , ..., An , P (k) , Q(k) )
3.2. b(k) ← Calculab(A0 , P (k) , Q(k) , S ∗ )
3.3. c(k+1) ← dgesv(J (k) , b(k) )
3.4. A(k+1) ← CalculaA(c(k+1) , A0 , ..., An )
3.5. [P (k+1) , S (k+1) , Q(k+1) ] ← dgesvd(A(k+1) )
Algoritmo 23 EP
1. Atr ← CalculaAtr(A1 , ..., An )
2. Atr ← pdgetri(Atr )
3. parar ← F ALSO
4. Para k = 0,1,..., Mientras N O parar
4.1. A(k) ← CalculaA(c(k) , A0 , ..., An )
4.2. [P (k) , S (k) , Q(k) ] ← dgesvd(A(k) )
4.3. X (k) ← dgemm(m, n, n, P (k) , dgemm(m, n, n, S ∗, Q(k)t ))
(k)
4.4. btr ← Calculabtr(S ∗ , A0 , P (k) , Q(k) )
(k)
4.5. c(k+1) ← dgemv(n, n, Atr , btr )
4.6. Si dnrm2(c(k+1) − c(k) ) < tol entonces parar ← V ERDADERO
70
A diferencia de FB y MI, que tienen el paso más costoso dentro del ciclo,
EP lo tiene antes del ciclo en el cálculo de Atr, lo que se refleja en su tiempo de
ejecución estimado:
7 m2 56 3
TEP (m) = m4 + m3 + tf + k m + 4m2 + 4m tf ,
2 2 3
cuando m = n.
MIII. Por último, los tiempos de ejecución de los pasos 4.5., 4.6. y 4.7. del
Algoritmo 24 son:
TW (m, n) = 2mn2 + 2m2 n tf
THL (m, n) = 4mn + 6n2 tf
26 3 2
TP (m) = m + m tf
3
Algoritmo 24 MIII
1. A(0) ← CalculaA(c(0) , A0 , ..., An )
2. [P (0) , S (0) , Q(0) ] ← dgesvd(A(0) )
3. denoi,j ← Si∗2 − Sj∗2 i,j=1,n;excepto i=j
4. Para k = 0,1,..., Mientras dlange(P (k)t A(k) Q(k) − diag(S ∗ )) > tol
4.1. J (k) ← CalculaJ(A1 , ..., An , P (k) , Q(k) )
4.2. b(k) ← Calculab(A0 , P (k) , Q(k) , S ∗ )
4.3. c(k+1) ← dgesv(J (k) , b(k) )
4.4. A(k+1) ← CalculaA(c(k+1) , A0 , ..., An )
4.5. W (k) ← CalculaW(P (k) , Q(k) , A(k+1) )
4.6. [H̃ (k) , L̃(k) ] ← CalculaHL(S ∗ , W, deno)
4.7. P (k+1) ← AproximaP(P (k) , H̃ (k) )
4.8. Q(k+1) ← AproximaQ(Q(k) , L̃(k) )
El paso 4.8. tiene el mismo costo que TP , sustituyendo m por n. Por lo tanto,
el tiempo de ejecución de MIII, tomando m = n es:
53 3 11 2 3
TM III (m) = m + m − m tf + k 2m4 + 31m3 + 18m2 + 3m tf .
3 2 2
Como MIII comparte el cálculo de J con MI, el paso más costoso de MIII
es el paso 4.1. que se ejecuta con cada iteración.
Con todos estas estimaciones de tiempos de ejecución se tiene otro parámetro
de comparación de los algoritmos del PIAVS. FB es el algoritmo con más costo
computacional, mietras que EP tiene el menor costo por iteración, sin embargo,
en los experimentos realizados EP requiere muchas iteraciones para converger
que el resto de los algoritmos. Entonces, los tiempos de ejecución no están
71
supeditados sólamente al tamaño del problema (m) sino también al número de
iteraciones (k).
Estimar los tiempos de ejecución también ayuda a identificar las secciones
más costosas de cada algoritmo, permitiendo centrar la atención en ellas para
valorar si el algoritmo es susceptible de mejora. En los algoritmos que se manejan
en este trabajo, dado que se han hecho estimaciones de tiempos suponiendo
el empleo de rutinas eficientes, es difı́cil, en primera instancia, vislumbrar una
mejora sustancial que disminuya la complejidad de tiempo, quedando por aplicar
alternativas de solución con en el empleo de la programación paralela para
distribuir la carga de trabajo en un conjunto de procesadores, que es el tema
del Capı́tulo 4.
72
3.3.2. Convergencia
En los experimentos numéricos realizados se ha reflejado el carácter new-
toniano de todos los métodos, excepto EP, con respecto a la sensibilidad a los
puntos iniciales c(0) dados a los algoritmos; en la siguiente relación se resumen
(0)
estos comportamientos para diferentes puntos iniciales ci = c∗i + δ (i = 1, n).
δ 1e − 1 1e0 1e1
FB converge converge para m < 50 converge para m ≤ 10
MI converge converge para m < 50 converge para m ≤ 10
EP converge converge converge
MIII converge converge para m < 50 converge para m ≤ 10
73
m=n FB MI EP MIII
4 1.21e-16 1.15e-10 1.17e-07 3.05e-16
5 2.35e-12 2.37e-12 4.68e-08 2.34e-12
10 1.67e-16 1.23e-12 6.80e-08 1.74e-12
15 1.90e-16 1.59e-16 1.87e-07 1.99e-16
20 1.18e-16 6.33e-16 1.42e-07 2.75e-16
25 1.26e-15 8.89e-16 1.79e-07 7.72e-16
30 5.41e-16 4.29e-16 1.13e-07 2.57e-16
40 2.35e-16 2.44e-16 6.43e-08 2.39e-16
50 1.76e-14 2.23e-13 6.66e-08 3.11e-16
m=n 4 5 10 15 20 25 30 40 50
FB 3 2 3 3 3 3 3 3 3
MI 2 2 2 3 3 3 3 3 3
EP 365 206 561 3398 2629 1998 4048 6304 5303
MIII 3 2 2 3 3 3 3 3 4
74
y en la siguiente figura se muestran los tiempos de ejecución correspondientes a
los mismos experimentos:
3
10
FB
MI
EP
MIII
2
10
0
10
−1
10
−2
10
0 5 10 15 20 25 30 35 40 45 50
m=n
3.3.5. Conclusiones
Se han diseñado y analizado un conjunto de algoritmos para resolver el
PIAVS. Los resultados experimentales dados en [Chu92a] y [BMX03] para
resolver el PIAVS corresponden a matrices de tamaño 5 × 4, por lo que se ha
experimentado con matrices de mayor tamaño.
Lo que se observa en este estudio es que FB es un algoritmo de alto coste,
tanto por las dimensiones de las estructuras de datos que maneja (O(m4 )), como
por la cantidad de cálculos requeridos para operar con ellas (O(m6 )).
Desde el punto de vista espacial MI y EP son los de menores requerimientos
de memoria y desde el punto de vista temporal MI es el más eficiente. La más
alta exactitud de las soluciones, en la mayorı́a de los casos probados, se alcanza
con MIII.
El inconveniente más importante de MI y MIII, que es un inconveniente más
de FB, es la sensibilidad que tienen al punto inicial para converger, que se agraba
conforme m aumenta su tamaño. En cambio, EP no observa este problema.
Para ilustrar las ventajas e inconvenientes de los algoritmos en una tabla, se
ha asociado un valor del intervalo [1,4] (1=alta valoración, 4=baja valoración),
a cada caracterı́stica de los algoritmos, que de acuerdo a los experimentos rea-
lizados se obtiene lo siguiente:
75
En términos generales, los algoritmos que mejor equilibran los diferentes
aspectos son MI y MIII.
Los algoritmos que se han implementado trabajan con matrices Ai (i = 0, n)
de estructura general. El manejo de matrices estructuradas conlleva un rediseño
de los algoritmos para explotar la estructura y aminorar los costos de cálculo y
almacenamiento, tema que se aborda en el capı́tulo 5.
Aplicar estos algoritmos a problemas de mayor tamaño (m > 50) implica
lidiar con altos costos de almacenamiento y ejecución. Una forma de solventar
los problemas de memoria es manteniendo las estructuras de datos almacenadas
en memoria secundaria y tenerlas en memoria principal sólamente cuando se
accedieran. Otra forma, que también solventarı́a el alto costo de ejecución, es
paralelizando los algoritmos, de modo que cada procesador involucrado alma-
cenara sólamente una parte de las estructuras de datos y ejecutara parte de
los cálculos del algoritmo. La paralelización de los algoritmos es el tema del
siguiente capı́tulo.
76
Capı́tulo 4
77
4.1. Paralelización de Operaciones de Algorit-
mos del PIAVS
Los algoritmos paralelos del PIAVS trabajan con estructuras de datos cuya
distribución sigue la convención establecida por ScaLAPACK. Ası́, todas las es-
tructuras de datos: A0 , A1 , ..., An , A, c, S ∗ , los vectores singulares (P , Q), matri-
ces hemisimétricas (H, L), matrices jacobianas (JF B, J), vectores de términos
independientes (b, btr , F ) y matrices de coeficientes (Atr ) se han particionado
en bloques y distribuido cı́clicamente en una malla lógica de procesadores de
Prc = Pr × Pc procesadores (Pr renglones y Pc columnas). Para evitar al máxi-
mo las comunicaciones entre nodos, S ∗ y c también se han replicado en cada
procesador. Por lo tanto, en cada nodo de procesamiento se manejan matrices
y vectores con los siguientes tamaños locales (resultado de dividir la dimensión
global de la estructura por el número de procesadores):
Al igual que en el caso secuencial, las operaciones comunes a todos los algo-
ritmos, excepto el cálculo de A, están paralelizadas en rutinas de ScaLAPACK
y PBLAS:
pdgesvd, ScaLAPACK, svd de una matriz
pdgesv, ScaLAPACK, resolución de un sistema de
ecuaciones lineales
pdnrm, PBLAS, norma-2 vectorial
pdlange, ScaLAPACK, norma-Frobenius matricial.
La paralelización del cálculo de A está en el Algoritmo 25. Nótese que este
algoritmo no tiene comunicaciones entre nodos, al estar c replicada.
Algoritmo 25 ParaleloCalculaA
1. A ← A0
2. Para i = 1,n
2.1. A ← daxpy( Pmr ∗ n
Pc , c i , A i )
78
Rutinas Aritméticas de PBLAS y ScaLAPACK (con escalares α, β replicados;
vectores x, y y matrices A, B, C distribuidas en los procesadores):
pddot PBLAS xt y
pdscal PBLAS αx
pdaxpy PBLAS αx + y
pdgemv PBLAS αAx + βy
pdgemm PBLAS αAB + βC
pdlaset ScaLAPACK asigna valores a la triangular
superior o inferior de una matriz
pdgetri ScaLAPACK, A−1
Rutinas de comunicaciones y redistribución de datos de MPI, BLACS y ScaLA-
PACK:
79
diagonales se utiliza la rutina pdlaset de ScaLAPACK. De forma análoga a Q se
redistribuyen los elementos de P en JF B22 y JF B31 . Finalmente, para construir
JF B33 se vuelve a hacer uso de pdlacpy.
La paralelización del cálculo de F requiere calcular A, realizar cuatro mul-
tiplicaciones matriz-matriz distribuidas (pdgemm) y redistribuir los resultados
en F (pdcopy) (Algoritmo 26).
Algoritmo 26 ParaleloCalculaF
1. k ← 1
2. { aux ← Qt Q − In }
aux ← pdgemm(n, n, n, Qt, Q, −In )
3. { Llena F1:n∗(n+1)/2 , comunicando n2 datos }
Para i = 1,n
a. Fk:k+n−i+1 ← pdcopy(n − i + 1, auxi:n,i )
b. k ← k + n − i + 1
4. { aux ← P t P − Im }
aux ← pdgemm(m, m, m, P t, P, −Im )
5. { Llena Fn∗(n+1)/2+1:n∗(n+1) , comunicando n2 datos }
Para i = 1,n
5.1. Fk:k+n−i+1 ← pdcopy(n − i + 1, auxi:n,i )
5.2. k ← k + n − i + 1
6. { aux ← P diag(S ∗ ) }
aux ← pdgemm(m, n, n, P, diag(S ∗))
7. A ← ParaleloCalculaA(c(k), A0 , ..., An )
8. { A ← A − P S ∗ Qt }
A ← pdgemm(m, n, n, −aux, Q, A)
9. { Llena Fn∗(n+1)+1:mF , comunicando mn datos }
Para i=1,m
9.1. Fk:k+n ← pdcopy(n, Ai,1:n )
9.2. k ← k + n
80
Algoritmo 27 ParaleloActualizaZ
1. Para i = 1,n
1.1. Qi,1:n ← pdaxpy(n, sol(i−1)n+1:in+1 , Qi,1:n )
2. Para i = 1,m
2.1. Pi,1:n ← pdaxpy(n, soln2 +(i−1)n+1:n2 +in+1 , Pi,1:n )
3. { Redistribuir el subvector de sol correspondiente a c
de modo que el procesador 0 lo contenga completamente en aux }
aux ← pdgemr2d( Pnr , Fn2 +mn+1:n2 +mn+n )
4. { Replicar c (aux) en todos los procesadores, realizando una
dispersión uno a todos de un mensaje de longitud n }
Si procesador 0 entonces { enviar }
c ← daxpy(n, aux, c)
dgebs2d(0 All0 , n, c)
Sino { recibir }
c ← dger2d(0 All0 , n, c)
Algoritmo 28 ParaleloCalculaJ
1. Para j = 1, n
1.1. aux ← pdgemm(m, n, n, Aj , Q)
1.2. Para i = 1, m
1.2.1. prodEsc ← pddot(m, pi , auxi )
1.2.2. Ji,j ← pdelset(prodEsc)
81
Algoritmo 29 ParaleloCalculab
1. aux ← pdgemm(m, n, n, Aj , Q)
2. Para i = 1, m
2.1. prodEsc ← pddot(m, pi , auxi )
2.2. bi ← pdelset(prodEsc)
2.3. b ← pdscal(m, −1,0d0, b)
2.4. { b ← S ∗ − b }
b ← pdaxpy(m, S ∗ , b)
Algoritmo 30 ParaleloCalculaAtr
1. Para i = 1,n
1.1. Para j = 1,i
1.1.1. tr ← 0
1.1.2. Para k = 1,n/Pc
1.2.2.1. tr ← tr + ddot(n/Pr , Aj:,k , Ai:,k )
1.1.3. { Reducción−Suma de tr de todos los procesadores al
procesador P roc que tiene el componente (i, j) de Atr }
Atri,jP roc ← M P I ReduceSum(1,tr,P roc)
btr se paraleliza con los mismos criterios que Atr (ver Algoritmo 31).
82
Algoritmo 31 ParaleloCalculabtr
1. { P ← P S ∗ }
Para i = 1,n/Pc
1.1. P:,i ← dscal(n/Pr , sAsteri , P:,i )
2. aux ← A0
3. aux ← pdgemm(m, n, n, P, Qt , −aux)
4. Para i=1,n
4.1. tr ← 0
4.2. Para k = 1,n/Pc
4.2.1. tr ← tr + ddot(n/Pr , Ai:,k , aux:,k )
4.3. { Reducción−Suma de tr de todos los procesadores
al procesador P roc que tiene el componente i de btr }
btriP roc ← M P I ReduceSum(1,tr,P roc)
Algoritmo 32 ParaleloCalculaW
1. W ← pdgemm(m, n, m, P t , A)
2. A ← pdgemm(m, n, n, W, Q)
3. W ←A
4. {aux ← W t }
Para j = 1,n
4.1. auxj,1:m ← pdcopy(m, W1:m,j )
83
Algoritmo 33 ParaleloAproximaP
1. { aux ← P H̃ }
aux ← pdgemm(m, m, m, P, H)
2. { H ← −(1/2)P H̃P t }
H ← pdgemm(m, m, m, −(1/2)aux, P t)
3. { H ← Im − (1/2)H }
Para i=1,m
3.1. El procesador que almacena Hi,i global ejecuta: Hilocal,ilocal ← 1
4. { aux ← (Im − (1/2)H)P }
aux ← pdgemm(m, m, m, H, P )
5. { P ← (Im − (1/2)H)P }
P ← aux
6. { aux ← Im − (1/2)H }
aux ← H
7. { aux ← −Im + (1/2)H }
aux ← dscal(ldA ∗ nqP, −1, aux)
8. { aux ← Im + (1/2)H }
Para i = 1,m
8.1. El procesador que almacena auxi,i global ejecuta: auxilocal,ilocal ← 1
9. { Calcula lu(Im + (1/2)H) }
[L, U ] ← pdgetrf (m, aux)
10. { Resuelve (Im + H2 )P+ = (Im − H2 )P }
P+ ← pdgetrs(m, L, U, P )
84
Algoritmo 34 ParaleloCalculaHL
1. Para j = 1,n/Pc
1.1. { Hi,j = −Hj,i ← Sj∗ Wi,j i = 1, n; j = i + 1, n }
∗
H1:n/Pr ,j ← daxpy(n/Pr , Sjglobal , W1:1/Pr ,j )
∗
1.2. { Li,j = −Lj,i ← Si Wi,j i = 1, n; j = i + 1, n }
∗
L1:n/Pr ,j ← daxpy(n/Pr , Sjglobal , aux1:n/Pr ,j )
∗
1.3. { Hi,j ← −Wi,j /Sj i = n + 1, m; j = 1, n }
∗
Hn/Pr +1:m/Pr ,j ← daxpy(m/Pr − n/Pr , −1/Sjglobal , Wn/Pr +1:m/Pr ,j )
2. Para i = 1,n/Pr
2.1. { Hi,j = −Hj,i ← Si∗ Wj,i + Sj∗ Wi,j i = 1, n; j = i + 1, n }
∗
Hi,1:n/pc ← daxpy(n/Pc , Siglobal , auxi,1:n/Pc )
2.2. { Li,j = −Lj,i ← Si∗ Wi,j + Sj∗ Wj,i i = 1, n; j = i + 1, n }
∗
Li,1:n/Pc ← daxpy(n/Pc , Siglobal , auxi,1:n/Pc )
2.3. { Hj,i ← Wi,j /Sj∗ i = n + 1, m; j = 1, n }
∗
Hi,n/Pc +1:m/Pc ← daxpy(m/Pc − n/Pc , −1/Siglobal , auxi,n/Pc +1:m/Pc )
3. Para i = 1,n/Pr
3.1. Para j = 1,n/Pc
3.1.1. Hi,j ← Hi,j /denoi, j
3.1.2. Li,j ← Li,j /denoi, j
85
pddot (PBLAS)
2m p
T (m, Prc ) = tf + 2( Prc − 1)tm + tv
Prc
pdaxpy (PBLAS)
m Pr + P c m
T (m, Prc ) = √ tf + t m + √ tv
Prc 2 Prc
pdgemv (PBLAS)
m2 p
T (m, Prc ) = tf + 2 Prc tm + 3mtv
P rc
pdgemm (PBLAS)
2m3
T (m, Prc ) = tf + m(log2 Pc + log2 Pr )tm +
Prc
m2 m2
+ log2 Pc + log2 Pr tv
Pr Pc
ParaleloCalculaA
2m3
T (m, Prc ) = tf
Prc
También se listan los tiempos de ejecución estimados de las rutinas de co-
municación utilizadas, considerando la comunicación de un mensaje de longitud
m [KGGKrp94]:
Comunicación Punto a Punto (dgesd2d-dgerv2d (BLACS), pdelset (ScaLA-
PACK))
Pr + P c
T (m, Prc ) = tm + mtv
2
Comunicación Uno a Todos o Dispersión (dgebs2d-dgebr2d (BLACS))
Pr + P c
T (m, Prc ) = + 1 (tm + mtv )
2
86
Comunicación Todos a Todos con suma (dgsum2d (BLACS)
Algoritmo 35 FBParalelo
1. A(0) ← ParaleloCalculaA(c(0), A0 , ..., An )
2. [P (0) , S (0) , Q(0) ] ← pdgesvd(A(0) )
3. F (0) ← ParaleloCalculaF(c(0), A0 , ..., An , P (0) , S ∗ , Q(0) )
4. error ← pdnrm2(F (0) )
5. {Difunde por renglones error replicado en la columna 0 de procesadores}
error ← dgsum2d(0 Ren0 , 1, error)
6. Para k = 0,1,..., Mientras error > tol
6.1. JF B (k) ← ParaleloCalculaJFB(S ∗, A1 , ..., An , P (k) , Q(k) )
6.2. sol(k) ← pdgesv(JF B (k) , −F (k) )
6.3. [c(k+1) , P (k+1) , Q(k+1) ] ← ParaleloActualizaZ(c(k), P (k) , Q(k) , sol(k) )
6.4. F (k+1) ← ParaleloCalculaF(c(k+1), A0 , ..., An , P (k+1) , S ∗ , Q(k+1) )
6.5. error ← pdnrm2(F (k) )
6.6. {Difunde por renglones error replicado en la columna 0 de procesadores}
error ← dgsum2d(0 Ren0 , 1, error)
Los tiempos de ejecución de los pasos 6.1., 6.3. y 6.4. de este algoritmo son,
respectivamente:
2mn + 2n2 Pr + P c
TJF B (m, n, Prc ) = tf + n3 + 3mn2 + m2 n tm + tv
Prc 2
mn n2 2Pr + Pc + 3
TZ (m, n, Prc ) = √ +√ + n tf + n + m + tm +
Prc Prc 2
Pr + P c Pr + 1 Pr + P c + 2
+ √ (mn + n2 ) + + n tv
2 Prc 2Pr 2
6mn2 2n3 2m3
TF (m, n, Prc ) = + + tf +
Prc Prc Prc
(log2 Pc + log2 Pr )(3n + m) + mn + 2n2 tm +
Pr + P c 2 log2 Pc 2 2 log2 Pr 2 2
(2n + mn) + (2mn + m + n ) + (3n + m ) tv
2 Pr Pc
87
Considerando m = n, el tiempo de ejecución de las operaciones aritméticas
de FB es:
74m3 4m2 2m Pr + Pc
TA (m, Prc ) = + + + tf +
3Prc Prc Prc 2
16m6 8m5 4m4 32m3 8 2
+K + + + + +√ m2 +
3Prc Prc Prc 3Prc Prc Prc
2
+ 1+ m tf
Prc
14log2Prc 4log2 Pr 4log2 Pc 3 2 Pr + P c
TCv (m, Prc ) = √ + + + (Pr + Pc ) m + tv +
Prc Pc Pr 2 2
m4 Pr + P c log2 Prc + 12
+ K (log2 Prc + 12) √ + 5 + √ m3 +
Prc 2 Prc
log2 Prc + Pr + Pc + 12 Pr + P c 4log2 Pc 4log2 Pr
+ √ +3 + + m2 +
Prc 2 Pr Pc
1 m Pr + P c
+ Pr + P c + +3 + tv
Pr 2 2
88
Algoritmo 36 ParaleloCalculaError
∗
1. { Slow:up ← Slow:up − Slow:up }
∗
Slow:up ← daxpy(longi, −1,0d0, Slow:up , Slow:up )
q
2 2 2
2. { error ← Slow + Slow+1 + ... + Sup }
error ← dnrm2(longi, Slow:up )
2 2 2
3. { error ← Slow + Slow+1 + ... + Sup }
error ← error ∗ error
4. { Calcula error total, error = S12 + S22 + ... + Sn2 en procesador 0 }
error ← dgsum2d(0 All0 , 1, error)
5. Si procesador 0 entonces { enviar }
dgebs2d(0 All0 , 1, error)
Sino { recibir }
error ← dger2d(0 All0 , 1, error)
6. error ← sqrt(error)
mn3 mn2 P r + 1 n2
TJ (m, n, Prc ) = 2 +2 + tf +
Prc Prc 2 Pc
2 Pr + 1
+ (logPc + logPr + 1) n + − b n tm +
2
mn2 n3 P r + 1 n2 Pr + P c 2 Pr + P c
+ logPc + logPr + + n − bn tv
Pr Pc 2 Pc 2 2
4n Pr + P c Pr + P c
Terror = + tf + (tm + tv )
Prc 2 2
donde b es el tamaño de bloque en la distribución cı́clica de las matrices y
vectores en la malla lógica de procesadores.
89
Algoritmo 37 MIParalelo
1. A(0) ← ParaleloCalculaA(c(0), A0 , ..., An )
2. [P (0) , S (0) , Q(0) ] ← pdgesvd(A(0) )
3. error ← ParaleloCalculaError(S (0), S ∗ )
4. Para k = 0,1,..., Mientras error > tol
4.1. J (k) ← ParaleloCalculaJ(A1, ..., An , P (k) , Q(k) )
4.2. b(k) ← ParaleloCalculab(A0, P (k) , Q(k) , S ∗ )
4.3. c(k+1) ← pdgesv(J (k) , b(k) )
4.4. { Redistribuye c(k+1) de modo que el procesador 0 lo
contenga completamente }
c ← pdgemr2d( Pnr , c(k+1) )
4.5. { Replica c(k+1) en todos los procesadores realizando
una dispersión uno a todos de un mensaje de longitud n }
Si procesador 0 entonces { enviar }
dgebs2d(0 All0 , n, c(k+1) )
Sino { recibir }
c(k+1) ← dgebr2d(0 All0 , n, c(k+1) )
(k+1)
4.6. A ← ParaleloCalculaA(c(k+1), A0 , ..., An )
4.7. [P (k+1) , S (k+1) , Q(k+1) ] ← pdgesvd(A(k+1) )
4.8. error ← ParaleloCalculaError(S (k+1), S ∗ )
90
EP Paralelo. Para estimar el tiempo de ejecución de EP es necesario estimar
el del cálculo de Atr y btr (pasos 1.y 4.4. del Algoritmo 38, donde el cálculo del
error es igual que en MI.):
mn3 n3 Pr + P c + 2 2
TAtr (m, n, Prc ) = + + n tf +
Prc 2Pc 4
mn2 n2 Pr + P c + 2
+ + + n tf +
Prc 2Pc 4
Pr + P c + 2 2
+ (n + n)(tm + tv )
4
mn 4mn2 n2 Pr + P c + 2
Tbtr (m, n, Prc ) = + + +n tf +
Prc Prc Pc 2
Pr + P c + 2
+ n log2 Pc + log2 Pr + tm +
2
Pr + P c + 2 mn n2
+ n + logPc + log2 Pr tv
2 Pr Pc
Algoritmo 38 EPParalelo
1. Atr ← ParaleloCalculaAtr(A1, ..., An )
2. Atr ← pdgetri(Atr )
3. parar ← F ALSO
4. Para k = 0,1,..., Mientras N O parar
4.1. A(k) ← ParaleloCalculaA(c(k), A0 , ..., An )
4.2. [P (k) , S (k) , Q(k) ] ← pdgesvd(A(k) )
4.3. X (k) ← pdgemm(m, n, n, P (k) , pdgemm(m, n, n, S ∗, Q(k)t ))
(k)
4.4. btr ← ParaleloCalculabtr(S ∗, A0 , P (k) , Q(k) )
(k)
4.5. c(k+1) ← pdgemv(n, n, Atr , btr )
4.6. { Redistribuye c(k+1) de modo que el procesador 0 lo
contenga completamente }
c ← pdgemr2d( Pnr , c(k+1) )
4.7. { Replica c(k+1) en todos los procesadores realizando
una dispersión uno a todos de un mensaje de longitud n }
Si procesador 0 entonces { enviar }
dgebs2d(0 All0 , n, c(k+1) )
Sino { recibir }
c(k+1) ← dgebr2d(0 All0 , n, c(k+1) )
4.8. error ← ParaleloCalculaError(c(k+1) − c(k) )
4.9. Si error < tol entonces parar ← V ERDADERO
91
m4 3 1
TA (m, Prc ) = + + m3 +
Prc Prc 2Pc
Pr + P c + 2 1 Pr + P c + 2
+ + m2 + m tf +
4 2Pc 4
56 m3 2 1 4 Pr + P c
+k + + m2 + P r + P c + m+ tf
3 Prc Prc Pc Prc + 1 2
Pr + Pc + 2 2 Pr + Pc + 8log2 Pr + 2
TCm (m, Prc ) = m + m tm +
4 4
Pr + P c
+k log2 Pr + log2 Pc + + 18 m+
2
3Pr p
+ + Pc + 2 Prc tm
2
Pr + P c log2 Pr 1 1 2 Pr + P c + 2
TCv (m, Prc ) = + + + m + m tv +
4 2Pc Pr 2 4
14log2Prc log2 Pr log2 Pc 2 1 11
+k √ + + m + Pr + P c + + m+
Prc Pc Pr 2Pr 2
Pr + P c
+ tv
2
cuando m = n.
MIII Paralelo. Por último, los tiempos de ejecución de los pasos 5.5., 5.6. y
5.7. del Algoritmo 39 son:
2m2 n + 2mn2
TW (m, n, Prc ) = tf +
Prc
+ ((log2 Pc + log2 Pr ) m + (log2 Pc + log2 Pr + 1) n) tm +
mn n2 Pr + Pc mn
+ log2 Pc + log2 Pr + tv
Pr Pc 2 Pr
mn n2
THL (m, n, Prc ) = 4 +6 tf
Prc Prc
20 m3 2m3 m2 2m2
TP (m, n, Prc ) = + + + + 4m2 tf +
3 Prc Pr Prc Pr
2
+ m (Pr + 3) + m(3log2 Pc + 5log2 Pr ) tm +
3
m Pc m2 Pc
+ + 3log2 Pc + +1 tv +
2Pr Pr 2
2
m log2 Pr
+ 3log2 Pr + + m2 (Pr + 1) tv
Pc 2
92
Algoritmo 39 MIIIParalelo
1. A(0) ← ParaleloCalculaA(c(0), A0 , ..., An )
2. [P (0) , S (0) , Q(0) ] ← pdgesvd(A(0) )
3. denoi,j ← Si∗2 − Sj∗2 i=1,n/P ; j=1,n/P ; excepto i=j
r c
El paso 5.8. tiene el mismo costo que TP , sustituyendo m por n. Por lo tanto,
el tiempo de ejecución de MIII, tomando m = n es:
53m3 7m2
TA (m, Prc ) = + tf +
3Prc Prc
2m4 27m3 18 4 Pr m Pr + 1
k + + + + + 8 m2 + + tf
Prc Prc Prc Pr 2Pc Pr 2Pc
93
14log2 Prc log2 Pr log2 Pc
TCv (m, Prc ) = √ + + m2 + P r + P c tv +
Prc Pc Pr
log2 Pc log2 Pr Pc
+k + + m3 +
Pr Pc 2Pr
log2 Prc + 12 13log2Pr 6log2 Pc Pr + 1 Pc + 1 Pc + 3Pr 3
+ √ + + + + + + m2 +
4 Prc Pc Pr 2Pc Pr 2 2
Pr + P c Pr + 1 1 Pr + P c
+ 3 + + − b m+
2 2Pc 2Pr 2
Pr + P c
+ Pr + Pc − b tv
2
Era de esperarse que, como se utilizan rutinas eficientes de ScaLAPACK y
PBLAS, los tiempos de ejecución paralelos son aproximadamente los tiempos
secuenciales divididos por el número de procesadores más el tiempo de comu-
nicaciones entre éstos. En términos de orden superior, los tiempos de ejecución
aritméticos paralelos son:
5
74m3 m2 16m6 m
TF B : +O +k +O
3Prc Prc 3Prc Prc
3
44m3 m 2m4 m
TM I : +O +k +O
3Prc Prc Prc Prc
4
3 3
2
m m 56m m
TEP : +O +k +O ;
Prc Prc 3Prc Prc
2 3
53m3 m 2m4 m
TM III : +O +k +O √
3Prc Prc Prc Prc
los tiempos de establecimiento de comunicación son:
p n p o
TF B : 3m2 + O log2 Prc + k 5m3 + O Prc m2
n p p o
TM I : 17m + k 2log2 Prc m2 + O Prc m
√ √
Prc m2 p Prc m
TEP : +O Prc m + k ;
2 2
p np p o
TM III : 2log2 Prc m + k Prc m2 + O Prc m ,
a lo largo de todo F B se establecen más comunicaciones que en resto de los
algoritmos. Observando los tiempos del ciclo, el que menos establece comuni-
caciones es EP, sin embargo en las operaciones anteriores al ciclo es el más
costoso. MI y MIII observan el fenómeno inverso de EP. Por último, los tiempos
de transferencia son:
14log2Prc m2 log2 Prc m4 p
3
TF B : √ +k √ +O Prc m
Prc Prc
√
14log2 Prc m2 2log2 Prc m3 p
TM I : √ +k √ +O Prc m2
Prc Prc
94
√
Prc m2 p 14log2Prc m2 p
TEP : +O Prc m + k √ +O Prc m ;
4 Prc
14log2Prc m2 log2 Prc m3 p
2
TM III : √ +k √ +O Prc m ,
Prc Prc
dentro del ciclo, F B realiza más redistribución de datos que el resto de los
algoritmos, el más barato sigue siendo EP ; en las operaciones previas al ciclo,
prácticamente no hay diferencias entre ellos.
Con estos tiempos de ejecución teóricos y los tiempos de ejecución teóricos
secuenciales del Capı́tulo 3 se puede estimar la tendencia asintótica del Speedup
cuando crece el tamaño del problema (m → ∞). Se puede comprobar que para
todos los algoritmos paralelos del PIAVS el Speedup teórico alcanza el óptimo:
−1
T (m, 1) 3Prc 3Prc
lim SF B (m, Prc ) = lim = Prc
m→∞ m→∞ T (m, Prc ) 16m6 tf 16m6 tf
−1
T (m, 1) Prc Prc
lim SM I (m, Prc ) = lim = Prc
m→∞ m→∞ T (m, Prc ) 2m4 tf 2m4 tf
−1
T (m, 1) Prc Prc
lim SEP (m, Prc ) = lim = Prc
m→∞ m→∞ T (m, Prc ) m4 tf m4 tf
−1
T (m, 1) Prc Prc
lim SM III (m, Prc ) = lim = Prc
m→∞ m→∞ T (m, Prc ) 2m4 tf 2m4 tf
Con los tiempos de ejecución estimados también se pueden prever los tiempos
de ejecución experimentales de los algoritmos paralelos si se eligen adecuada-
mente los parámetros tf , tm y tv . Si los experimentos se llevaran a cabo en el
cluster Kefren, remitiéndose a la parametrización de éste presentada en la intro-
ducción, los parámetros de comunicaciones se toman con los valores: tm = 5e−6
segundos y tv = 4e − 8 segundos/doble. El valor de tf dependerá del tipo de
operaciones que realice cada algoritmo. En FB se aplican operaciones vectoriales
y en menor medida operaciones matriciales, por eso se utiliza tf =0.001e − 6
segundos. En MIII predominan las operaciones matriciales, por lo tanto se toma
tf =0.0005e − 6 segundos; mientras que MI puede verse como un algoritmo que
aplica un subconjunto de las operaciones de MIII, por lo que se toma el mismo
valor para tf . EP utiliza en su mayor parte operaciones vectoriales y escalares,
por lo que se toma tf = 0,003e − 6 segundos.
Habiendo elegido los parámetros de flop y de comunicaciones, se investiga
bajo qué configuración de malla de procesadores se obtienen los mejores tiempos
de ejecución en el cluster Kefren, para ello se estiman tiempos para algunos
valores de m y Prc . Los resultados obtenidos son:
95
Prc FB (seg)
1×9 37.671 182.583 653.527
9×1 37.669 182.579 653.520
3×3 37.562 182.327 653.031 ←
1 × 12 30.328 142.119 500.850
12 × 1 30.325 142.115 500.842
2×6 30.192 141.802 500.234
6×2 30.192 141.801 500.232
3×4 30.165 141.738 500.110 ←
4×3 30.165 141.738 500.110 ←
m=n 60 80 100
Prc MI (seg)
1×6 3.1324e+02 3.7607e+03 1.7104e+04
6×1 3.1342e+02 3.7614e+03 1.7105e+04
2×3 2.4310e+02 3.2000e+03 1.5212e+04 ←
3×2 2.4313e+02 3.2001e+03 1.5212e+04
1×9 2.8784e+02 3.1010e+03 1.3364e+04
9×1 2.8809e+02 3.1019e+03 1.3366e+04
3×3 1.8624e+02 2.2888e+03 1.0623e+04 ←
m=n 1000 2000 3000
Prc EP (seg)
1×6 5.2471e+02 8.1479e+03 4.0944e+04
6×1 5.2352e+02 8.1381e+03 4.0910e+04
2×3 5.2136e+02 8.1315e+03 4.0900e+04
3×2 5.2111e+02 8.1295e+03 4.0893e+04 ←
1×9 3.5827e+02 5.4677e+03 2.7381e+04
9×1 3.5700e+02 5.4572e+03 2.7345e+04
3×3 3.5210e+02 5.4390e+03 2.7307e+04 ←
m=n 1000 2000 3000
96
Tabla 4.1: Tiempos de Ejecución Teóricos de FB en Kefren
Prc Tiempo estimado en segundos
1 9.29e+01 2.68e+02 6.64e+02 1.46e+03 2.93e+03 5.49e+03
2 4.91e+01 1.39e+02 3.40e+02 7.44e+02 1.48e+03 2.77e+03
4 2.70e+01 7.41e+01 1.77e+02 3.83e+02 7.62e+02 1.41e+03
6 1.96e+01 5.22e+01 1.23e+02 2.63e+02 5.18e+02 9.57e+02
8 1.58e+01 4.12e+01 9.57e+01 2.02e+02 3.96e+02 7.29e+02
9 1.46e+01 3.75e+01 8.65e+01 1.82e+02 3.56e+02 6.53e+02
10 1.36e+01 3.46e+01 7.92e+01 1.66e+02 3.23e+02 5.91e+02
12 1.20e+01 3.01e+01 6.81e+01 1.41e+02 2.74e+02 5.00e+02
14 1.10e+01 2.70e+01 6.03e+01 1.24e+02 2.39e+02 4.34e+02
16 1.01e+01 2.45e+01 5.43e+01 1.11e+02 2.12e+02 3.85e+02
m 50 60 70 80 90 100
mF J 5050 7260 9870 12880 16290 10100
97
Tabla 4.4: Tiempos de Ejecución Teóricos de MIII en Kefren
Prc Tiempo estimado en segundos
1 7.46e+01 1.07e+03 5.27e+03 1.64e+04 3.99e+04 8.24e+04
2 5.24e+01 6.38e+02 2.96e+03 8.98e+03 2.14e+04 4.36e+04
4 3.57e+01 3.69e+02 1.62e+03 4.78e+03 1.12e+04 2.27e+04
6 3.33e+01 3.05e+02 1.26e+03 3.59e+03 8.25e+03 1.64e+04
8 3.34e+01 2.82e+02 1.11e+03 3.07e+03 6.90e+03 1.35e+04
9 2.98e+01 2.41e+02 9.41e+02 2.60e+03 5.87e+03 1.15e+04
10 3.43e+01 2.76e+02 1.04e+03 2.81e+03 6.20e+03 1.19e+04
12 2.95e+01 2.23e+02 8.31e+02 2.23e+03 4.92e+03 9.53e+03
14 3.72e+01 2.82e+02 1.01e+03 2.62e+03 5.60e+03 1.05e+04
16 2.86e+01 1.97e+02 7.03e+02 1.83e+03 3.97e+03 7.60e+03
m 500 1000 1500 2000 2500 3000
98
Prc EP (seg) MIII (seg)
1×8 32 575 45 578
8×1 34 626 51 547
2×4 35 694 37 482
4×2 31 570 33 466
1×9 497 539 46 560
9×1 498 559 53 543
3×3 493 508 33 417
m=n 512 1024 512 1024
99
Tabla 4.7: Tiempos de Ejecución Experimentales de EP
Prc Segundos
1 3122 50060 249612
2 1651 25029 128532
4 880 12782 64990
6 650 8717 43285
8 458 6644 36787
9 409 5989 32608
10 445 5454 26406
12 320 4729 22176
14 385 3890 20209
16 337 4372 19493
m 1000 2000 3000
Puede observarse en las tablas anteriores que en todos los casos de todos los
algoritmos hay una reducción sustancial de los tiempos de ejecución secuenciales
cuando se utiliza más de un procesadores, por lo que el paralelismo aplicado
a estos algoritmos altamente costosos del PIAVS cumple con el cometido de
disminuir los costos temporales para resolver el problema. Esta disminución de
costos se aprecia en las Figuras 4.1, 4.2, 4.3 y 4.4, donde también se contrastan
los tiempos de ejecución experimentales con los estimados teóricamente en la
sección anterior y se puede observar que los algoritmos se han comportado muy
similarmente a como se estimó.
100
100 700
Experimental Experimental
Teórico Teórico
90 FB, m=50 FB, m=70
600
80
60
400
50
300
40
30 200
20
100
10
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
18000 x 10
4
Experimental 9
Teórico Experimental
MI, m=2000 Teórico
16000 MI, m=3000
8
14000
7
Tiempos de ejecución de MI (segundos)
12000
6
10000
5
8000 4
6000 3
4000 2
2000 1
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
3500 x 10
4
Experimental 6
Teórico Experimental
EP, m=1000 Teórico
EP, m=2000
3000
5
Tiempos de ejecución de EP (segundos)
2500
Tiempos de ejecución de EP (segundos)
2000
1500
2
1000
1
500
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
101
18000 x 10
4
Experimental 9
Teórico Experimental
MIII, m=2000 Teórico
16000 MIII, m=3000
8
14000
7
10000
5
8000 4
6000 3
4000 2
2000 1
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
12 14
m=1000
m=50 m=2000
m=60 m=3000
m=70
12
10
10
8
Speedup de FB
Speedup de MI
4
4
2
2
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
102
14 14
m=1000 m=1000
m=2000 m=2000
m=3000 m=3000
12 12
10 10
Speedup de MIII
Speedup de EP
8 8
6 6
4 4
2 2
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
103
Tabla 4.10: Eficiencia Experimental de MI
Prc Aprovechamiento
1 100 % 100 % 100 %
1×2 77 % 91 % 98 %
2×2 77 % 88 % 93 %
2×3 68 % 80 % 89 %
2×4 56 % 73 % 82 %
3×3 65 % 78 % 86 %
2×5 45 % 64 % 76 %
3×4 51 % 69 % 79 %
2×7 36 % 58 % 68 %
4×4 45 % 65 % 76 %
m 1000 2000 3000
104
y 8 procesadores para los casos m = {50, 60, 70} (mF J = {5050, 7260, 9870};
MI tiene aprovechamientos de procesador aceptables con 6 y 9 procesadores
para los casos m = {2000, 3000}; MIII mejora un poco el comportamiento de
MI, logrando un 85 % para m = 1000 pero con 2 procesadores. En todos los
casos las mejores eficiencias se alcanzan con m = 3000 para MI,EP y MIII y
con m = 70 para FB.
Por último, se analiza la escalabilidad de los algoritmos paralelos, es decir, la
capacidad que tienen de mantener sus prestaciones haciendo crecer en la misma
proporción el número de procesadores y el tamaño del problema. Para analizar
la escalabilidad se calcula el Speedup escalado de los algoritmos. Como el costo
computacional secuencial de FB es O(m6 ), se han realizado experimentos en
Kefren con los siguientes tamaños de problema: m = {30, 33, 37, 40, 42, 43, 44,
45, 46, 47} correspondientes a Prc = {1, 2, 4, 6, 8, 9, 10, 12, 14, 16}. El costo
computacional secuencial de MI, EP y MIII es O(m4 ), entonces se han hecho
experimentos en Kefren con los tamaños de problema: m = {1000, 1189, 1414,
1565, 1681, 1732, 1861, 2000} que corresponden con Prc = {1, 2, 4, 6, 8, 9, 12,
16}. Los resultados están en la Figura 4.7.
8 12
FB MI
EP
MIII
7
10
6
8
SpeedUp Escalado
Speedup Escalado
4
3
2
2
1 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
4.4. Conclusiones
Muchas operaciones de los algoritmos FB, MI, EP y MIII han sido direc-
tamente paralelizadas utilizando rutinas eficientes y portables de PBLAS y
ScaLAPACK. Otras operaciones han sido diseñadas en este trabajo, cuidando
disminuir en lo posible las comunicaciones de datos entre procesadores y evi-
105
tando también en lo posible que los procesadores quedaran ociosos, de ahı́ que
en el diseño paralelo se haya decidido la réplica de estructuras de datos en los
procesadores.
Teóricamente los algoritmos disminuyen el tiempo de ejecución secuencial
y tienen buenas prestaciones asintóticas. La disminución de tiempos de ejecu-
ción se ha podido comprobar experimentalmente en el cluster Kefren: todos los
algoritmos disminuyen sustancialmente los tiempos secuenciales, con lo que se
cumple el objetivo de disminuir costos temporales para resolver el PIAVS; una
muestra de este resultado se da a continuación (con k = 1):
FB MI EP MIII
1.3 min 23 hrs 2.8 dı́as 1 dı́a
44 seg 11 hrs 1.4 dı́as 12 hrs
26 seg 6.2 hrs 18 hrs 6.1 hrs
18 seg 4.3 hrs 12 hrs 4.4 hrs
15 seg 3.5 hrs 10 hrs 3.6 hrs
13 seg 2.9 hrs 9 hrs 3 hrs
13 seg 3 hrs 7.3 hrs 3.1 hrs
11 seg 2.4 hrs 5.6 hrs 2.4 hrs
10 seg 2.4 hrs 5.6 hrs 2.4 hrs
9 seg 1.9 hrs 5.4 hrs 1.9 hrs
m = 50 m = 3000 m = 3000 m = 3000
106
12 14
FB MI
m=70 EP
mFJ=2870 MIII
12 m=3000
10
10
8
Speedup Experimental
Speedup Experimental
8
4
4
2
2
0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
Prc FB MI EP MIII
1 100 % 100 % 100 % 100 %
2 98 % 98 % 97 % 99 %
4 91 % 93 % 96 % 97 %
6 89 % 89 % 96 % 90 %
8 84 % 82 % 84 % 84 %
9 77 % 86 % 85 % 88 %
10 82 % 76 % 94 % 77 %
12 74 % 79 % 93 % 82 %
14 77 % 68 % 88 % 69 %
16 71 % 76 % 80 % 78 %
107
sin embargo es el que consume mayor tiempo de ejecución, como se ha podido
observar en las pruebas experimentales presentadas.
Por lo tanto, el algoritmo que mejor equilibra costos temporales y presta-
ciones es MI, mientras que FB es el algoritmo que menos flexibilidad ofrece al
PIAVS.
Todos estos algoritmos se han diseñado e implementado considerando que en
el PIAVS intervienen matrices Ai (i = 0, m) no estructuradas. Considerar ma-
trices estructuradas puede repercutir en beneficio de la complejidad de tiempo
de ejecución de los algoritmos y del requerimiento de almacenamiento, tópico
que se estudia en el siguiente capı́tulo.
108
Capı́tulo 5
109
de lado el uso de la rutina dgesvd de LAPACK (y pdgesvd de ScaLAPACK) para
calcula la svd de una matriz general y en su lugar diseñar una rutina eficiente
que calcule la svd de una matriz tipo Hankel, matriz que resulta de transformar
una matriz tipo Toeplitz.
La paralelización de MIE y EPE se desarrolla en la Sección 5.3, donde se
presenta el cuidado que se tiene en asegurar que los procesadores se mantengan
ociosos el mı́nimo de tiempo posible. En la Sección 5.4 se estima la complejidad
de tiempo de MIE paralelo y EP paralelo y se presenta un conjunto de experi-
mentos para analizar sus prestaciones. Los experimentos se han realizado en el
cluster Kefren sobre casos Toep2.
t0 0 0 ... 0
t1 t0 0 ... 0
T = t2 t1 t0 ... 0 (5.2)
.. .. .. .. ..
. . . . .
t(n−1) t(n−2) t(n−3) ... t0
110
es decir
T = toep t0 , t1 , t2 , ..., t(n−1) , [t0 , 0, 0, ..., 0] ,
que puede expresarse como:
0 0 ... 0 0 0 0 0 ... 0
1 0 ... 0 0 0 0 0 ... 0
T = t 0 I n + t1 0 1 ... 0 0 +t 1 0 0 ... 0 + ...
2
.. .. .. .. .. .. .. ..
. . 1 . . . 1 . . .
0 0 ... 1 0 0 0 1 ... 0
0 0 0 ... 0 0 0 0 ... 0
0 0 0 ... 0 0 0 0 ... 0
... + tn−2 0 0 0 ... 0 +t 0 0 0 ... 0 ,
n−1
.. .. .. .. .. .. .. .. ..
1 . . . . . . . . .
0 1 0 ... 0 1 0 0 ... 0
y
A0 = 0, A1 = G0 , A2 = G1 , A3 = G2 , ..., An = G(n−1) .
En el caso PIEVSns, (5.1) puede expresarse como:
donde
ti
t̃i = , para i = −(n − 1), −(n − 2), ..., 1, 2, ..., n − 2, n − 1
t0
111
y
Si∗
S̃i∗ = , para i = 1, n.
t0
T̃ en notación simplificada queda como
h i
T̃ = toep 1, t̃1 , t̃2 , ..., t̃ n−1 , t̃ n−1 +1 , ..., t̃n−2 , t̃n−1 ,
2 2
h i
1, t̃−1 , t̃−2 , ..., t̃−( n−1 +1) , t̃−( n−1 +2) , ..., t̃−(n−2) , t̃−(n−1) , (5.3)
2 2
n parámetros ci (i = 1, 2, ..., n)
n+1 matrices Ai (i = 0, 1, ..., n), donde
n×n es la dimensión de cada matriz
t̃ n−1 +1 , t̃ n−1 +2 , ..., t̃n−1 , t̃−( n−1 +2) , ..., t̃−(n−2) , t̃−(n−1) ,
2 2 2
⇓ ⇓ ... ⇓ ⇓ ... ⇓ ⇓
a1 , a2 , ..., a n−1 , a n−1 +1 , ..., an−3 , an−2 ,
2 2
112
es decir,
h i h i
T̃ = toep 1, 0, 0, ..., 0, a1, ..., a n−1 −1 , a n−1 , , 1, 0, 0, ..., 0, a n−1 +1 , ..., an−3 , an−2 +
2 2 2
+ t̃1 toep ([0, 1, 0, ..., 0, 0, ..., 0, 0] , 0n ) + t̃2 toep ([0, 0, 1, ..., 0, 0, ..., 0, 0] , 0n ) + ...+
+ t̃ n−1 toep ([0, 0, 0, ..., 1, 0, ..., 0, 0] , 0n ) + t̃−1 toep (0n , [0, 1, 0, ..., 0, 0, ..., 0, 0]) +
2
+t̃−2 toep (0n , [0, 0, 1, ..., 0, 0, ..., 0, 0])+...+t̃−( n−1 +1) toep (0n , [0, 0, 0, ..., 1, 0, ..., 0, 0]) .
2
T̃ = F0 + t̃1 F1 + t̃2 F2 + ... + t̃( n−1 ) F n−1 + t̃−1 F n−1 +1 + ... + t̃−( n−1 +1) Fn
2 2 2 2
c = [c1 , c2 , ..., c n−1 , c n−1 +1 , ..., cn ]t = [t̃1 , t̃2 , t n−1 , t−1 , ..., t−( n−1 +1) ]t
2 2 2 2
Algoritmo MI
P
1. Calcular A = A0 + i=1 ci Ai
2. Calcular [U, diag(S), V ] = svd(A)
3. Para k=1,2,...Mientras kS − S ∗ k2 > tol
a. Calcular J = [ui Aj vit ]i,j=1,n
b. Calcular b = [ui A0 vit − Si∗ ]i=i,n
c. Resolver Jc = b
P
d. Calcular A = A0 + ni=1 ci Ai
e. Calcular [U, diag(S), V ] = svd(A)
Algoritmo EP
1. Calcular Atr = [tr(Ati ∗ Aj )]i,j=1,n
2. Para k=1,2,...Mientras kS − S ∗ k2 > tol
Pn
a. Calcular A = A0 + i=1 ci Ai
b. Calcular [U, diag(S), V ] = svd(A)
c. Calcular btr = [tr(Ati (U diag(S ∗ )V t − A0 ))]i=1,n
d. cvieja = c
d. Resolver Atrc = btr
Hasta kc − cviejak2 < tol
113
y la complejidad de tiempo para un problema de tamaño n de los pasos que los
conforman se han estimado como:
TA (n) = 2n3 tf
TJ (n) = (2n4 + O(n3 ))tf
Tb (n) = (2n3 + O(n2 ))tf
TAtr (n) = (n4 + O(n3 ))tf
Tbtr (n) = (4n3 + O(n2 ))tf
Tsvd (n) = 38 3
3 n tf
TresoluciónDeSistema(n) = 23 n3 + O(n2 ) tf
114
5.2. Propuestas de Resoluciones Especı́ficas del
PIEVS
Con el objeto de resolver eficientemente el PIEVS, se ha adaptado el cálculo
de A, J, b, Atr, btr y svd de los algoritmos MI y EP para manejar matrices
tipo Toeplitz, las cuales se representan como se especifica a continuación. Una
matriz tipo Toeplitz de tamaño n × n se representa con un vector de tamaño
2n − 1, en este vector se almacena el primer renglón de la matriz tipo Toeplitz
(desde el último hasta el primer componente), seguido de la primera columna,
como en el siguiente diagrama:
Matriz Toeplitz General Representación Vectorial
2 − n t−(n−1)
.. ..
. .
t0 t−1 t−2 t−3 ... t−(n−1) −2 t−3
t1 t0 t−1 t−2 ... t−(n−2) −1 t−2
t2 t1 t0 t−1 ... t−(n−3) 0 t−1
t3 t2 t1 t0 ... t−(n−4) → 1 t0
. . . . .. . 2 t1
.. .. .. .. . ..
3 t2
t(n−1) t(n−2) t(n−3) t(n − 4) ... t0 4 t3
.. ..
. .
n t(n−1)
115
Matriz Toeplitz Especı́fica COLS (Representación vectorial)
0
0
0 1 0 0 ... 0
.
0 0 1 0 ... 0 ..
0 0 0 1 ... 0 i 0
Aj = 0 0 0 0 ... 0 → ..
.. .. .. .. .
..
. . . . . 1 j 2
0 0 0 0 ... 0 ..
.
0
PIAVS PIEVS
A0 1 matriz de tamaño 1 vector de tamaño
n×n 2n − 1
A1,2,...,n n matrices de tamaño 2 vectores de ı́ndices
n×n de tamaño n
Total dobles n3 + 2n2 4n − 4
Total enteros 2n
v1 0 v1 v2
v2 0 v2 v3
v3 v1 v3 v4
Ai v = A i . = . ; Aj v = A j . = .
.. .. .. ..
vn−1 vn−3 vn−1 vn
vn vn−2 vn−2 0
P
Bajo estas condiciones, calcular A = A0 + ni=1 ci Ai consiste en sustituir
las sumas y multiplicaciones involucradas originalmente por asignaciones de ci
en A, como se hace en el Algoritmo 40.
116
Algoritmo 40 CalculaAestucturado
1. A ← dcopy(2 ∗ n − 1, A0 )
2. j ← 1
3. Para i = 1, n
3.1. Si REN Si 6= 0 entonces
AREN Si ← cj
j ←j +1
4. Si j ≤ n entonces
4.1. Para i = 1, n
4.1.1. Si COLSi 6= 0 entonces
A2−COLSi ← cj
j ←j +1
Por otra parte, como A es una matriz tipo Toeplitz, se puede transformar
en una matriz tipo Hankel, H, permutando sus columnas con una matriz de
permutación R de la forma:
1
1
R= 1
.
..
1
es decir, H = AR ⇒ A = HRt . Partiendo de este hecho, para calcular la
descomposición en valores singulares de A, se obtiene la descomposición en
valores propios de H (aprovechando que H es tipo Hankel y, por lo tanto,
simétrica):
H = Q̃diag(L)Q̃t ,
donde Q̃ es ortogonal, L = {L1 , L2 , ..., Ln } es un conjunto de reales, con |L1 | ≥
|L2 | ≥ ... ≥ |Ln |. Si se expresa diag(L) como
diag(L) = signos(diag(L))|diag(L)| = G|diag(L)|,
con
signo(L1 )
signo(L2 )
G = signos(diag(L)) = ..
.
signo(Ln )
y
|L1 |
|L2 |
|diag(L)| = .. ,
.
|Ln |
117
entonces A = HRt queda como
A = Q̃G|diag(L)|Q̃t Rt = U diag(S)V t ,
H = QT Qt,
a1 b2
b2 a2 b3
b3 a3 b4
T = .. .. .. ;
. . .
bn−1 an−1 bn
bn an
H = QP LP t Qt ,
118
que construye la matriz de transformación Q, ambas de LAPACK (como en
el algoritmo Tridiag2). Estas implementaciones, que utilizan los vectores a y b
para representar la diagonal y subdiagonal de la matriz tridiagonal T , respecti-
vamente, son:
Algoritmo Tridiag1
1. Inicializa q1
2. Para j=1,m
a. r ← F F T (H, qj )
b. aj ← productoEscalar(qj , r)
c. r ← r − aj qj − bj−1 qj−1
d. r ← reortogonaliza(r, Q)
e. bj ← norma2(r)
f. qj+1 ← r/bj
Algoritmo Tridiag2
1. [a, b, T au, Ref lecHouse] ← dsytrd(H)
2. Q ← dorgtr(Ref lecHouse, T au)
119
bi = ui A0 vit − Si∗ = (QPi Gii ) A0 (RQPi ) − Si∗ =
= Q Pi Gii A0 R Q Pi −Si∗
| {z } | {z }
producto matriz-vector producto matriz-vector
| {z } | {z }
escalamiento de vector permutación de renglones de vector
| {z }
multiplicación FFT
| {z }
producto escalar
y
Tb (n) = 2n3 + n2 log2 n + O(n2 ),
120
n
X
btri = tr(Ati X) = Aij Xjt
j=1
| {z }
selección de un elemento del vectorXj
T (n)
3
MI (44/3)n + O(n) + k{2n4 + O(n3 )}
MIE log2 n n2 + O(n2 ) + k{(20/3)n3 + 2log2 n n2 + O(n2 )}
EP n4 + O(n3 ) + k{(46/3)n3 + O(n2 )}
EPE n + k{6n3 + log2 n n2 + O(n2 )}
es decir, MIE es de un orden menor que MI y EPE es dos órdenes menor que
EP en la operación más costosa localizada antes del ciclo (el cálculo de A tr ) y
la constante 46/3 de n3 de EP se reduce a 6 en EPE. La reducción del orden
de complejidad se puede comprobar experimentalmente, algunos resultados de
pruebas realizadas en el cluster Kefren se muestra en la Tabla 5.2, que corres-
ponden a los mismos casos de la Tabla 5.1.
121
700
MI
MIE
600
500
300
200
100
0
0 50 100 150 200 250 300 350 400 450 500
m
2000
EP
EPE
1800
1600
1400
Tiempo Experimental (segundos)
1200
1000
800
600
400
200
0
0 50 100 150 200 250 300 350 400 450 500
m
Figura 5.1: Tiempos de ejecución experimentales con algoritmos PIAVS vs PIEVS sobre los
mismos casis de prueba
122
ejecución y poder resolver el PIEVS para n de mayor tamaño.
a1 b2
b2 a2 b3
b3 a3 b4
RA = QT Qt = Q .. .. .. Qt ,
. . .
bn−1 an−1 bn
bn an
con esto los vectores a (diagonal de T ) y b (subdiagonal de T ) y la matriz
Q quedan replicados en los procesadores y listos para calcular en paralelo los
valores y vectores propios de T :
Para calcular los valores propios de T se hace uso nuevamente de las estruc-
turas de datos longi, low y up para que cada procesador se encargue de calcular
un subconjunto de valores propios. Por ejemplo, si Prc = 2 × 2 y n = 9, entonces
123
Después los valores propios se replican y se ordenan decrecientemente de
acuerdo a su valor absoluto (como se espera tener los valores singulares de A).
Por ejemplo, suponer que en el caso Prc = 2 × 2 y n = 9 los valores propios
quedan replicados en el siguiente orden:
|L5 | > |L3 | > |L1 | > |L8 | > |L2 | > |L7 | > |L4 | > |L9 | > |L6 | =
P rocesador0,0 P rocesador0,1
PS1 PS2 PS5 PS6 PS9 PS1 PS2 PS5 PS6 PS9
P L5 P L3 P L2 P L7 P L6 P L5 P L3 P L2 P L7 P L6
P rocesador1,0 P rocesador1,1
PS3 PS4 PS7 PS8 PS3 PS4 PS7 PS8
P L1 P L8 P L4 P L9 P L1 P L8 P L4 P L9
124
cuya distribución corresponde a una cı́clica por renglones de procesadores. Por
lo tanto, los pasos para calcular los valores y vectores propios de T están en el
Algoritmo 41, éstos se esquematizan para el ejemplo Prc = 2 × 2 y n = 9 como
sigue:
Algoritmo 41 ParaleloCalculaEigJb
1. Llow:up ← dstebz(longi, a, b)
2. L ← Replicar(L) /* Dispersión Todos a Todos */
3. S ← OrdenarPorValorAbsoluto(L)
4. P:,1:n/Pr ← dstein(n/Pc , S1:n/Pr , a, b)
5. Sgn ← sig(S)
6. S ← abs(S)
donde
125
P rocesador0,0 P rocesador0,1
QP:,1:3 = U:,1:3 QP:,4:5 = U:,4:5
P rocesador1,0 P rocesador1,1
QP:,6:7 = U:,6:7 QP:,8:9 = U:,8:9
P rocesador0,0 P rocesador0,1
PS1 PS2 PS3 PS4 PS5
P L5 P L3 P L1 P L8 P L2
P rocesador1,0 P rocesador1,1
PS6 PS7 PS8 PS9
P L7 P L4 P L9 P L6
En este caso, para calcular los valores y vectores propios de T se tiene el Algo-
ritmo 42, cuyo esquema para el ejemplo Prc = 2 × 2 y n = 9 es:
126
Algoritmo 42 ParaleloCalculaEigbtr
1. Llow:up ← dstebz(longi, a, b)
2. L ← Replicar(L) /* Dispersión Todos a Todos */
3. S ← OrdenarPorValorAbsoluto(L)
4. P:,low:up ← dstein(longi, Slow:up, a, b)
5. Sgn ← sig(S)
6. S ← abs(S)
Algoritmo 43 ParaleloCalculaSVD
1. [a, b, Q] ← Tridiag1(H)
2. [P, S, Signos] ← ParaleloCalculaEig(a, b)
127
Algoritmo 44 ParaleloCalculaJbEstructurado
1. Para i = 1,n/Pr
1.1. v ← dgemm(n, n, n, Q, Pi )
1.2. u ← reverso(v)
1.3. x ← multRapF ourier(n, n, ut, A0 )
1.4. v ← dscal(n, Sgni , v)
∗
1.5. bi ← Siglobal − ddot(n, x, v)
1.6. Para k=1,n/Pc
1.6.1. Si REN Skglobal 6= 0
xREN Skglobal :n ← v1:n−REN Skglobal
1.6.2. Si COLSkglobal 6= 0
x1:n−COLSkglobal ← vCOLSkglobal :n
1.6.3. Ji,k ← ddot(n, u, x)
Para calcular en paralelo el vector btr (de acuerdo a 5.8) se utiliza la distribu-
ción de P y Sgn dada por el Algoritmo 42, que permite, como se especificó en
párrafos anteriores, la distribución de la multiplicación matriz-matriz QP de la
ecuación (5.9) entre todos los procesadores, como se ve en el paso 1 del siguiente
esquema:
128
escalar V con Sgn y U con S ∗ (pasos 3 y 4 del esquema anterior). El siguiente
paso (paso 5) es hacer una réplica de U (QP S ∗ ) y V (QP Sgn) para proseguir
con el cálculo replicado de RQP S ∗ que se consigue con el reverso de U (paso
6) y con el cálculo distribuido de (RQP S ∗ )(QP Sgn)t = U V t en el paso 7 del
mismo esquema (con lo que se ha conseguido realizar la operación U S ∗ V t , donde
U y V denotan los vectores izquierdos y derechos de A, respectivamente). En el
paso 8 se replica U para calcular replicadamente la ecuación 5.9 (paso 9). Por
último, cada procesador calcula un subconjunto de elementos de btr , como en
el paso 10 del esquema anterior, los elementos de btr quedan distribuidos en los
procesadores. Este procedimiento es el de los Algoritmos 45 y 46.
129
Algoritmo 46 ParaleloCalculabtrEstructurado (parte 2/2)
9. /* aux ← U diag(S ∗ )V t − A0 */
9.1. Para i = n, n − 1, n − 2, ..., 1
Si (A0 (i) 6= 0)
ren ← i; col ← 1
Mientras (ren ≤ n) & (col ≤ n)
auxren,col ← Uren,col − A0i
ren ← ren + 1; col ← col + 1
9.2. ii ← 2
9.3. Para i = 0, −1, −2, ..., 2 − n
Si (A0i 6= 0)
col ← ii; ren ← 1
Mientras(col ≤ n) & (ren ≤ n)
auxren,col ← Uren,col − A0i
ren ← ren + 1; col ← col + 1
ii ← ii + 1
10. /* bT ri ← tr((U diag(S ∗ )V t − A0 )Ati ) */
10.1. i ← 1
10.2. Para ii = low, up
Si (REN Sii 6= 0)
ren ← REN Sii ; col ← 1
Mientras (col ≤ n) & (ren ≤ n)
bT ri = bT ri + auxren,col
ren ← ren + 1; col ← col + 1
i←i+1
10.3.i ← 1
10.4. Para ii = low, up
Si (COLSii 6= 0)
col ← COLSii ; ren ← 1
Mientras (col ≤ n) & (ren ≤ n)
bT ri ← bT ri + auxren,col
ren ← ren + 1; col ← col + 1
i←i+1
130
Algoritmo 47 ParaleloCalculaAtrEstructurado
1. j ← 1
2. Para i = 1,n/Prc
2.1. Si (REN Si 6= 0) Atrj = n − REN Si + 1
2.2. Si (COLS − i 6= 0) Atrj = Atrj + n − COLSi + 1
2.3. j ←j+1
Ası́, MIE paralelo y EPE paralelo están en los Algoritmos 48 y 49, respecti-
vamente.
Algoritmo 48 MIEParalelo
1. A ← CalculaAestructurado(A0 , ..., An , c) /* operación replicada */
2. [P, Q, diag(S), G] ← ParaleloCalculaSVD(AR)
3. error ← ParaleloCalculaError(S, S ∗)
4. Para k=1,2,...Mientras error > tol
4.1. [J, b] ← ParaleloCalculaJbEstructurado(P, Q, S ∗, G, A1 , ...An )
4.2. c ← pdgesv(J, b)
4.3. c ← pdgemr2d( Pnr , c) /* redistribuye c */
4.4. Si procesador 0 entonces /* envı́a para replicar c */
dgebs2d(0 All0 , n, c)
Sino /* recibe para replicar c */
c ← dgebr2d(0 All0 , n, c)
4.5. A ← CalculaAestructurado(A0, ..., An , c) /* operación replicada */
4.6. [P, Q, diag(S), G] ← ParaleloCalculaSVD(AR)
4.7. error ← ParaleloCalculaError(S, S ∗)
131
Algoritmo 49 EPEParalelo
1. Atr ← ParaleloCalculaAtrEstructurado(A1, A2 , ..., An )
2. Para k=1,2,...
2.1. A ← CalculaAestructurado(A0, ..., An , c) /* operación replicada */
2.2. [P, Q, diag(S), G] ← ParaleloCalculaSVD(AR)
2.3. btr ← ParaleloCalculabtrEstructurado(A0, ..., An , P, Q, S ∗ , G)
2.4. cvieja ← c
2.5. Para i = low, up
ci ← btri /Atri
2.6. Para i = 0, Prc − 1 /* replica c */
Si procesador i entonces /* envı́a */
dgebs2d(0 All0 , longi, clow:up)
Sino /* recibe */
c ← dgebr2d(0 All0 , longi, clow:up )
2.7 error ← ParaleloCalculaError(c, cvieja)
Hasta error < tol
132
MIE paralelo:
3 3
(Pr + Pc ) + k nlog2 Prc + (Pr + Pc ) + O(n)
2 2
EP paralelo: √ √
Prc n2 p Prc n
+O Prc n + k
2 2
EPE paralelo: p
kO Prc
y en los tiempos de transferencia:
MI paralelo:
√
14log2 Prc n2 2log2 Prc n3 p
2
√ +k √ +O Prc n
Prc Prc
MIE paralelo:
n n log2 Prc n2 n n
+ +k √ + +
Pc Pr 4 Prc Pc Pr
EP paralelo:
√
Prc n2 p 14log2 Prc n2 p
+O Prc n + k √ +O Prc n
4 Prc
EPE paralelo:
6n2 n
k √ +O √
Prc Prc
Con estos tiempos de ejecución se puede estimar la tendencia asintótica del
Speedup de los algoritmos, obteniéndose los siguientes resultados:
−1
T (n, 1) 3Prc 3Prc 7Pr
lim SM IE (n, Prc ) = lim ≈ = O(Pr )
n→∞ n→∞ T (n, Prc ) 14n3 tf 14n3 tf 3
−1
T (n, 1) Prc Prc
lim SEP E (n, Prc ) = lim = Prc ;
n→∞ n→∞ T (n, Prc ) 4n3 tf 4n3 tf
los Speedup de MIE y EPE indican que se tienen prestaciones óptimas para
valores grandes de n, pero en el caso de MIE el óptimo se alcanza cuando se
utilizan vectores columnas de procesadores, es decir mallas de la forma Prc =
Pr × 1, lo que no es de sorprender si se remite a la distribución adecuada de
los vectores propios de la matriz Hankel RA para calcular J y b (los pasos más
costosos de MIE) que consiste en una distribución cı́clica por renglones. Para
corroborar esta observación se han realizado algunas pruebas numéricas en el
cluster Kefren para n = 1500; los resultados que se han obtenido son:
133
Prc MIE (seg) EPE (seg)
1×4 27 14.69
4×1 15 14.69
2×2 19 14.68
1×8 23 10.61
8×1 10 10.61
2×4 15 10.60
4×2 12 10.61
134
Tabla 5.5: Tiempos de ejecución y Speedup experimentales de EPE paralelo
EPE n n
Prc 1000 1500 2000 2500 3000 1000 1500 2000 2500 3000
1 12 39 89 174 293 1 1 1 1 1
2 7.3 23 51 100 166 1.7 1.7 1.7 1.7 1.8
4 4.8 14 32 62 103 2.5 2.8 2.8 2.8 2.8
6 4.1 11 26 50 81 3.0 3.3 3.4 3.5 3.6
8 3.6 10 23 44 71 3.4 3.7 3.9 3.9 4.1
10 3.5 9.9 21 40 65 3.5 3.9 4.1 4.3 4.3
14 3.2 9.1 19 36 58 3.8 4.2 4.5 4.6 4.8
16 3.1 8.9 18 35 56 3.9 4.4 4.8 4.9 5.2
Tiempo (seg) SpeedUp
135
7 5.5
n=500 n=500
n=1000 n=1000
5
n=1500 n=1500
6 n=2000 n=2000
n=3000 n=3000
4.5
5 4
Speedup de EPE
Speedup de MIE
3.5
4
3
3 2.5
2
2
1.5
1 1
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
La eficiencia de MIE y EPE se han calculado en las Tablas 5.6 y 5.7, respec-
tivamente.
Para el PIEVS MIE es el algoritmo paralelo que mejor aprovecha los proce-
sadores que intervienen en su resolución, pues alcanza eficiencas aceptables (de
al menos 70 %) para 4 procesadores en todos los experimentos, mientras que
136
EPE lo hace también con 4 procesadores, pero a partir de n = 1500. A partir de
6 procesadores las mejores eficiencias empiezan a decrecer en ambos algoritmos.
La escalabilidad de los algoritmos se ha medido haciendo crecer en la misma
proporción el tamaño del problema y el número de procesadores. Consideran-
do que, en términos de orden superior, la complejidad de tiempo de MIE y
EPE es O(n3 ), se han realizado experimentos para n ={1000, 1259, 1582, 1817,
2000, 2154, 2410, 1519}, correspondientemente con Prc ={1, 2, 4, 6, 8, 10, 14,
16}. Gráficamente se oberva el Speedup escalado obtenido en la Figura 5.3. En
general, los algoritmos presentan baja escalabilidad.
7 5.5
EPE
MIE
5
6
4.5
5 4
Speedup Escalado
Speedup Escalado
3.5
4
3
3 2.5
2
2
1.5
1 1
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Procesadores Procesadores
5.5. Conclusiones
Se ha diseñado e implementado un algoritmo eficiente para el cálculo de la
descomposición en valores singulares (svd) de una matriz tipo Hankel, basado
en la multiplicación rápida de Fourier de una matriz Hankel por un vector. Este
algoritmo reduce considerablemente los costos computacionales de las rutinas
LAPACK y ScaLAPACK que calculan la svd de una matriz general, lo que
representa un aporte de este trabajo.
Con base en el algoritmo eficiente construido para la svd y en las caracterı́sti-
cas estructurales de las matrices que intervienen en el PIEVS se han construido
MIE y EPE, dos algoritmos que resuelven el PIEVS eficientemente, siendo éste
uno de los objetivos de este capı́tulo que se han alcanzado satisfactoriamente.
Se ha constatado que los algoritmos MI y EPE del PIAVS mejoran sustancial-
mente sus costos computacionales cuando se diseñan e implementan tomando
ventaja de la estructura de las matrices tipo Toeplitz del PIEVS, como se ha
mostrado en la complejidad de tiempo y experimentos numéricos de MIE y EPE,
constrastados con los obtenidos con MI y EP.
EL MIE y PIE también se han paralelizado. Los costos computacionales de
137
estos algoritmos paralelos se han reducido respecto de los correspondientes MI y
EP para el PIAVS. Con MIE y EPE paralelos se ha podido disminuir el tiempo
de ejecución secuencial para resolver el PIEVS.
Las prestaciones de los algoritmos paralelos MIE y EPE se han visto afec-
tadas escencialmente por dos causas: por una parte, el algoritmo secuencial
tomado como referencia para medir las prestaciones es altamente eficiente, por
lo que sus tiempos de ejecución son difı́ciles de mejorar sustancialmente cuando
se utiliza más de un procesador; por otra parte, aunque hay rutinas altamente
paralelizables, como es el caso del cálculo de J, b y btr, las prestaciones se ven
mermadas por las secciones de código que deben ejecutarse secuencialmente, ya
porque los tiempos secuenciales son altamente eficientes, ya por evitar comuni-
caciones entre procesadores. Sin embargo, al menos con 2 y 4 procesadores MIE
y EPE presentan prestaciones aceptables para problemas de tamaños grandes.
138
Capı́tulo 6
Algoritmos para la
Resolución del PIVSVP
139
y Mathias en [LM01], que también se ocupan de la construcción de una matriz
(Chu de una cuasitriangula superior, y Li y Mathias de una triangular inferior)
con valores singulares y valores propios prestablecidos y que cumplen las condi-
ciones de Weyl-Horn. Para los experimentos se han tomado casos de prueba del
tipo Bidiag sobre el cluster Kubrick.
Lema 1 Dos números reales Si∗ , Sj∗ > 0 tales que Si∗ ≥ 1 ≥ Sj∗ o Sj∗ ≥ 1 ≥ Si∗ ,
son los valores singulares de la matriz
" #
1 0
q .
(Si∗2 − 1)(1 − Sj∗2 ) Si∗ Sj∗
di ≥ 1 ≥ d j o bien dj ≥ 1 ≥ d i . (6.3)
140
Para garantizar que 6.3 se cumpla, Kosowski et.al. hacen uso del siguiente
lema:
Lema 2 Si los números reales S1∗ ≥ S2∗ ≥ ... ≥ Sn∗ > 0 satisfacen las condi-
ciones de Weyl, existe una permutación {d1 , d2 , ..., dn } de {S1∗ , S2∗ , ..., Sn∗ } tal
que
d1 d2 ...di−1 ≥ 1 ≥ di o di ≥ 1 ≥ d1 d2 ...di−1 (i = 2, n). (6.4)
(2) (2)
A(2) es equivalente a A(1) porque existen matrices unitarias U2×2 y V2×2
tales que
(2) (2) (2)t
L2×2 = U2×2 diag(d1 , d2 ) V2×2 .
Una vez que A(2) ha sido construida, empieza un proceso iterativo para
construir A(3) , A(4) , ..., A(n) . Por ejemplo, la construcción de A(3) se basa en la
(3)
descomposición en valores singulares (SVD) de la matriz L2×2 :
" #
(3) 1 0 (3)
L2×2 = p = U2×2 diag(d1 d2 , d3 ) V 2 × 2(3)t ;
2 2
(d1 d2 − 1)(1 − d23 ) d 1 d2 d3
(6.5)
(3) (3) (3) (2) (3)t
entonces A se puede expresar como A = Q A Z , donde
1 0 0 0 ... 0
(3) (3)
0 u11 u12 0 ... 0
0
(3)
u21
(3)
u22 0 ... 0 I1×1
Q(3)
(3)
= 0 0 0 1 ... 0 = U2×2 ,
. . . . .. . In−3×n−3
.. .. .. .. . ..
0 0 0 0 ... 1
141
1 0 0 0 ... 0
q
(d2i − 1)(1 − d2j ) d 1 d2 0 0 ... 0
0 0 d3 0 ... 0
A(2)
= 0 0 0 d4 ... 0 =
.. .. .. .. .. ..
. . . . . .
0 0 0 0 ... dn
(2)
B1×1
(2)
= C2×1 diag(d1 d2 , d3 ) ,
(2)
Dn−3×n−3
1 0 0 0 ... 0
(3) (3)
0 v11 v21 0 ... 0
0
(3)
v12 v22
(3)
0 ... 0 I1×1
Z (3)t
(3)t
= 0 0 0 1 ... 0 = V2×2 ;
. . . . .. . In−3×n−3
.. .. .. .. . ..
0 0 0 0 ... 1
entonces A(3) se expresa como
2 32
(2) 3
B I1×1
6 1×1
(3) (2) (3) (3)t
A(3)
76
=6
4 2×2 C2×1
U U2×2 diag(d1 d2 , d3 ) V2×2 5=
74 7
5
(2)
Dn−3×n−3 In−3×n−3
2 3
(2)
B1×1
(3) (3) (3)t
6 7
=6
4 U2×2 C22×1 U2×2 diag(d1 d2 , d3 )V2×2 7=
5
(2)
Dn−3×n−3
2 3
(2)
B1×1
(3) (2) (3)
6 7
=6
4 U2×2 C2×1 L2×2 7
5
(2)
Dn−3×n−3
El mismo procedimiento se sigue para calcular A(4) , A(5) , ..., A(n) . El resul-
tado final será la matriz triangular inferior unidad A(n) , cuyos valores singulares
son S ∗ y cuyos valores propios son L∗i = 1 (i = 1, n).
Si se definen los números pi y zi como:
1 0 ... 0
(3)
u11 z2 1 ... 0
(n−1) (4) (3) (4)
Bn−2×n−2 = u11 u21 z2 u11 z3 ... 0 , (6.8)
.. .. .. ..
. . . .
(n−1) (n−2) (3) (n−1) (n−2)
u11 u21 ...u21 z2 u11 u21 ...u(4) z3 ... 1
142
(n) (n−1) (3) (n) (n−1) (4) (n)
(n) (n−1) u11 u21 ...u21 z2 u11 u21 ...u21 z3 ... u11 zn−1
U2×2 C2×n−2 = (n) (n−1) (3) (n) (n−1) (4) (n) ,
u21 u21 ...u21 z2 u21 u21 ...u21 z3 ... u21 zn−1
(6.9)
(n) 1 0 1 0
L2×2 = = . (6.10)
zn pn zn 1
Para automatizar este proceso, denominado en este trabajo como método
MTriIU, en la siguiente sección se discute el Algoritmo secuencial correspondi-
ente y se proporcionan pruebas numéricas.
Algoritmo 50 Construyed
1. S ← ordenaMenorMayor(S ∗)
2. /* Localiza el ı́ndice k del mayor valor de S menor que 1 */
Para i = 1, n
Si (Si < 1)
k←i
3. /* Construye vector d que cumpla Lema 2 */
d1 ← Sk ; d2 ← Sk+1
aa ← Sk ; bb ← Sk+1
izq ← k − 1; der ← k + 2
k←3
Mientras (k ≤ n)
tempo ← aa ∗ bb
Si (tempo < 1)
dk ← Sder
der ← der + 1
Sino
dk ← Sizq
izq ← izq − 1
aa ← tempo
bb ← dk
k ←k+1
Ahora, de las ecuaciones (6.8), (6.9) y (6.10) es claro que A(n) puede constru-
irse con los componentes de la primera columna de las matrices U (i) (i = 3, n) y
143
con los valores de los vectores pi (i = 1, n) (ecuación 6.6), zi (i = 2, n) (ecuación
6.7) y di (i = 1, n) (algoritmo 50), donde U (i) es la matriz de vectores singulares
izquierdos de " #
(i) 1 0
L = , (6.11)
zi pi
por lo que A(n) puede construise directamente, sin necesidad de construir ex-
plı́citamente A(2) , A(3) ,...,A(n−1) . Entonces, una vez calculadas di (i = 1, n), el
siguiente paso para construir A(n) es calcular zi (i = 2, n) y U (i) (i = 3, n) con
el Algoritmo 51.
Algoritmo 51 CalculazU
1. p1 ← d1
2. Para i = 2, n
2.1. pi ← pi−1 di
3. z1 ← sqrt((p1 − 1)(1 − d2 )(p1 + 1)(1 + d2 ))
4. Para i = 3, n
4.1. zi−1 ←" sqrt((pi−1#− 1)(1 − di )(pi−1 + 1)(1 + di ))
1 0
4.2. L ←
zi−1 pi
4.3. [Q, S, V ] ← dgesvd(2, L)
4.4. Si (pi−1 < di )
dswap(Q:,1 , Q:,2 )
4.5. U:,i−2 ← Q:,1
1 2 ... n − 1
z = z2 z3 ... zn
1 2 ... n − 2
(3) (4) (n)
U= u11 u11 ... u11 1 ;
(3) (4) (n)
u21 u21 ... u21 2
con estos datos en el Algoritmo 52 se construye A ≡ A(n) , que es la matriz
triangular inferior unidad con valores singulares S ∗ .
Algoritmo 52 CalculaMatTriU
1. A ← In
2. Para i = 2, n − 1 /* Ai:i+1,1:i−1 ← U:,i−1 Ai,1:i−1 */
Ai:i+1,1:i−1 ← dgemm(2, i − 1, 1, U:,i−1 , Ai,1:i−1 )
3. Para i = 1, n − 1 /* Ai+1:n,i ← zi Ai+1:n,i */
Ai+1:n,i ← dscal(n − i, zi , Ai+1,i )
144
Por lo tanto, el proceso completo para calcular A está en el Algoritmo 53.
Algoritmo 53 MTriIU
1. d ← Construyed(S ∗ )
2. [z, U ] ← CalculazU(d)
3. A ←CalculaMatTriU(z, U )
(6)
con U (6) : ⇒ A6,1:6 = u11 1
(3)
con U (3) : A6,2 u21 ⇒ A6,1:6 = u(6) (5) (4) (3)
11 u21 u21 u21
(6) (5) (4)
u11 u21 u21
(6) (5)
u11 u21
(6)
u11 1
145
Las expresiones generales de este procedimiento son:
(i−2) (j)
Ai,i−2 = u21 ; Ai,j = Ai,j+1 u21 ; (i = n; j = i − 3, i − 2, ..., 1); (6.12)
(i−1) (j)
Ai,i−1 = u11 ; Ai,j = Ai,j+1 u21 ; (i = 2, n − 1; j = i − 2, i − 3, ..., 1). (6.13)
parejas (2,20) (3,19) (4,18) (5,17) (6,16) (7,15) (8,14) (9,13) (10,12) (11)
flops 36 38 38 38 38 38 38 38 38 19
donde las parejas se eligen tomando renglones extremos de modo que la cantidad
de flops a calcular sea aproximadamente igual para cada procesador. Formadas
las parejas, en este ejemplo a cada procesador le corresponde una pareja; el
resto de las parejas ((9,13), (10,12) y (11)) se distribuyen entre los procesadores,
quedando ren y contaRen con los siguientes valores:
146
P roc ren contaRen
0 2 20 9 3
1 3 19 13 3
2 4 18 10 3
3 5 17 12 3
4 6 16 11 3
5 7 15 2
6 8 14 2
Algoritmo 54 ParaleloCalculazU
1. p1 ← d1
2. Para i = 2, n
2.1. pi ← pi−1 di
3. Si procesador Prc
z1 ← sqrt((p1 − 1)(1 − d2 )(p1 + 1)(1 + d2 ))
4. Para i = low, up
4.1. zi−1 ←
" sqrt((pi−1#− 1)(1 − di )(pi−1 + 1)(1 + di ))
1 0
4.2. L ←
zi−1 pi
4.3. [Q, diag(S), V ] ← dgesvd(2, L)
4.4. Si (pi−1 < di )
dswap(Q:,1 , Q:,2 )
4.5. U:,i ← Q:,1
147
Algoritmo 55 ParaleloCalculaMatTriU
1. A ← In
2. Para k = 1, contaRenproc
2.1. i ← renproc,k
2.2. Si (i = n)
Ai,i−2 ← U2,i−2
Para j = i − 3, i − 4, i − 5, ..., 1
Ai,j ← Ai,j+1 U2,j
Ai,j+1 ← Ai,j+1 zj+1
Sino
Ai,i−1 ← U1,i−1
Para j = i − 2, i − 3, i − 4, ..., 1
Ai,j ← Ai,j+1 U2,j
Ai,j+1 ← Ai,j+1 zj+1
2.3. Ai,1 ← Ai,1 z1
148
Algoritmo 56 MTriIUParalelo
1. d ← Construyed(S ∗ ) /* operación replicada */
2. [z, U ] ← ParaleloCalculazU(d)
3. /* Dispersión Todos a Todos de un mensaje de longitud n−2 Prc + 1 para
n−2
replicar ll y de un mensaje de longitud 2 × Prc para replicar U */
Para i = 0, Prc − 1
Si procesador i /*enviar*/
dgebs2d(0 All0 , 2, n−2
Prc + 1, U )
dgebs2d(0 All0 , n−2
Prc , 1, ll)
Sino /*recibir*/
U ← dgebr2d(0 All0 , 2, n−2 Prc + 1, U )
0 0 n−2
ll ← dgebr2d( All , Prc , 1, ll)
4. A ← ParaleloCalculaMatTriU(ll, U )
5. /* Reducción TODOS a UNO de un mensaje de longitud
contaRen × max(renproc,: ) para construir A en el procesador P0 */
Si procesador NO 0
Para i = 1, contarenproc
N bytes ← max(N bytes, renproc,i − 1)
paquete ← M P I P ack(Aren(proc,i),1:ren(proc,i)−1 , renproc,i − 1)
M P I Send(paquete, N bytes, M P I P ACKED)
Sino
Para p = 1, Prc − 1
paquete ← M P I Recv(paquete, N bytes)
Para i = 1, contarenp
Aren(p,i),1:ren(p,i)−1 ← M P I U npack(paquete, renp,i − 1)
n2 322n 656 p n2 + 4n
TM T riIU (n, Prc ) = + + 2n − tf + 5 Prc tm + √ tv ,
Prc 3Prc 3Prc Prc
por lo que su Speedup no alcanza el óptimo asintóticamente, de acuerdo a la
siguiente expresión:
−1
T (n, 1) Prc Prc Prc
lim SM T riIU (n, Prc ) = lim = √ .
n→∞ n→∞ T (n, Prc ) n2 t f n2 t f 1+ Prc ttfv
149
Algunas muestras experimentales tomadas en el cluster Kefren ilustran este
comportamiento en la Tabla 6.2, donde es evidente que los tiempos de ejecución
no disminuyen al aumentar el número de procesadores.
n2 322n 656 p 6n
TM T riIU (n, Prc ) = + + 2n − tf + 4 Prc tm + √ tv ,
Prc 3Prc 3Prc Prc
que muestra que el grado de paralelismo logrado en el cálculo de U , z y A es
teóricamente bueno, ya que el Speedup alcanza el óptimo asintóticamente:
−1
T (n, 1) Prc Prc
lim SM T riIU (n, Prc ) = lim = Prc .
n→∞ n→∞ T (n, Prc ) n2 t f n2 t f
150
Tabla 6.3: Tiempos de Ejecución Experimentales de MTriIU en Kefren, SIN construı́r A en
P roc0
P Segundos
1 1.3 4.2 8.5 14 47 78 226 344
2 0.91 3.2 6.8 11 164 235 420 646
4 0.76 2.5 5.6 9.6 86 125 222 337
6 0.80 2.4 5.2 9.0 61 88 157 234
8 0.75 2.4 5.1 8.7 48 69 123 184
10 0.67 2.3 4.9 8.5 40 58 103 153
12 0.74 2.3 4.8 8.3 36 51 91 131
14 0.67 2.3 4.7 8.4 32 46 81 117
16 0.65 2.3 4.7 7.7 29 42 74 105
n 500 1000 1500 2000 2500 3000 4000 5000
Tabla 6.4: Speedup experimental de MTriIU en Kefren, sin construir A en P roc 0 , multiplicando
el número de procesadores por 2 y por 4
k P Speedup
2 2 1.19 1.27 1.20 1.19 1.89 1.88 1.89 1.91
4 1.01 1.07 1.1 1.1 1.79 1.81 1.8 1.83
8 1.15 1.04 1.08 1.13 1.66 1.64 1.66 1.75
4 2 1.21 1.37 1.32 1.30 3.38 3.40 3.41 3.51
4 1.16 1.12 1.19 1.24 2.98 2.97 3 3.2
n 500 1000 1500 2000 2500 3000 4000 5000
2.8
1.4
2.6
1.2 2.4
2.2
1
2
0.8
1.8
P=2
0.6 P=4 1.6
P=6
P=8 1.4
0.4
1.2
500 1000 1500 2000 2500 3000 3500 4000 4500 5000 500 1000 1500 2000 2500 3000 3500 4000 4500 5000
Tamaño del Problema (n) Tamaño del Problema (n)
151
Implementación en el Modelo de Memoria Compartida
152
Algoritmo 57 ParaleloShMTriIU
d ← Construyed(S ∗ ) /* ejecutado por hilo0 (hilo maestro) */
!$omp parallel private(hilo) /* hilo0 crea hilos esclavos hilo1 , ..., hiloH−1 */
[z, U ] ← ParaleloShzU(d)
!$omp barrier
A ← ParaleloShA(z, U )
!$omp end parallel /* esclavos finalizados por hilo hilo0 */
Algoritmo 58 ParaleloShzU
!$omp do /* Se distribuyen las iteraciones entre los hilos */
Para i = 3, n
zi−1 ← calcular z(p, d) /* de acuerdo con (6.7) */
L ← calcular L(zi−1 , pi ) /* de acuerdo con (6.11) */
[Q, diag(S), V ] ← dgesvd(2,L)
U1:2,i−2 ← Q:,1
!$omp enddo
Si hilo = hiloH−1 z1 ← calcular z(p, d)
153
Tabla 6.5: Tiempos de Ejecución Experimentales de MTriIU en Aldebarán, bajo el modelo de
Memoria Compartida
Hilos Segundos
1 1.3 4.9 10.1 22 26 37 68 95
2 1.0 3.1 6.1 12 14 20 35 48
3 0.64 2.1 4.3 9.0 10 14 23 31
4 0.55 1.6 3.4 7.4 7.1 10 18 23
6 0.45 1.1 2.7 5.0 3.2 9 16 18
8 0.44 1.1 2.6 4.3 5.5 8 13 17
10 0.33 1.2 2.3 3.7 4.8 7 10.3 16
12 0.35 1.0 2.6 3.7 4.6 6.1 10.2 13
14 0.32 0.9 2.2 3.3 4.2 6.0 9.8 11
16 0.25 0.8 2.1 3.2 4.1 5.4 9.6 10
n 500 1000 1500 2000 2500 3000 4000 5000
7 10
9
6
Speedup de WE, Memoria Compartida
5 7
6
4
5
3 4
n=500
n=1000 n=2500
3
n=1500 n=3000
2 n=4000
n=2000 2 n=5000
1 1
2 4 6 8 10 12 14 16 2 4 6 8 10 12 14 16
Numero de Hilos (H) Numero de Hilos (H)
154
Tabla 6.6: Eficiencia Experimental de MTriIU en Aldebarán. Modelo de Memoria Compartida
Hilos Aprovechamiento
2 66 % 81 % 83 % 91 % 92 % 92 % 97 % 98 %
3 70 % 78 % 78 % 81 % 87 % 88 % 98 % 98 %
4 61 % 76 % 74 % 92 % 91 % 92 % 94 % 95 %
6 50 % 74 % 62 % 73 % 69 % 68 % 71 % 88 %
8 38 % 56 % 49 % 64 % 59 % 58 % 65 % 69 %
10 41 % 41 % 44 % 59 % 54 % 53 % 66 % 59 %
12 32 % 41 % 34 % 49 % 47 % 50 % 55 % 61 %
14 30 % 36 % 36 % 47 % 44 % 44 % 49 % 63 %
16 34 % 35 % 30 % 43 % 39 % 43 % 44 % 59 %
n 500 1000 1500 2000 2500 3000 4000 5000
8
n=4000
7
n=3400
6
Speedup Escalado de WE,
Memoria Compartida
5
n=2800
3
n=2000
2
n=1400
1
n=1000
0
0 2 4 6 8 10 12 14 16
Numero de Hilos (H)
155
resolver el PIVSVP, mediante la construcción de una matriz bidiagonal con
con valores propios y valores singulares prestablecidos, los cuales satisfacen las
restricciones que establece el siguiente teorema.
Teorema 1 Dada una matriz An×n , con valores propios L1 , L2 , ..., Ln y valores
singulares S1 , S2 , ..., Sn , tales que
entonces
|L1 ||L2 |...|Li | ≤ S1 S2 ...Si (i = 1, n − 1) (6.15)
L∗1
c1 L∗2
A(c) = c2 L∗3 , (6.17)
.. ..
. .
cn−1 L∗n
quedando por calcular los parámetros c1 , c2 , ..., cn−1 tales que los valores sin-
gulares de A(c) sean S ∗ . Para ello, se define la matriz simétrica
L∗21 L∗1 c1
L∗1 c1 c21 + L∗2 2 L∗2 c2
T (c) = A(c)A(c)t = L∗2 c2 c + L∗2
2
3
.. ..
. .
L∗n−1 cn−1 c∗n−1 + L∗2
n
(6.18)
que se puede expresar como
T (c) = diag L∗2 ∗2 ∗2
1 , L2 , ..., Ln +
156
donde ei es el i−ésimo vector canónico (i = 1, n). Como T (c) se ha construido
de acuerdo a (6.18), los valores propios de T (c) son el cuadrado de los valores
singulares de A(c). Como se desea que A(c) tenga los valores singulares S ∗ ,
entonces se tiene el problema de calcular el vector c ∈ <n−1 tal que los valores
propios de T (c), denotados con Li (c) (i = 1, n), sean Si∗2 (i = 1, n). Para
resolver este problema se define el sistema de n − 1 ecuaciones no lineales con
n − 1 incógnitas F (c) = 0 de la forma
F (c) = [Fi (c)]i=1,n−1 = Li (c) − Si∗2 i=1,n−1 = 0. (6.20)
por lo que, resolver (6.20) es construir A(c) con los n valores singulares deseados
S∗.
Para resolver el sistema de ecuaciones no lineales (6.20) se utiliza el algoritmo
de Newton. Para ello, es necesario calcular la matriz Jacobiana de F (c), la que
está definida como
∂Fi (c) ∂Li (c)
J(c) = = . (6.21)
∂cj i,j=1,n−1 ∂cj i,j=1,n−1
Li = qit T qi (i = 1, n)
∂Li ∂ (qit T qi ) ∂q t ∂T ∂qi
⇒ = = i T qi + qit qi + qit T
∂cj ∂cj ∂cj ∂cj ∂cj
(i = 1, n; j = 1, n − 1). (6.22)
∂T (c)
Jij = qit qi (i, j = 1, n − 1), (6.23)
∂cj
157
lo que se justifica porque, al ser Q ortogonal, qit qi = 1 (i = 1, n), es decir
2 2 2
(qi )1 + (qi )2 + ... + (qi )n = 1
∂ (qi )1 ∂ (qi )2 ∂ (qi )n
⇒ 2 (qi )21 + 2 (qi )22 + ... + 2 (qi )2n =0
∂cj ∂cj ∂cj
∂ (qi )1 ∂ (qi )2 ∂ (qi )n t
⇒ ... [(qi )1 (qi )2 ... (qi )n ] = 0.
∂cj ∂cj ∂cj
t
∂qi
⇒ =0
∂cj ij=1,n−1
158
Algoritmo 60 MBidiag
1. Calcular T (c(0) ) y A(c(0) ) de acuerdo a (6.19) y (6.17)
2. Calcular la descomposición en valores propios de T (c(0) )
(0)
Q , diag(L(0) ) ← dsyev(T (c(0) ))
3. Calcular los valores singulares de A(c(0) )
diag(S (0) ) ← dgesvd(A(c(0) ))
4. Para k = 0,1,2,..., Mientras kS (k) − S ∗ k2 > tol
4.1. Calcular J (k) de acuerdo a (6.24)
4.2. Calcular F (k) de acuerdo a (6.20)
4.3. Resolver el sistema J (k) x(k) = −F (k)
x(k) ← dgesv(J (k) , −F (k) )
4.4. c(k+1) ← c(k) + x(k)
4.5. Calcular T (c(k+1) ) y A(c(k+1) ) de acuerdo a (6.19) y (6.17)
4.6. Calcular la descomposición en valores propios de T (c(k+1) )
(k+1)
Q , diag(L(k+1) ) ← dsyev(T (c(k+1) )
4.7. Calcular los valores singulares de A(c(k+1) )
diag(S (k+1) ) ← dgesvd(A(c(k+1) ))
159
(0)
Tabla 6.7: Resultados del caso Bidiag con MBidiag, para n = {4, 10, 25, 50, 100}, con c i =
c∗i + δ (i = 1, n)
n δ kS (0) − S ∗ k2 kL(0) − L∗ k2 k kS (k) − S ∗ k2 kL(k) − L∗ k2
4 1e-3 9e-4 0 3 3e-16 0
1e-2 9e-3 0 3 1e-14 0
1e-1 9e-2 0 5 8e-17 0
1e+0 1e+0 0 11 4e-14 0
1e+1 1e+1 0 13 5e-16 0
1e+2 1e+2 0 13 4e-16 0
10 1e-3 1e-3 0 3 4e-15 0
1e-2 1e-2 0 3 6e-15 0
1e-1 1e-1 0 4 4e-15 0
1e+0 2e+0 0 241 7e-15 0
1e+1 2e+1 0 713 2e-15 0
1e+2 2e+2 0 188 1e-14 0
25 1e-3 3e-3 0 3 1e-14 0
1e-2 3e-2 0 4 1e-14 0
1e-1 3e-1 0 13 1e-14 0
1e+0 3e+0 0 — — —
1e+1 3e+1 0 56 4e-13 0
1e+2 4e2 0 — — —
50 1e-3 4e-3 0 1106 4e-14 0
1e-2 4e-2 0 67 4e-14 0
1e-1 4e-1 0 — — —
1e+0 4e+0 0 — — —
1e+1 4e+1 0 6 3e-12 0
100 1e-3 6e-3 0 3 2e-13 0
1e-2 6e-2 0 3 1e-12 0
1e-1 6e-1 0 9 3e-13 0
1e+0 6e+0 0 — — —
1e+1 6e+1 0 3 1e-9 0
160
Tabla 6.8: Resultados del caso Bidiag con MBidiag, para n = {150, 200, 400, 500, 1000}, con
(0)
ci = c∗i + δ (i = 1, n)
n δ kS (0) − S ∗ k2 kL(0) − L∗ k2 k kS (k) − S ∗ k2 kL(k) − L∗ k2
150 1e-1 8e-1 0 7 7e-13 0
1e+0 8e+0 0 5 4e-11 0
1e+1 6e+1 0 3 1e-9 0
1e+2 8e+2 0 72 4e-9 0
200 1e-3 9e-3 0 1 1e-8 0
1e-2 9e-2 0 1 1e-8 0
1e-1 9e-1 0 2 1e-8 0
1e+0 9e+0 0 2 3e-8 0
1e+1 9e+1 0 4 5e-9 0
1e+2 9e+2 0 5 1e-8 0
400 1e-3 1e-2 0 1 4e-8 0
1e-2 1e-1 0 1 4e-8 0
1e-1 1e+0 0 2 4e-8 0
1e+0 1e+1 0 5 4e-8 0
1e+1 1e+2 0 3 4e-8 0
500 1e-3 1e-2 0 6 4e-8 0
1e-2 1e-1 0 3 4e-8 0
1e-1 1e+0 0 27 4e-8 0
1e+0 1e+1 0 18 4e-8 0
1e+1 1e+2 0 25 4e-8 0
1e+2 1e+3 0 4 2e-8 0
1000 1e-3 2e-2 0 1 3e-7 0
1e-2 2e-1 0 1 1e-7 0
1e-1 2e+0 0 2 1e-7 0
1e+0 2e+1 0 2 2e-7 0
1e+1 2e+2 0 3 1e-7 0
1e+2 2e+3 0 5 1e-7 0
kS − S ∗ k2
eaS = kS − S ∗ k2 , erS = ,
kS ∗ k2
kL − L∗ k2
eaL = kL − L∗ k2 , erL = ,
kL∗ k2
son los errores finales alcanzados por los algoritmos; S denota los valores sin-
gulares de las matrices construidas por los algoritmos y L denota los valores
propios de las mismas.
161
Tabla 6.9: Métodos de Chu v.s. Li-Mathias v.s. MBidiag
Los resultados de la Tabla 6.9 muestran que los tres métodos tienen el mis-
mo comportamiento con respecto a los valores singulares de las matrices que
construyen, sin embargo, la matriz construida por el método MBidiag siempre
tiene los valores propios deseados exactos, mientras que los otros métodos los
aproximan.
6.3. Conclusiones
El problema de la construcción de una matriz triangular inferior unidad con
valores singulares prestablecidos, visto en la Sección 6.1, es una muestra de
un problema cuya resolución se aborda más natural y convenientemente bajo
un esquema de memoria compartida. Esta conclusión se da a partir del estu-
dio y análisis de diversas implementaciones de sus correspondientes algoritmos
secuenciales y paralelos.
El código paralelo diseñado para el modelo de Memoria Distribuida alcanza
buenos niveles de paralelismo en cuanto a la fase de cómputo se refiere. Sin
embargo, una vez que la matriz A se ha calculado, ésta queda distribuida de
forma que es necesario reunir todos sus componentes en un sólo procesador;
las comunicaciones para realizar este paso merman las ganancias obtenidas del
código paralelo. Este problema puede tratarse si el mismo algoritmo se adapta
a un esquema de Memoria Compartida, donde las comunicaciones finales para
reunir A en un procesador no son necesarias. Más aún, las comunicacinoes nece-
sarias para replicar z y U en el modelo de Memoria Distribuida tampoco son
necesarias en el esquema de Memoria Compartida.
162
Una comparativa de los modelos de Memoria Distribuida y Memoria Com-
partida del algoritmo MTriIU para el PIVSVP se resumen en la siguiente tabla:
163
mismo orden de exactitud. Mientras que estos autores construyen matrices trian-
gulares, MBidiag construye una matriz que es aún más simple en estructura, ya
que construye una matriz bidiagonal, que tanto en el almacenamiento como en
los cálculos para manipularla es menos costosa que las triangulares.
Con los algoritmos MTriIU y MBidiag se dan los precedentes para la inves-
tigación de métodos que resuelven el PIVS y el PIVP simultáneamente.
164
Capı́tulo 7
Conclusiones y Perspectivas
165
tiempo y O(n3 ) en el espacio. Se han identificado dos tipos de algoritmos: los de
convergencia local y los de convergencia global. FB, MI y MIII se consideran de
convergencia local (a los que les lleva pocas iteraciones converger a una solución,
siempre que partan de una aproximación inicial cercana a la ésta), mientras que
EP se considera de convergencia global (al que le le lleva muchas iteraciones
converger a una solución, independientemente de la aproximación inicial dada).
De acuerdo a sus caracterı́sticas, MI ha sido el algoritmo más eficiente y FB el
menos. EP ha sido el algoritmo que ha demandado menos almacenaje que MI,
MIII y FB (el que es altamente costoso). Los resultados más importantes que se
han expuesto en este párrafo corresponden a los obtenidos del estudio teórico y
numérico de los algoritmos que se ha realizado en el Capı́tulo 3.
El diseño paralelo y la implementación de los algoritmos de los métodos
que resuelven el PIAVS son aportes de esta tesis y han derivado en rutinas
paralelas que han cumplido con el cometido de disminuir los tiempos de ejecución
secuenciales. Se ha detallado el diseño paralelo de cada método en el Capı́tulo 4.
En todos los diseños se ha tratado de evitar en lo posible la redistribución de
datos y de minimizar el tráfico de mensajes entre procesadores. Se han estimado
los tiempos de ejecución teóricos que han resultado ser buenas aproximaciones de
los tiempos que se han medido de los diversos experimentos que se han realizado,
de esta forma se ha podido analizar el comportamiento de los algoritmos en
situaciones hipotéticas.
En términos generales, MI y MIII han observado un comportamiento similar;
las prestaciones de los algoritmos paralelos correspondientes han sido suficien-
temente buenas desde el punto de vista del Speedup y la Eficiencia; ambos
pueden considerarse algoritmos paralelos con escalabilidad aceptable. El algo-
ritmo paralelo EP ha mejorado las prestaciones de MI y MIII cuando el número
de procesadores se ha incrementado y también ha presentado un mejor compor-
tamiento respecto de la escalabilidad. Por otra parte, FB ha requerido de intensa
redistribución de datos en el algoritmo paralelo correspondiente, lo que ha ido
en detrimento de sus prestaciones, sin embargo, el paralelismo da la posibilidad
de manejar problemas cuyo tamaño serı́a imposible de manejar secuencialmente.
Los algoritmos secuenciales y paralelos FB, MI, EP y MIII han sido diseñados
sin distinguir estructuras especiales de las matrices involucradas en el PIAVS;
sin embargo, se puede incidir en la mejora del tiempo de ejecución y de los
requerimientos de memoria al explotar las caracterı́sticas estructurales de las
matrices. En esta tesis se ha considerado la particularización de las matrices del
PIAVS en matrices tipo Toeplitz en el Capı́tulo 5, definiéndose ası́ el PIEVS.
Las caracterı́sticas estructurales de las matrices tipo Toeplitz, han dado lu-
gar al diseño e implementación de un algoritmo eficiente para el cálculo de los
valores singulares de una matriz tipo Hankel, basado en la FFT; de este modo,
como aporte en esta tesis se ha conseguido desarrollar un algoritmo de orden
166
O(n2 logn) que es de un orden de complejidad de tiempo menor que el orden
O(n3 ) correspondiente a la descomposición en valores singulares de una matriz
no estructurada. Sobre esta rutina eficiente descansa la adaptación de los algo-
ritmos MI y EP que se han rediseñando para aprovechar la estructura Toeplitz,
lo que ha dado lugar a los algoritmos MIE y EPE, cuya versión secuencial ha
resuelto el PIEVS eficientemente y ha disminuido los tiempos de ejecución de
MI y EP secuenciales, correspondientemente.
Se han desarrollado también algoritmos paralelos MIE y EPE que han lo-
grado el objetivo de disminuir los tiempos de ejecución secuenciales. Aunque las
prestaciones de estos algoritmos están por debajo de las de MI y EP paralelos, al
menos con 2 y 4 procesadores presentan prestaciones aceptables para problemas
de tamaño grandes.
Un problema que combina tanto el PIVP y el PIVS es el Problema Inverso
de Valores Singulares y Valores Propios (PIVSVP). Una primera aproximación
a la resolución del PIVSVP se ha dado en el Capı́tulo 6 de esta tesis a través
del algoritmo denominado MTriIU que resuelve un caso particular del PIVSVP.
MTriIU ha sido desarrollado por Kosowski y Smoktunowicz en [KA00]. Se han
propuesto dos algoritmos paralelos, uno diseñado bajo el modelo de memoria
distribuida y otro bajo el modelo de memoria compartida. Por la naturaleza
del algoritmo MTriIU, su paralelización ha resultado ser más adecuada bajo el
modelo de memoria compartida, logrando disminuir los tiempos de ejecución se-
cuenciales y obteniéndose un algoritmo con escalabilidad aceptable y con buenas
prestaciones con respecto a Speedup y Eficiencia.
Por último se ha desarrollado en esta tesis un método denominado MBi-
diag que, al igual que los presentados por Chu en [Chu00] y por Li y Mathi-
as en [LM01], construye una matriz con valores singulares y valores propios
prestablecidos y que, a diferencia de ellos, que construyen matrices cuasi trian-
gular superior y triangular inferior, respectivamente, construye matrices bidiag-
onales, lo que supone un bajo costo computacional. Resultados experimentales
han mostrado que el método MBidiag ha sido altamente robusto al dar solu-
ciones satisfactorias al PIVSVP, pudiendo equipararse a los algoritmos de Chu
y Li-Mathias.
Todos los algoritmos implementados en esta tesis han sido codificados en
Fortran y han utilizado rutinas portables y eficientes de bibliotecas de libre
distribución tales como: bibliotecas secuenciales del álgebra lineal numérica,
como BLAS y LAPACK; bibliotecas paralelas del álgebra lineal numérica, co-
mo PBLAS y ScaLAPACK; bibliotecas de comunicaciones a través de paso de
mensajes, como BLACS y el entorno MPI. Dado que se han implementado al-
goritmos bajo una arquitectura de memoria compartida, se ha hecho uso del
modelo de programación paralela OpenMP a través de directivas de compilador
de Fortran. El uso de estas herramientas software soportan las caracterı́sticas
167
de eficiencia y portabilidad de los algoritmos implementados.
Las arquitecturas de computadoras que han sido utilizadas en la imple-
mentación y experimentación de los algoritmos han sido multicomputadoras
de memoria distribuida, especı́ficamente clusters de PCs, ası́ como multiproce-
sadores de memoria compartida distribuida. Estas computadoras han sido para-
metrizadas con respecto a tiempo de flop, tiempo de latencia y ancho de banda
para estimar teóricamente el comportamiento temporal de los algoritmos, lo
que ha resultado en aproximaciones que han predicho suficientemente bien el
comportamiento experimental, de tal suerte que con este tipo de análisis se ha
podido prever el comportamiento de los algoritmos, identificando secciones de
baja productividad paralela, y ha permitiendo aplicar las medidas pertinentes
para mejorar los puntos débiles de los algoritmos siempre que ha sido posible.
A diferencia de los experimentos numéricos reportados hasta el momento en
la literatura (con tamaños de problemas del orden de O({100 , 101 })), en esta
tesis se han realizado experimentos con problemas de gran tamaño (del orden de
O({102 , 103 })), tanto secuencial como paralelamente, introduciendo matrices ra-
zonablemente grandes. Se han realizado experimentos numéricos con diferentes
tipos de matrices, desde matrices generales (sin estructura particular ni valores
especı́ficos) hasta matrices estructuradas como tipo Toeplitz y triangulares.
Por lo tanto, los objetivos propuestos en esta tesis han sido alcanzados.
Se han dado los primeros pasos para la resolución del Problema Inverso de
Valores Singulares mediante el diseño e implementación de algoritmos paralelos
eficientes y portables.
Perspectivas
Un trabajo inmediato que se desprende del presentado en esta tesis es el
diseño adecuado y la implementación bajo el modelo de memoria compartida
de los algoritmos que resuelven el PIAVS.
También puede realizarse un estudio de los métodos propuestos para el PI-
AVS para extenderlos al manejo de valores singulares replicados, S1∗ = S2∗ =
· · · = Sp∗ > Sp+1∗
· · · > Sn∗ ; valores singulares nulos, S1∗ > S2∗ > · · · > Sp∗ =
∗
Sp+1 = · · · = Sn∗ = 0; o al manejo de un subconjunto de valores singulares,
S1 > S2∗ > · · · > Sp∗ , con p < n.
∗
168
aproximaciones. Este constituye un problema abierto en esta tesis, el cual forma
parte del que llamaremos problema de globalización, cuya resolución consiste,
en términos generales, en desarrollar técnicas que permitan resolver el PIAVS
bajo cualesquiera condiciones (entre otras, partiendo de cualquier aproximación
inicial o partiendo de una de fácil cálculo y que garantice la convergencia del
algoritmo), obteniendo algoritmos que convergen bajo cualquier circunstancia,
contribuyendo ası́ a la robustez de los mismos.
Un tarea importante que queda por realizar es la implementación en el cluster
MareNostrum de todos los algoritmos diseñados en este trabajo, de modo que se
pueda tomar ventaja de las caracterı́sticas de alto rendimiento de este cluster.
Los resultados que de ello se obtengan, permitirán analizar el comportamiento
de los algoritmos y compararlos con los resultados de implementaciones en otros
clusters, como los reportados en este trabajo, para la mejora de las prestaciones
paralelas de algoritmos de alto costo computacional.
Publicaciones
El desarrollo de esta tesis ha sido soportado por el proyecto de investi-
gación Desarrollo y Optimización de Código Paralelo para Sistemas de Audio
3D (TIC2003-08238-C02-02), subvencionado por la Comisión Interministerial
de Ciencia y Tecnologı́a del 1 de Diciembre de 2003 al 30 de Noviembre del 2006.
Georgina Flores Becerra, Antonio M. Vidal Maciá. Parallel Global and Local
Convergent Algorithms for Solving the Inverse Additive Singular Value Problem.
4th WSEAS International Conference on Systems Theory and Scientific Com-
putation (ISTASC’ 04). Actas en CD. ISBN: 960-8547-06-8. Diciembre, 2004.
Puerto de la Cruz (España).
Publicación en: Wseas Transactions on Circuits and Systems (ISSN: 1109-2734).
Volumen: 3, Issue 10, pp 2241-2246. Diciembre, 2004.
169
D.A.Campo, F.J.Correa, G.Flores, A.M.Vidal. Parallel Global Convergent Algo-
rithms for solving the Inverse Additive Singular Value Problem. IADIS Interna-
tional Conference 2005. Proceedings of the Conference. Febrero, 2005. Algarve
(Portugal).
170
Bibliografı́a
[ABB+ 95] E. Anderson, Z. Bai, C. Bishof, Demmel J., and Dongarra J. LA-
PACK User Guide; Second edition. SIAM, 1995.
[BMX03] Zheng−jian Bai, Benedetta Morini, and Shu−fang Xu. The inter-
cept method for inverse singular value problems. 2003.
[Bro91] R.W. Brockett. Dynamical sustems that sort lists and solve
the linear programming problems. Proc. 27th IEEE Conf. De-
cision and Control and Linear Alg. Appl., -,146:799–803,79–91,
1988,1991.
[BV99] J.M. Badı́a and A.M. Vidal. Resolución paralela del problema in-
verso de los valores propios de matrices de toeplitz reales simétri-
cas. Technical Report DI01-04/99, Departamento de Informática,
Universidad Jaime I, 1999.
[CC96] Xuzhou Chen and Moody T. Chu. On the least squares solu-
tion of inverse eigenvalue problems. SIAM,Journal on Numerical
Analysis, 33(6), 1996.
[CCFV05] D.A. Campo, F.J. Correa, G. Flores, and A.M. Vidal. Parallel
global convergent algorithms for solving the inverse additive sin-
gular value problem. Proceedings of the IADIS International Con-
ference. Applied Computing, pages 49–56, 2005.
171
portable linear algebra library for distributed memory computers.
design issues and performance. 1995.
[Cor04] Intel Corporation. Intel (R) Math Kernel Library. Reference Ma-
nual. 2004.
[DS83] J.E. Dennis and R.B. Schnabel. Numerical Methods for Uncon-
strained Optimization and Nonlinear Equations. Prentice Hall,
1983.
172
[FBGV05] G. Flores-Becerra, V.M. Garcı́a, and A.M. Vidal. Numerical ex-
periments on the solution of the inverse additive singular value
problem. ICCS 2005: 5th International Conference. Proceedings,
Part I, pages 17–24, 2005.
[Giu02] Mauro Giudici. Some problems for the applicat of inverse tech-
niques to environmental modelling. IndAM Workshop, Inverse
Problems and Applications, 2002.
[GvL96] G.H. Golub and C.F. van Loan. Matrix computations. Johns
Hopkins University Press, 1996.
173
[Kel95] C. Kelley. Iterative Methods for Linear and Nonlinear Equations.
SIAM, 1995.
[Pol03] Tiziano Politi. A discrete approach for the inverse singular value
problem in some quadratic group. Workshop: Numerical Methods
for Structured System. International Conference on Computation-
al Science, 2003.
[TF03] S. M. Tan and Colin Fox. Inverse problems. lecture courses. De-
partment of Physics, The University of Auckland, 2003.
[VA01] A.M. Vidal and P.V. Alberti. Una implementación paralela de una
solución de mı́nimos cuadrados para el problema inverso aditivo
de valores propios. XII Jornadas de Paralelismo, 2001. Valen-
cia,España.
[VA02] A.M. Vidal and P.V. Alberti. Una aproximación paralela al pro-
blema inverso aditivo de valores propios. Métodos Numéricos en
Ingenierı́a V, SEMNI, 2002.
174