186
Universidad Politécnica de Valencia Departamento de Sistemas Informáticos y Computación Algoritmos Paralelos en Problemas de Control y Tratamiento de la Señal: Computación de los Valores Singulares del Producto de dos Matrices y sus Aplicaciones. Tesis Doctoral presentada por Manuel Mollar Villanueva Dirigida por D. Vicente Hernández García Valencia, 2003

Algoritmos Paralelos en Problemas de Control y … · Algoritmos Paralelos en Problemas de Control y Tratamiento de la ... - Using the paradigm of shared memory ... Importancia de

Embed Size (px)

Citation preview

Universidad Politécnica de Valencia

Departamento de Sistemas Informáticos y Computación

Algoritmos Paralelos en Problemas de

Control y Tratamiento de la Señal:

Computación de los Valores Singulares del

Producto de dos Matrices y sus

Aplicaciones.

Tesis Doctoral presentada por Manuel Mollar Villanueva

Dirigida por D. Vicente Hernández García

Valencia, 2003

Abstract.

The Singular Value Decomposition (SVD) of a matrix and their generalizations are importanttools in the solution of problems of control and signal processing.

Within the line drawn up by the Group of Parallel Computation of the UPV, the problem isframed within the study of model reduction. Of some of the methods used in model reduction, as it isexplained in chapter 4, one of the computation stages consists of the determination of the singularvalues of the product of two matrices (PSVD).

The intention of the present work is to expose the concepts related to the computation of thesingular values of the product of two matrices and to develop parallel algorithms in differentarchitectures to solve this problem.

Concretely, we will study three different algorithms:

- the implicit Kogbetliantz method,- the Golub, Sφlna and Van Dooren method,- and the Dmrac method.

Also, we will develop programs for the computation of the PSVD:

- Using the paradigm of shared memory programming (compiler with parallelizationcapabilities) for the Kogbetliantz method, in two multiprocessors with shared memory,Alliant FX/80 and Silicone Power Challenge,

- Using the message passing paradigm at low level (PVM) for the Kogbetliantz method inshared memory multiprocessor systems, as well as in distributed memory ones, following:

- one transputer network,- the Meiko multicomputer,- a PC cluster,- the mentioned multiprocessor Power Challenge.

- Using the paradigm of message passage (ScalaPACK on MPI) for all the methods in the PCcluster and in shared memory multiprocessor machines.

We will make temporary tests of the programs, and comparing them in order to obtainconclusions about the proposed parallel algorithms.

Therefore, the objective of this thesis is double:

- Experimentation and evaluation of different parallel architectures and different parallelprogramming paradigms.

- Development of parallel algorithms for the computation of the singular value decomposition ofthe product of two matrices.

Resumen.

La descomposición en valores singulares de una matriz y sus generalizaciones son herramientasimportantes en la solución de problemas de control y de tratamiento de la señal.

Dentro de la línea trazada por el Grupo de Computación Paralela de la UPV, el problema seenmarca dentro del estudio de la reducción de modelos. En algunos de los métodos empleados en lareducción de modelos, como se explica en el capítulo 4, una de las etapas de cálculo consiste en ladeterminación de los valores singulares del producto de dos matrices (PSVD).

El propósito del presente trabajo es exponer de forma clara los conceptos relacionados con lacomputación de los valores singulares del producto de dos matrices y desarrollar algoritmos paralelosen distintas arquitecturas para resolver dicho problema.

Concretamente, estudiaremos tres algoritmos diferentes:

- el método de Kogbetliantz implícito,- el de Golub, Sφlna y Van Dooren,- y el de Dmrac.

Así mismo, desarrollaremos programas para el cálculo de la PSVD:

- Usando el paradigma de programación en memoria compartida (compilador paralelizante) parael método de Kogbetliantz, en dos multiprocesadores con memoria compartida, AlliantFX/80 y Silicon Power Challenge,

- Usando el paradigma de paso de mensajes a bajo nivel (PVM) para el método de Kogbetliantzen los sistemas multiprocesador, tanto de memoria compartida como distribuida,siguientes:

- una red de transputers,- el multicomputador Meiko,- un cluster de PCs,- el citado multiprocesador Power Challenge.

- Usando el paradigma de paso de mensajes (ScalaPACK sobre MPI) para todos los métodos enel cluster de PCs y en máquinas multiprocesador con memoria compartida.

Realizaremos pruebas temporales de los programas, comparándolas entre sí a fin de obtenerconclusiones acerca de los algoritmos paralelos propuestos.

Así pues, el objetivo de esta tesis es doble:

- Experimentación y evaluación de distintas arquitecturas paralelas y diferentes paradigmas deprogramación paralela.

- Desarrollo de algoritmos paralelos para la computación de la descomposición en valoressingulares del producto de dos matrices.

Resum.

La descomposició en valors singulars d'una matriu i les seves generalitzacions són einesimportants en la solució de problemes de control i de tractament del senyal.

Dintre de la línia traçada pel grup de Computació Paral·lela de la UPV, el problema s'emmarcadintre del estudi de la reducció de models. En alguns dels mètodes emprats en la reducció de models,com s'explica en el capítol 4, una de les etapes de càlcul consisteix en la determinació dels valorssingulars del producte de dues matrius (PSVD).

El propòsit de aquesta tesi és exposar de forma clara els conceptes relacionats amb lacomputació dels valors singulars del producte de dues matrius i desenvolupar algorismes paral·lels endistintes arquitectures per a resoldre l'anomenat problema.

Concretament, estudiarem tres algorismes diferents:

- el mètode de Kogbetliantz implícit,- el de Golub, Sφlna i Van Dooren,- i el de Dmrac.

Així mateix, desenvoluparem programes per al càlcul de la PSVD:

- Usant el paradigma de programació en memòria compartida (compilador paral·lelizant) per almètode de Kogbetliantz, en dos multiprocessadors amb memòria compartida, AlliantFX/80 i Silicon Power Challenge,

- Usant el paradigma de passada de missatges a baix nivell (PVM) per al mètode deKogbetliantz en els sistemes multiprocessadors, tant de memòria compartida comdistribuïda, següents:

- una xarxa de transputers,- el multicomputador Meiko,- un cluster de PCs,- el citat multiprocesador Power Challenge.

- Usant el paradigma de passada de missatges (ScalaPACK sobre MPI) per a tots els mètodesen el cluster de PCs i en màquines multiprocessador amb memòria compartida.

Realitzarem proves temporals dels programes, comparant-les entre si a fi d'obtenir conclusionssobre els algorismes paral·lels proposats.

Així doncs, l'objectiu d'aquesta tesi és doble:

- Experimentació i avaluació de distintes arquitectures paral·leles i diferents paradigmes deprogramació paral·lela.

- Desenvolupament d'algorismes paral·lels per a la computació de la descomposició en valorssingulars del producte de dues matrius.

Contenido

1. Introducción y objetivos. 11.1. Introducción. 11.2. Objetivos. 11.3. Estado del arte. 21.4. Estructura de esta tesis. 3

2. Valores Singulares de una Matriz y del Producto de dos Matrices. 42.1. Valores singulares de una matriz. 42.2. Valores singulares generalizados. 42.3. La descomposición producto y la descomposición cociente. 62.4. Un modelo general. 6

3. Reducción de modelos. 83.1. El problema de reducción de modelos. 8

3.1.1. Planteamiento del problema. 83.1.2. Importancia de la reducción de modelos. 8

3.2. Métodos utilizados para la reducción de modelos. 93.3. Realizaciones balanceadas. 10

3.3.1. Sistemas en lazo abierto. 113.3.2. Sistemas en lazo cerrado. 16

3.4. Método de Schur. 193.5. Conclusiones. 21

4. Arquitecturas y Modelos de Programación. 224.1. Computación de altas prestaciones. 22

4.1.1. Clasificación de las arquitecturas. 224.1.2. Metodologías de programación. 254.1.3. Prestaciones de los algoritmos paralelos. 26

4.2. Multicomputadores. 264.2.1. Distribución de datos. 274.2.2. Comunicaciones. 284.2.3. Librerías de comunicaciones PVM y MPI. 304.2.4. Núcleos computacionales paralelos (ScaLAPACK). 32

4.2.4.1. BLAS. 334.2.4.2. LAPACK. 344.2.4.3. BLACS. 344.2.4.4. PBLAS. 34

4.3. Computadores paralelos. 344.3.1. Alliant FX/80. 34

4.3.1.1. Descripción de la arquitectura. 344.3.1.2. Entorno de programación. 35

4.3.2. SGI Power Challenge. 374.3.2.1. Descripción de la arquitectura. 374.3.2.2. Entorno de programación. 38

4.3.3. Red de transputers. 384.3.4. MEIKO CS2. 394.3.6. Cluster de PCs. 40

4.5. Conclusiones. 405. Computación de la SVD. 42

5.1. Algoritmos fundamentales. 425.1.1. Notación algorítmica. 425.1.2. El método de Kogbetliantz. 425.1.3. El método de Golub y Reinsch. 44

i

5.1.4. El método de Demmel y Kahan. 485.1.5. El paralelismo en los métodos expuestos. 49

5.2. Implementación del método de Kogbetliantz. 505.2.1. Preliminares. 505.2.2. Resultados experimentales del algoritmo secuencial. 515.2.3. Algoritmo secuencial por bloques. 51

5.2.3.1. Algortimo por bloques trapezoidales. 515.2.4. Algoritmos paralelos. 53

5.2.4.1. Estudio del paralelismo en el algoritmo secuencial. 535.2.4.2. Algoritmo paralelo basado en el orden par-impar. 535.2.4.3. Algoritmo paralelo por bloques de filas. 555.2.4.4. Resultados experimentales. 61

5.3. Conclusiones 646. Computación de la PSVD. 65

6.1. Método de Kogbetliantz. 656.1.1. Algoritmo secuencial. 65

6.1.1.1. Resultados experimentales del algoritmo secuencial. 686.1.1.2. Estudio del paralelismo en el algoritmo secuencial. 69

6.1.2. Computación paralela en el modelo de memoria compartida. 696.1.2.1. Algoritmo paralelo basado en el orden par-impar. 69

6.1.2.1.1. Algoritmo paralelo. 696.1.2.1.2. Distribución de los datos y balance de carga. 716.1.2.1.3. Resultados experimentales en el Alliant y conclusiones. 726.1.2.1.4. Resultados experimentales en el Power Challenge y conclusiones. 75

6.1.2.2. Algoritmo paralelo por bloques (par-impar). 806.1.2.2.1. Criterios Básicos. 806.1.2.2.2. Algoritmo por bloques. 806.1.2.2.3. Refinamiento. 846.1.2.2.4. Resultados experimentales en el Alliant y conclusiones. 866.1.2.2.5. Resultados experimentales en el Power Challenge y conclusiones. 89

6.1.2.3. Conclusiones. 936.1.3. Computación paralela mediante paso de mensajes. 117

6.1.3.1. Distribución de los datos. 1176.1.3.2. Algoritmo paralelo. 118

6.1.3.2.1. Esquema seq-sr. 1206.1.3.2.2. Esquema alt-sr. 1236.1.3.2.3. Esquema mul-sr. 1236.1.3.2.4. Test de convergencia. 124

6.1.3.3. Detalles de implementación. 1256.1.3.4. Resultados experimentales en el transputer y conclusiones. 1266.1.3.5. Resultados experimentales en la Meiko y conclusiones. 1276.1.3.6. Resultados experimentales en el Power Challenge y conclusiones. 1276.1.3.7. Resultados experimentales en el Cluster de PCs y conclusiones. 1386.1.3.8. Conclusiones. 148

6.1.4. Conclusiones. 1496.2. Método de Golub, Sφlna y Van Dooren. 149

6.2.1. Algoritmo secuencial. 1506.2.2. Algoritmo paralelo con ScaLAPACK. 1516.2.3. Resultados experimentales. 152

6.2.3.1. Resultados experimentales en el Power Challenge y conclusiones. 1526.2.3.2. Resultados experimentales en el Cluster de PCs y conclusiones. 155

6.2.4. Conclusiones. 159

ii

6.3. Método de Drmac. 1596.3.1. Algoritmo secuencial. 1596.3.2. Algoritmo paralelo con ScaLAPACK. 1606.3.3. Resultados experimentales. 161

6.3.3.1. Resultados experimentales en el Power Challenge y conclusiones. 1616.3.3.2. Resultados experimentales en el Cluster de PCs y conclusiones. 163

6.3.4. Conclusiones. 1676.4. Comparación de los métodos. 167

7. Conclusiones y líneas futuras. 1688. Bibliografía. 170

Referencia de Tablas

1. Resultados del algoritmo SVD secuencial. 512. Resultados del algoritmo SVD por bloques. 523. SVD: Tiempos de ejecución del alg. paralelo. 614. SVD: MFlops del algoritmo paralelo. 625. SVD: Speed up respecto al algoritmo por bloques. 626. SVD: Speed up respecto al algoritmo secuencial. 627. PSVD: Tiempos de ejecución del algoritmo kogbetliantz secuencial en varias arquitecturas. 688. Alliant: Barridos y tiempos de ejecución del algoritmo secuencial. 729. Alliant: Prestaciones del algoritmo par-impar. 7410. Alliant: Incremento de velocidad del alg. de orden par-impar. 7411. Alliant: Eficiencia del alg. de orden par-impar. 7412, 13 y 14. SG: Prestaciones, Incremento de velocidad y Eficiencia del algoritmo par-impar (t). 9415, 16 y 17. SG: Prestaciones, Incremento de velocidad y Eficiencia del algoritmo par-impar (to). 9418, 19 y 20. SG: Prestaciones, Incremento de velocidad y Eficiencia del algoritmo par-impar (m). 9521, 22 y 23. SG: Prestaciones, Incremento de velocidad y Eficiencia del algoritmo par-impar (mo). 9624, 25 y 26. SG: Prestaciones, Incremento de velocidad y Eficiencia del algoritmo par-impar (mv). 9727, 28 y 29. SG: Prestaciones, Incremento de velocidad y Eficiencia del algoritmo par-impar (mvo). 9730, 31,32 y 33. Alliant: Prestaciones, Incr. de vel. y Ef. del algoritmo por bloques rect.. 9934, 35, 36 y 37. Alliant: Prestaciones, Incr. de vel. y Ef. del algoritmo por bloques cuad.. 10138, 39, 40 y 41. SG: Prest., Incr. de vel. y Ef. del algoritmo par-impar por bloques rect. (t). 10342, 43, 44 y 45. SG: Prest., Incr. de vel. y Ef. del algoritmo par-impar por bloques rect. (to). 10546, 47, 48 y 49. SG: Prest., Incr. de vel. y Ef. del algoritmo par-impar por bloques rect. (m). 10750, 51, 52 y 53. SG: Prest., Incr. de vel. y Ef. del algoritmo par-impar por bloques rect. (mo). 10955, 55, 56 y 57. SG: Prest., Incr. de vel. y Ef. del algoritmo par-impar por bloques rect. (mvo). 11158, 59, 60 y 61. SG: Prest., Incr. de vel. y Ef. del algoritmo par-impar por bloques cuad. (mo). 11362, 63, 64 y 65. SG: Prest., Incr. de vel. y Ef. del algoritmo par-impar por bloques cuad. (mvo). 11566. PSVD: Costes de las comunicaciones con envío bloqueante. 12367. PSVD: Costes de las comunicaciones con envío no bloqueante. 124Tabla 123: Barridos del algoritmo seq-sr. 12669, 70, 71, y 72. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. seq-sr. 12873, 74, 75, y 76. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. mul-sr. 13177, 78, 79, y 80. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. seq-sr-v. 13381, 82, 83, y 84. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. mul-sr-v. 13685, 86, 87, y 88. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. seq-sr. 13989, 90, 91, y 92. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. mul-sr. 14193, 94, 95, y 96. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. seq-sr-v. 14497, 98, 99, y 100. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. mul-sr-v. 146101, 102, 103, y 104. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. de Golub. 153

iii

105, 106, 107, y 108. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. de Golub. 156109, 110 y 111. Cluster: Escalabilidad del algoritmo de Golub. 158112, 113, 114 y 115. SG: Tiempos Prestaciones, Incr. de vel. y Eficiencia del alg. de Drmac. 161116, 117, 118 y 119. SG: Tiempos Prestaciones, Incr. de vel. y Eficiencia del alg. de Drmac. 164120, 121 y 122. Cluster: Escalabilidad del algoritmo de Drmac. 166

Referencia de Figuras

1. Esquema de un multiprocesador con memoria compartida. 242. Esquema de un multiprocesador con memoria distribuida. 253. Distribución toroidal. 284. Redes de interconexión. 295. Jerarquía software de ScaLAPACK. 336. Esquema de la arquitectura del Alliant FX/80. 357. SVD: Distribución por bloques trapezoidales. 518. SVD: MFlops de los algoritmos secuenciales (clásico y bloques). 539. SVD: Distribución de la matriz entre procesadores 5510. SVD: Actuación de los procesadores. 5611. SVD: Aplicación distribuida de las rotaciones, fase primera. 5712. SVD: Aplicación distribuida de las rotaciones, fase segunda. 5813,14. SVD: Speed up respecto alg. bloques. 6315,16. SVD: Speed up respecto alg. secuencial. 6317. Tiempos PSVD kogbetliantz secuencial frente a barridos*n². 6918. Filas/columnas implicadas en el cálculo de las rotaciones. 7019. Planificación del alg. par-impar para n=12 y p=3. 7020. Planificación del alg. par-impar para n=15 y p=3. 7121. Tiempos y MFlops del algoritmo secuencial. 7322, 23 y 24. Alliant: Prestaciones e incremento de velocidad del algoritmo par-impar. 7525, 26, 27, 28, 29 y 30. SG: Prestaciones, speed up y eficiencia del alg. par-impar (t y to). 7631, 32, 33, 34, 35 y 36. SG: Prestaciones, speed up y eficiencia del alg. par-impar (m y mo). 7837, 38, 39, 40, 41 y 42. SG: Prestaci., speed up y eficiencia del alg. par-impar (mv y mvo). 7943. Distribución de los accesos por bloques en el alg. par-impar. 8144, 45, 46, 47, 48 y 49. Alliant: MFlops del algoritmo por bloques rectangulares. 8650, 51 y 52. Alliant: Prestaciones, speed up y eficiencia del algoritmo por bloques rectangulares. 8753, 54, 55, 56, 57 y 58. Alliant: MFlops del algoritmo por bloques cuadrados. 8859, 60 y 61. Alliant: Prestaciones, speed up y eficiencia del algoritmo por bloques cuadrados. 8962, 63, 64, 65, 66 y 67. SG: Prest., speed up y ef. del alg. par-impar por bloques rect. (t y to). 9068, 69, 70, 71, 72 y 73. SG: Prest., speed up y ef. del alg. par-impar por bloques rect. (m y mo). 9174, 75 y 76. SG: Prest., speed up y ef. del alg. par-impar por bloques rectangulares (mvo). 9277, 78, 79, 80, 81 y 82. SG: Prest., speed up y ef. del alg. par-impar por bloques cuad. (m y mo). 9383: PSVD con paso de emnsajes: Distribución de las matrices. 11784: Alg par-impar con pase de mensajes: Distribución de operaciones en el orden par-impar. 11885: Algoritmo seq-sr: Distribución de operaciones en el orden propuesto. 11886. Alg seq-sr: Aplicación de la rotaciones en el cálculo distribuido, fase primera. 12087. Alg seq-sr: Aplicación de la rotaciones en el cálculo distribuido, fase segunda. 12088. Alg seq-sr: Aplicación de la rotaciones implementada en el cálculo distribuido, fase segunda. 12289, y 90. Transputer: Eficiencia de los algoritmos seq-sr.y alt-sr. 12791, y 92. Meiko: Eficiencia de los algoritmos seq-sr.y alt-sr. 12793, 94, 95, y 96. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. seq-sr. 13097, 98, 99, y 100. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. mul-sr. 133101, 102, 103, y 104. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. seq-sr-v. 135

iv

105, 106, 107, y 108. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. mul-sr-v. 138109, 110, 111, y 112. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. seq-sr. 141113, 114, 115, y 116. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. mul-sr. 143117, 118, 119, y 120. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. seq-sr-v. 146121, 122, 123, y 124. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. mul-sr-v. 148125, 126, 127, y 128. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. de Golub. 155129, 130, 131, y 132. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. de Golub. 158133 y 134. Cluster: Escalabilidad del alg. de Golub. 159135, 136, 137, y 138. SG: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. de Drmac. 163139, 140, 141, y 142. Cluster: Tiempos, Prestaciones, Speed Up y Eficiencia del alg. de Drmac. 166143 y 144. Cluster: Escalabilidad del alg. de Drmac. 167145. Comparación de los distintos métodos e implementaciones (sólo valores singulares). 168146. Comparación de los distintos métodos e implementaciones. 168

Referencia de Algoritmos

1. SVD Kogbetliantz secuencial. 442. SVD Golub-Reinsch. 473. SVD por bloques trapezoidales. 524. SVD paralelo par-impar. 545a. SVD paralelo por bloques fase 1. 595b. SVD paralelo por bloques fase 2. 606. Convergencia para topología general. 607. Convergencia para topología circular. 618a. PSVD secuencial. 668b. PSVD secuencial con vectores singulares. 669. QSVD secuencial. 6810a. PSVD par-impar. 7110b. PSVD par-impar detallado. 7211a: PSVD por bloques trapezoidales. 8111b. PSVD por bloques trapezoidales detallado. 8412. PSVD por bloques cuadrados. 8513. PSVD Kogbetliantz con paso de mensajes. 11914. PSVD Kogbetliantz: intercambio total seq-sr. 12115a. PSVD Kogbetliantz: intercambio total seq-sr detallado, fase primera. 12115b. PSVD Kogbetliantz: intercambio total seq-sr detallado, fase segunda. 12216. PSVD Kogbetliantz: intercambio total mul-sr. 12417. Bidiagonalización implícita, LAPACK. 15118. Bidiagonalización implícita, ScaLAPACK. 15219. PSVD con bidiagonalización implícita. 15220. PSVD Drmac. 16021. PSVD Drmac: Implementación ScaLAPACK. 16022. Rutina PDQPP. 161

v

1. Introducción y objetivos.

������������� �����������������

Esta memoria gira en torno a la computación mediante algoritmos paralelos de los valoressingulares del producto de dos matrices, realizada en diversas arquitecturas paralelas.

En la actualidad se está realizando un gran esfuerzo por parte de la comunidad científico-técnica para la resolución de problemas de ingeniería dentro de unos límites determinados de tiempo,precisión y coste. Estos problemas tienen cada vez mayor dimensión, en algunos casos demasiadogrande como para ser resueltos dentro de los límites de tiempo y precisión deseables, y mayorcomplejidad. La necesidad de resolver estos problemas ocasiona la creciente utilización de sistemasinformáticos paralelos y distribuidos [80]. Por una parte se diseñan sistemas hardware con mayoresprestaciones y que puedan ejecutar el código desarrollado de una forma más eficiente. Por otra, sedesarrollan nuevos algoritmos numéricos [55, 81] y estrategias de programación más adecuadas paraobtener el mayor provecho de los computadores ya existentes [26].

La resolución de problemas de Álgebra Lineal es una de las más claras aplicaciones delprocesamiento paralelo, por el gran paralelismo que usualmente llevan implícito dichos problemas ypor la necesidad de resolverlos a veces en tiempo real. La descomposición en valores singulares delproducto de dos matrices (PSVD) objeto de este estudio es un ejemplo claro de esta afirmación, porsus características y aplicaciones.

Entre estas últimas cabe destacar, la reducción de modelos en sistemas de control lineales, temaen el que se enmarca la realización de esta tesis. El método basado en transformaciones balanceadas([32,62]), como expondremos en este trabajo y que aparece tratado más extensamente en [13], empleala PSVD como última etapa del cálculo.

�����������! #"����%$&��'��

La descomposición en valores singulares de una matriz y sus generalizaciones son herramientasimportantes en la solución de problemas de control y de tratamiento de la señal.

Dentro de la línea trazada por el Grupo de Computación Paralela de la UPV, el problema seenmarca dentro del estudio de la reducción de modelos. En algunos de los métodos empleados en lareducción de modelos, como se explica en el capítulo 4, una de las etapas de cálculo consiste en ladeterminación de los valores singulares del producto de dos matrices (PSVD).

El propósito del presente trabajo es exponer de forma clara los conceptos relacionados con lacomputación de los valores singulares del producto de dos matrices y desarrollar algoritmos paralelosen distintas arquitecturas para resolver dicho problema.

Concretamente, estudiaremos tres algoritmos diferentes:

- el método de Kogbetliantz implícito,- el de Golub, Sφlna y Van Dooren,- y el de Dmrac.

1

Introducción

Asímismo, desarrollaremos programas para el cálculo de la PSVD:

- Usando el paradigma de programación en memoria compartida (compilador paralelizante) parael método de Kogbetliantz, en dos multiprocesadores con memoria compartida, AlliantFX/80 y Silicon Power Challenge,

- Usando el paradigma de paso de mensajes a bajo nivel (PVM) para el método de Kogbetliantzen los sistemas multiprocesador, tanto de memoria compartida como distribuida,siguientes:

- una red de transputers,- el multicomputador Meiko,- un cluster de PCs,- el citado multiprocesador Power Challenge.

- Usando el paradigma de paso de mensajes (ScalaPACK sobre MPI) para todos los métodos enel cluster de PCs y en máquinas multiprocesador con memoria compartida.

Realizaremos pruebas temporales de los programas, comparándolas entre sí a fin de obtenerconclusiones acerca de los algoritmos paralelos propuestos.

Así pues, el objetivo de esta tesis es doble:

- Experimentación y evaluación de distintas arquitecturas paralelas y diferentes paradigmas deprogramación paralela.

- Desarrollo de algoritmos paralelos para la computación de la descomposición en valoressingulares del producto de dos matrices.

����� ��� '���� ��� ��"����� � "��

Vamos a exponer muy brevemente cuales son los distintos métodos para la computación de losvalores singulares del producto de dos matrices.

Todos los algoritmos empleados en este proceso se basan en algoritmos equivalentes empleadosen la computacion de los valores singulares de una matriz. La mayoría operan sobre el producto de lasmatrices de forma implícita, evitando realizar el producto de la mismas para evitar la pérdida deprecisión que conlleva.

Los métodos más antiguos para la computación de los valores singulares son los relacionadoscon el método de Jacobi para la computación de los valores propios, concretamente el método deKogbetliantz [57]. La extensión de este método a la GSVD fue realizada por Luk [65] y fueronFernando y Hammarling quienes lo extendieron a la PSVD [32]. Una paralelización de este método fuepropuesta por Mollar y Hernández sobre multiprocesadores con memoria compartida [73] y sobremultiprocesadores con memoria distribuida mediante paso de mensajes [72], y se expone ampliamenteen esta tesis (páginas 69 y 117 respectivamente.).

En [42] Golub y Kahan proponen un método para calcular la SVD que consiste básicamente enbidiagonalizar la matriz mediante reflexiones ortogonales, que se diagonaliza después mediante unproceso iterativo, que no se puede paralelizar. Este método, altamente eficiente para el cálculosecuencial de la SVD, conlleva también un eficaz método paralelo pues el coste de la diagonalizaciónes despreciable frente al de la bidiagonalización, que es altamente paralelizable. En [44] Golub, Sφlnay Van Dooren presentan un método para la bidiagonalización implícita del producto de dos o másmatrices, obteniendo una matriz bidiagonal que se diagonaliza con el propio método de Golub o el deDemmel [18] empleados en la computación de la SVD. En [14] Claver, Mollar y Hernández presentan

2

una paralelización del método de Golub, Sφlna y Van Dooren, ampliamente expuesto en esta tesis (pág149). El método, al igual que su equivalente para la SVD realiza la paralelización de la fase debidiagonalización implícita, y realiza mediante un proceso secuencial, de coste muy inferior, ladiagonalización de la matriz bidiagonal.

Por último, Drmac ha presentado [27] un método completamente distinto en el que se realizaexplícitamente el producto de las matrices que previamente son transformadas. El autor del métododemuestra que la transformación de la matrices evita la pérdida de precisión en el producto de lasmismas y basta con realizar una decomposición en valores singulares de la matriz resultante. Laparalelización del método se expone en esta tesis y se basa principalmente en la paralelización de lasdistintas fases del método, como se expone en la página 159.

����������'�� ��� �%�� � ��" " '���� � "�' � '��

En primer lugar, en el capítulo 2, presentamos la descomposición en valores singulares de unamatriz (SVD) y sus generalizaciones, en particular la descomposición producto (PSVD), eje central deesta tesis.

En el capítulo 3 expondremos el problema de la reducción de modelos, describiendo aquellosmétodos de reducción en los que interviene la PSVD como herramienta de cálculo.

En el capítulo 4 haremos una revisión de las arquitecturas paralelas y de los paradigmas paraprogramación paralela. Describiremos con detalle los multiprocesadores y multicomputadoresempleados en esta tesis, así como las distintas herramientas de software empleadas, es decir, loscompiladores paralelizantes, las librerías básicas de paso de mensajes y las librerías para cálculomatricial paralelo.

En el capítulo 5 introduciremos los algoritmos básicos para la computación de la SVD, que senecesitan en algunos de los métodos empleados en el cálculo de la PSVD. Incluiremos unaimplementación secuencial y paralela del algoritmo de Kogbetliantz, como base para el algoritmoimplícito análogo empleado en el cálculo de la PSVD.

El capítulo 6 se centra en la computación de la PSVD, que realizaremos con 3 algoritmosdiferentes. Para el algoritmo de Kogbetliantz implícito emplearemos tanto compiladores paralelizantesen memoria compartida como librerías básicas de paso de mensajes para arquitecturas en memoriadistribuida. El uso de núcleos computacionales es poco adecuado para este método, como veremos.Desarrollaremos realizaciones paralelas de los recientes algoritmos de Golub, Sφlna y VanDooren y deDrmac, empleando rutinas de nivel BLAS2 y BLAS3.

Por último se presentarán las conclusiones y líneas futuras de trabajo.

3

2. Valores Singulares de una Matriz y del Producto de dos Matrices.

��������� ������ " ' ' ����� � � �� "�' ��" � � ��� ���� ��� �

Definamos la descomposición en valores singulares de una matriz [43]. Dada una matrizA ∈ Rmxn, se verifica que existen dos matrices ortogonales,

U = [u1 , u2 , ..., um ] ∈ Rmxm

y V = [v1 , v2 , ..., vn ] ∈ Rnxn,

tales que Σ = U TAV = diag(σ1 , σ2 , ..., σq ), (1)

con q = mín(m, n) y σ1 ≥ σ2 ≥ ... ≥ σq ≥ 0 .

Los escalares σi son los valores singulares de A. La descomposición existe siempre y es única.A los vectores ui se les denomina vectores singulares por la izquierda y a los vi , vectores singularespor la derecha.

Se verifica que: Avi = σi ui y A Tui = σi vi , i = 1, ..., q.

Además, si σ1 ≥ σ2 ≥ ... ≥ σr > σr+1 ... = σq = 0,se cumple que rango A = r,

N(A) = span {vr+1 , .., vn },R(A) = span {u1 , ..., ur }, (2)

A = Σir= 1 σi ui vi

T,||A||2 = σ1 ;

y si k < rango A, y Ak = Σir= k σi ui vi

T

entonces σk+1 = mínrango B = k ||A-B||2 = ||A-Ak ||2 .

Precisamente esta última propiedad es otra forma de definir los valores singulares, y es laempleada por Zha en [95] para una de las generalizaciones de la SVD.

��������� ������ " ' ' ����� � � �� "�'�� "�� "� ������� � ����'��

Existen problemas numéricos1 en los que se requiere calcular los valores singulares de AB -1, conA ∈ Rmxn y B ∈ Rnxn. El cómputo de la inversa de B puede implicar pérdida de precisión y falsear losresultados numéricos, aparte de requerir cálculos innecesarios. Según Paige [76], el cálculo deAB -1 = UΣV T podemos verlo como U TA = ΣV TB. Si ΣB ∈ Rmxm es una matriz arbitraria diagonaldefinida positiva y definimos ΣA ≡ ΣB Σ, entonces

1La separación de señales en presencia de ruido, la identificación de espacios de estado, problemas de

mínimos cuadrados, etc.

4

Valores Singulares

ΣB U TA = ΣA V

TB, con ΣA = diag(α1 , α2 , ...), ΣB = diag(β1 , β2 , , ..., βm),

αi = βi σi , con i = 1, 2, , ..., mín{m, n}.

Denominaremos a esta, provisionalmente, la descomposición generalizada en valores singulares(GSVD) de A y B (invertible). Diremos que (αi , βi ) es un par de valores singulares generalizados de Ay B, teniendo en cuenta la arbitrariedad de βi .

Sea X una matriz invertible que podemos introducir en la SVD de AB -1 del modo siguiente

AB -1 = UΣV T = UΣA ΣB-1V T = UΣA X

-1X ΣB-1V T. (3)

Para el caso general de B ∈ Rpxn, Van Loan demostró en [89] que si m ≥ n, existen U y Vortogonales y X invertible, tales que:

A = UΣA X -1, B = VΣB X

-1,es decir,

U TAX = ΣA = diag(α1 , α2 , ...), V TBX = ΣB = diag(β1 , β2 , ...), (4)

donde ΣA ∈ Rmxn y ΣB ∈ Rpxn. Nótese que si B es invertible estamos en el caso (3). Por motivosde estabilidad numérica, interesa siempre usar transformaciones ortogonales, por lo que introducimosuna matriz ortogonal Q, tal que X -1Q = R, siendo R triangular superior. De este modo se obtiene

U TAQ = ΣA R, V TBQ = ΣB R. (5)

Definamos ahora la descomposición generalizada para dos matrices cualesquiera. SeanA ∈ Rmxn, B ∈ Rpxn y C = (A T, B T) T. Se verifica que existen cuatro matrices ortogonales U ∈ Rmxm,V ∈ Rpxp, W ∈ Rkxk y Q ∈ Rnxn, tales que

U AQ W R

k n k

T T=−

ΣΑ

� �0 , V BQ W RB

k n k

T T=−

Σ� �

0 ,

con

ΣΑ ≡

���

����

− −

IS

O

A

A

A

mxk r s k r s

, ΣB

B

B

B

pxk r s k r s

OS

I≡

���

����

− −

, (6.a)

donde R ∈ Rkxk es invertible y sus valores singulares son los valores singulares no nulos de C.Las matrices IA ∈ Rrxr e IB ∈ R(k-r-s)x(k-r-s) son matrices identidad, OA ∈ R(m-r-s)x(k-r-s) y OB ∈ R(p-k+r)xr

son matrices nulas, quizá sin filas o columnas y SA = diag(αr+1 , ..., αr+s) ∈ Rsxs y SB = diag(βr+1 , ...,βr+s) ∈ Rsxs, son ambas matrices reales. Se cumple que

1 > αr+1 ≥ ... ≥ αr+s > 0, 0 < βr+1 ≤ ... ≤ βr+s < 1,(6.b)

αi2 + βi

2 = 1, i = r+1, ..., r+s.

La demostración puede encontrarse en [76]. Una generalización análoga puede encontrarse en[95], que resulta ser una extensión directa de (4). En ambos trabajos aparecen una serie de interesantespropiedades.

5

Valores Singulares

Los pares (αi , βi ), i = 1, ..., k, son los pares de valores singulares generalizados llamados no-triviales, tomándose

αi = 1, βi = 0, para i = 1, .., r , αi = 0, βi = 1, para i = r+s+1, .., k.

Es inmediato comprobar que si B es invertible, los valores singulares de AB -1 son (αi/βi),evidentemente no sujetos a la arbitrariedad de βi . Además

αk/βk = mínD∈Rmxp{||D||2 / rango (A+DB) ≤ k - 1},

lo que representa otra forma de definir los valores singulares generalizados, según [95].

����� ��� � ��"�'���� ��� ��' ����� � ��� ��������� ��� � � ��"�' ��� ��� � '���� ����� ������� "���%"��

La descomposición generalizada del par (A,B), propuesta por Paige en [76], se deriva delpropósito de calcular los valores singulares del producto AB -1 sin la computación explícita del mismo.

Análogamente, otros problemas numéricos, como el de realizaciones balanceadas de sistemaslineales, que expondremos en el siguiente apartado, exigen el cálculo de los valores singulares de AB T,evitando, por las mismas razones, la formación del producto. Este problema fue planteado porFernando en [32], donde se define una nueva forma de descomposición, denominada GSVD2 , según

U TAQ = ΣA R V TBQ = ΣB R -T, (7)

siendo ΣA = diag(α1 , α2 , ...) y ΣB = diag(β1 , β2 , , ...), matrices definidas no negativas.Obsérvese la anología con la descomposición (5), siendo éste un buen punto de partida para el cálculonumérico de la misma y suficiente para nuestros propósitos. También aquí existe arbitrariedad en ΣA yΣB , pero no en su producto, que es constante.

En [22], De Moor propone denominar a (5) descomposición cociente (QSVD), frente a (7) quese denominará la descomposición producto (PSVD). La nomenclatura se deriva del hecho de que losvalores singulares de AB T son αiβi , tomando los pares (αi , βi ) de (7), frente a los valores singularesde AB -1, que son αi /βi , como se explicó en el punto anterior. Para la descomposición en valoressingulares de una matriz reserva el nombre de descomposición ordinaria (OSVD).

El mismo autor presenta en [25] un estudio teórico extenso sobre la PSVD.

��������� � � ����"�� � � " ��"� ��� �

Las descomposiciones producto y cociente se combinan para dar lugar a la llamadadescomposición restringida (RSVD), propuesta por Zha en [95]. Simplificando la notación, seanA ∈ Rmxn, B ∈ Rmxp, C ∈ Rqxn. Se verifica que existen dos matrices invertibles P ∈ Rmxm y Q ∈ Rnxn ydos matrices ortogonales U ∈ Rpxp y V ∈ Rqxq, tales que:

PAQ = ΣA , PBU = ΣB , VCQ = ΣC ,

con ΣA = diag(α1 , α2 , ...), ΣB = diag(β1 , β2 , ...) y ΣC = diag(γ1 , γ2 , ...).

Obsérvese que es una definición del estilo de (4). También es evidente que si A es invertible, losvalores singulares de CA -1B vienen dados por ΣC ΣA

-1ΣB . Igualmente si B y C son invertibles, los

6

Valores Singulares

valores singulares de B -1AC -1 vienen dados por ΣB-1ΣA ΣC

-1, siendo, por definición,σi (B

-1AC -1) = αi /(βi γi ) los valores singulares restringidos de la terna de matrices (A,B,C).

Obsérvese que todas las descomposiciones generalizadas (QSVD, PSVD, RSVD) vieneninducidas por alguna descomposición en valores singulares. Para el caso de tres matrices, por ejemplo,la RSVD se induce a partir del producto B -1AC -1, pero podríamos inducir otra a partir de, porejemplo, AB -1C. En general, podemos inducir distintas descomposiciones tomando parejas deproductos del tipo AB o AB -1, y combinándolas, por ejemplo, ABC -1 o AB -1C. En la definición de laPSVD el producto es AB T, lo que es formalmente equivalente a AB.

De Moor y Zha en [23] han extendido el problema a k matrices, utilizando por convenienciaproductos del tipo AB y AB -T. En este trabajo utilizaremos AB como producto empleado en ladefinición de la PSVD. Así, para A1 ∈ Rn0xn1, A2 ∈ Rn1xn2, ..., Ak ∈ Rnk-1xnk. podemos construir unafamilia de descomposiciones inducidas a partir de la OSVD de combinaciones de productos del tipoAi Ai+1 o del tipo Ai Ai+1

-1, para 1 ≤ i ≤ k-1. La descomposición inducida, existe, como en las anteriores,independientemente de la existencia o no de las inversas requeridas para la OSVD.

Así pues, sean A1 ∈ Rn0xn1, A2 ∈ Rn1xn2, ..., Ak ∈ Rnk-1xnk. Se verifica que existen dos matricesortogonales U ∈ Rn0xn0 y V ∈ Rnkxnk, k-1 matrices cuasi-diagonales Dj (j = 1, ..., k-1), k-1 matricesinvertibles Xj ∈ Rnjxnj y k-1 matrices invertibles Zj , con Zj = Xj , o Zj = Xj

-T, de modo que:

A1 = UD1 X1-1,

A2 = Z1 D2 X2-1,

A3 = Z2 D3 X3-1,

··························Ai = Zi-1 Di Xi

-1,··························

Ak = Zk-1 S V.

Las matrices Dj están formadas por bloques que son matrices identidad y la matriz S sonbloques diagonales de elementos positivos. Si para 1 ≤ i ≤ k-1, Zi = Xi , decimos que el par de matrices(Ai ,Ai+1) tiene una factorización de tipo P y viene inducido por la presencia de Ai Ai+1 en la OSVDinductora. Si Zi = Xi

-T, la factorización es de tipo Q y viene inducido por la presencia de Ai Ai+1-1 en la

OSVD inductora.

Construimos así la nomenclatura para un conjunto cualquiera de matrices, simplementeenumerando en orden los tipos de factorización que se forma entre sus pares de matrices. Por ejemplo,para 5 matrices, tendríamos, entre otras, una factorización PPQP, abreviada P2QP, inducida, perototalmente independiente, de la OSVD de un producto tipo A1 A2 A3 A4

-TA5-T.

Puede verse, sin más que sustituir, que la PSVD es una P factorización de 2 matrices y laQSVD es una Q factorización (de ahí la elección de P y Q como identificadores de la factorización).Igualmente, la RSVD es una factorización QQ de 3 matrices.

7

3. Reducción de modelos.

� ������� � � � � ��" � � ��" "���������� � � ��" � ����"���� '��

3.1.1. Planteamiento del problema.

Uno de los temas cruciales en ingeniería es la modelización de sistemas dinámicos complejos.Sin embargo, para que sea factible el tratamiento de problemas reales, son necesarias aproximacionesque lo transformen en un problema más simple. Un sistema dinámico complejo suele ser no lineal,distribuido y variable en el tiempo, por lo que una de las primeras aproximaciones clásicamenterealizadas es su transformación en un sistema lineal invariante en el tiempo. Los sistemas linealesinvariantes en el tiempo resultantes de esta aproximación inicial suelen ser sistemas de gran tamañoque poseen un gran número de variables de estado [86]. Por ello es necesario buscar modelosmatemáticos más simples que aproximen al máximo el comportamiento del sistema original. Estemodelo, que poseerá menor número de estados que el sistema original, se denomina modelo reducido omodelo de orden reducido y al procedimiento utilizado para conseguirlo reducción de modelos [36].

La reducción de modelos, que era un problema abierto en teoría de sistemas hace unos años,actualmente es uno de sus temas fundamentales [86]. La aproximación usual para obtener modelos deorden reducido suele ser la misma para sistemas en tiempo continuo que para sistemas en tiempodiscreto. Nos referiremos normalmente al primer tipo de sistemas, ya que en la mayoría de los casoslas conclusiones son extensibles sin excesiva dificultad para el caso de tiempo discreto.

La reducción de modelos puede abordarse tanto en el dominio del tiempo como en el de lafrecuencia. Estudiemos el problema desde el primer punto de vista.

Supongamos un sistema lineal continuo (SLC) invariante en el tiempo de orden n grande

x t Ax t Bu t x x

y t Cx t

' ( ) ( ) ( ), ( ) ,( ) ( ),

= + ==

0 0 (8)

donde x(t) ∈ Rn, y(t) ∈ Rp, u(t) ∈ Rm, el símbolo de apóstrofe denota derivación respecto de t yA, B y C son matrices constantes de dimensiones apropiadas. Podemos asumir que el SLC (8) se haobtenido mediante un procedimiento de linealización de un sistema no lineal o de un sistemadistribuido mediante procedimientos de aproximación como los de Galerkin o Padé [6, 36].Asumiremos también que el SLC está en forma minimal, es decir, es controlable y observable.

Un modelo de orden reducido del anterior tendrá la forma

x t A x t B u t x x

y t C x tr r r r r

r r

' ( ) ( ) ( ), ( ) ,( ) ( ),

= + ==

0 0

siendo x(t) ∈ Rr, y(t) ∈ Rp, u(t) ∈ Rm, y Ar, Br y Cr matrices constantes de dimensionesapropiadas, siendo r < n.

3.1.2. Importancia de la reducción de modelos.

Las principales razones para obtener modelos de orden reducido [36] son las siguientes:

8

Reducción de Modelos

1. Simplifican la comprensión del sistema.2. Se reduce el coste computacional en los problemas de simulación.3. Se requiere menor esfuerzo computacional en el diseño de controladores numéricamente más

eficientes.4. Se obtienen leyes de control más simples.

Especialmente importante es el caso del control de sistemas complejos en ingeniería, dado que lareducción de modelos es primordial para reducir los requerimientos de hardware, facilitar el diseño decontroladores, en los que aparece la resolución de problemas numéricos particularmente costosos, y enalgunos casos, obtener un modelo reducido adecuado para aplicaciones en tiempo real.

Cuando se obtiene un modelo reducido, éste es más simple, pero a la vez más inexacto. Eldiseñador deberá conocer el impacto que esta reducción produce sobre el comportamiento del sistema,para poder evaluar el tipo y cantidad de reducción posible en cada caso atendiendo a los límites deerror permitidos.

� ����������� ������' � ��� ����� � ����' � �� � � � "���������� � � ��" � ����"�� ��'��

Fortuna [36] propone una clasificación de los métodos de reducción de modelos basada en elámbito de aplicación o dominio donde éstos intervienen. Así tendremos procedimientos en el dominiode la frecuencia y en el dominio del tiempo. Una clasificación que parece mucho más operativa es lasugerida por Skelton [86], que presenta tres categorías de reducción de modelos:

1. Métodos basados en aproximaciones polinomiales (dominio de la frecuencia).2. Técnicas de optimizaciones paramétricas.3. Procedimientos de truncamiento del espacio de estados.

Aunque estos métodos aparezcan separados, esta división no excluye la posible combinación devarios procedimientos en ciertos problemas, para la obtención de un modelo reducido.

Las aproximaciones polinomiales trabajan en el ámbito de la matriz de transferencia, mientras eltruncamiento de estados opera en la representación del espacio de estados. Las optimizacionesparamétricas pueden por otra parte utilizarse tanto en el dominio del tiempo como en el de lafrecuencia.

Los métodos de reducción polinomial se aplican en el dominio de la frecuencia y normalmenteno necesitan un cálculo computacional intensivo. Son utilizados para obtener funciones detransferencia de orden reducido y el modelo de coeficientes utilizado se escoge de acuerdo con diversoscriterios (comparación de momentos y parámetros de Markov entre el modelo original y el reducido).Estos métodos producen SLC reducidos poco precisos.

El segundo tipo de reducción de modelos corresponde a los procedimientos de optimizaciónparamétrica. Son procedimientos secuenciales basados en la minimización de algunos índices definidosapropiadamente, que miden el error o diferencia de comportamiento entre el modelo original y el deorden reducido [93]. Si el modelo reducido tiene valores propios constantes puede obtenerseanalíticamente; en caso contrario, éste puede obtenerse mediante diversos métodos de aproximaciónnumérica. Tales métodos requieren un alto coste computacional que los hace en muchos casosprohibitivos, sobre todo si el sistema original es de gran tamaño. De especial interés son lasoptimizaciones basadas en la minimización de la norma de Hankel [38], definida como la norma de ladiferencia entre las matrices de transferencia del SLC original y del SLC reducido.

9

Reducción de Modelos

Por último tenemos los métodos de truncamiento en el espacio de estados, que incluyen todos losprocedimientos que involucran una transformación del SLC original en el espacio de estados. Estosmétodos están basados en una transformación de la representación en coordenadas de estados delmodelo del SLC de orden completo, que permite obtener un modelo reducido que mantenga en lamedida de lo posible las propiedades de respuesta temporal, controlabilidad, observabilidad, etc. Encomparación con los métodos anteriores, los métodos de truncamiento en el espacio de estados nospermiten una mayor precisión en la representación del sistema reducido que los obtenidos conaproximaciones polinómicas y un menor coste computacional respecto de los métodos basados en losprocedimientos de optimización paramétrica. Por todo ello, la investigación de estos métodos dereducción de modelos constituye uno de los campos de mayor actividad científica actualmente.

En algunos de estos métodos interviene, como una etapa de cálculo, la computación de laPSVD. A continuación trataremos de dar una visión más detallada de los mismos.

� ��� ��� "�������� � ��������"�' � ��� ������"�� � � '��

La teoría de realizaciones balanceadas ha supuesto una contribución significativa en el campode la aproximación de modelos. Moore introdujo un conjunto de invariantes bajo transformaciones desemejanza [75], los modos de segundo orden del sistema [68], que representan el peso de cada una delas variables de estado respecto a la controlabilidad y observabilidad del modelo en lazo abierto, y quecorresponden a los cuadrados de los valores singulares de la matriz de transferencia de Hankel delsistema σ1

2 ≥ σ22 ≥ ... ≥ σn

2 > 0.

La transformación de estados buscada es tal que, en la nueva representación, las matricesGramian de controlabilidad y observabilidad (Gramianos de controlabilidad y observabilidad,respectivamente) son iguales y diagonales [62, 79],

WO = WC = Σ = diag(σ1 , σ2 , ..., σn ). (9)

El modelo de orden reducido se obtiene al escoger las r componentes que contribuyen mássignificativamente al comportamiento del sistema y eliminar el resto

σ12 ≥ σ2

2 ≥ ... ≥ σr2 >>σr+1

2 ≥ ... ≥ σn2≥ 0.

Posteriormente, Kabamba mostró que los modos de segundo orden no representancompletamente la contribución de cada variable de estado, en términos de la magnitud L2 de larespuesta al impulso [54]. Así, se introduce un nuevo tipo de invariantes denominados gananciasbalanceadas que permiten evaluar la respuesta al impulso relacionada con la energía asociada a cadavariable de estado.

En 1983 Jonckheere y Silverman introducen un nuevo conjunto de invariantes [53] que dan unamedida del grado de contribución de cada variable de estado en el sistema en lazo cerrado, en funcióndel filtrado de Kalman y del control óptimo Gaussiano-cuadrático-lineal (LQG). Se trata de obteneruna realización balanceada en lazo cerrado, frente al lazo abierto de las aproximaciones anteriores.Esta idea ya fue mencionada por Laub en un artículo anterior [62]. Sea la terna (A,B,C) unarealización minimal de la matriz de transferencia G(s). La ecuación matricial de Riccati para el filtradode Kalman y la ecuación matricial de Riccati para el control óptimo lineal-cuadrático son,respectivamente, las siguientes

APK + PK A T + BB T - PK C

TCPK = 0,(10)

10

Realizaciones Balanceadas

A TPC + PC A +C TC - PC BB TPC = 0.

Para cada una de estas ecuaciones matriciales existe solución, ésta es única y semidefinidapositiva. Sean PK+ y PC+ las soluciones de estas ecuaciones. Los valores propios de la matriz productoP = Px+ Pc+ , son invariantes bajo cualquier transformación de coordenadas no singular �x (t) = Tx(t), esdecir, son invariantes bajo transformaciones de semejanza. Los valores propios de P son tambiénreales, no negativos, y se denominan valores característicos del sistema: µ1

2 ≥µ22 ≥ ... ≥µn

2 > 0. En estecaso la transformación buscada es tal que las soluciones de las ecuaciones matriciales de Riccati seanmatrices diagonales con sus elementos iguales, PK+ = PC+ = diag(µ1 , µ2 , ..., µn ), dando lugar a unarealización balanceada en lazo cerrado.

En los últimos años existe un especial interés en el balanceado de sistemas simétricos [35]. Lateoría para el estudio de estos sistemas está basada en la utilización de dos nuevos tipos de ecuacionesmatriciales, las llamadas ecuaciones de Gramm y de Riccati cruzadas [29].

3.3.1. Sistemas en lazo abierto.

Supongamos un SLC invariante en el tiempo

x t Ax t Bu t x x

y t Cx t

' ( ) ( ) ( ), ( ) ,( ) ( ),

= + ==

0 0

siendo x(t) ∈ Rn, y(t) ∈ Rp, u(t) ∈ Rm, A ∈ Rnxn, B ∈ Rnxm, C ∈ Rpxn. Asumimos que el SLC esasintóticamente estable, que el par (A,B) es controlable y que el par (A,C) es observable.

Las matrices Gramian (o Gramianos) de controlabilidad y de observabilidad del sistema, Wc yWo son simétricas y definidas positivas, como consecuencia del carácter controlable y observable delsistema y satisfacen las siguientes ecuaciones matriciales de Lyapunov en tiempo continuo

AWC + WC A T + BB T = 0,

A T WO + WO A + C TC = 0.

Si se aplica una transformación de coordenadas en el espacio de estados

x(t) = S �x (t),

donde S ∈ Rnxn es una matriz invertible, se obtiene la nueva realización del SLC representadopor las ecuaciones

� ' ( ) � � ( ) � ( ), � ( ) � ,

( ) � � ( ),

x t Ax t Bu t x x

y t Cx t

= + =

=

0 0

donde

� , � , � .A S AS B S B C CS= = =− −1 1

Es fácil comprobar que las matrices Gramian del nuevo sistema y las del sistema inicial estánrelacionadas por

� , � .W S W S W S W SC C O O= =− −1 T T

De estas expresiones se puede deducir que:

11

Realizaciones Balanceadas

1) Los valores propios de A (modos del sistema [62]) son invariantes bajo la transformación de

coordenadas, ya que �A y A son matrices semejantes,

Λ(A) = Λ( �A ).

2) Los valores propios de las matrices Gramian no son invariantes bajo la transformación de

coordenadas, ya que las matrices �WC y Wc ( �WO y Wo ) no están relacionados medianteuna transformación de semejanza.

3) Los productos de las matrices Gramian satisfacen una relación de semejanza y por tanto susvalores propios (modos de segundo orden del sistema [68]) permanecen invariantes frentea la transformación de coordenadas. En efecto

� �W WC O =S -1Wc S -TS TWo S = S -1(WcWo)S,

por lo tanto Λ( � �W WC O ) = Λ(WcWo).

Nos interesa en particular un tipo de cambio de coordenadas S que denominaremostransformación contragradiente (TCG) y que definimos seguidamente. Una transformación de

coordenadas S por la que las nuevas matrices Gramian �WO y �WO son diagonales se denominatransformación contragradiente.

Veamos ahora qué tipo de transformaciones contragradiente son de interés para nuestroproblema.

Puesto que WCT = Wc > 0 (simétrica definida positiva), existe una matriz ortogonal VC ∈ Rnxn

tal queVC

TWC VC = Λ2C ,

donde ΛC es una matriz diagonal y definida positiva. Por otra parte, puesto que WOT = WO > 0,

existe una matriz ortogonal V ∈ Rnxn y una matriz diagonal definida positiva Λ, tales que

V T[(VC ΛC)TWO (VC ΛC)]V = Λ2.

Consideremos a continuación la familia de transformaciones que podemos deducir de la anteriorexpresión

Sk = VC ΛCVΛ-k, −∞ < k < +∞ .

Es fácil comprobar que al aplicar estas transformaciones a las matrices Gramian se obtienencomo resultado las siguientes matrices diagonales

Sk-1WC Sk

-T = Λ2k , SkTWO Sk = Λ2-2k,

y en consecuencia se trata de transformaciones contragradiente.

Son de especial interés las TCG para los valores de k iguales a 0, 1/2 y 1, denominadas porMoore [75] como :

12

Realizaciones Balanceadas

k=0 Entrada-normal ( �WC = In , �WO = Λ2),

k=1/2 Internamente-balanceada ( �WC = �WO = Λ),

k=1 Salida-normal ( �WC = Λ2, �WO = In ).

Por supuesto también existen unas matrices ortogonales VO y U, y una matriz diagonal definidapositiva Γ( = Λ) tales que

U T[(VO ΛO )TWC (VO ΛO)]U = Γ2,

dondeVO

TWO VO = Λ2O .

En este caso la familia de TCG vendrá dada por

Sk = VO ΛO U Γ-k, −∞ < k < +∞ .

Podemos observar que en el caso de entrada-normal se puede relajar la condición deobservabilidad por la de detectabilidad para la construcción de la transformación contragradiente. Esdecir WO puede ser sólo semidefinida positiva. De igual forma ocurre para el caso de salida-normaldonde se puede relajar la condición de controlabilidad, sustituyéndola por la de estabilizabilidad. Esdecir, WC es semidefinida positiva.

Es fácil comprobar que los valores propios del producto WC WO son los elementos diagonales deΛ2

Sk-1(WC WO )Sk = Λ2, −∞ < k < +∞ .

También es fácil ver que los elementos de Λ son los valores singulares de la matriz de Moore[75] definida por

M = ΛO VO TVC ΛC ,

es decir, son precisamente los "modos de segundo orden" definidos por Mullis y Roberts [68].Nos interesa el caso internamente balanceado, correspondiente a k=1/2. La transformaciónbalanceada, que denominaremos a partir de ahora S, tendrá la siguiente expresión

S = VC ΛC VΛ-1/2.

En la práctica no es necesario calcular la descomposición en valores propios de WC y WO Bastacon calcular los factores de Cholesky Lc y Lo de Wc y Wo, respectivamente, y los valores singularesdel producto Lo

TLc .

Reconstruyendo las ecuaciones anteriores e incluyendo en ellas los factores de Cholesky de lasmatrices Gramian, a partir de la descomposición de Cholesky de WC

WC = LC LC T,

de su descomposición en valores propios

WC = VC Λ2C VC

T = VC ΛC ΛCTVC

T = (VC ΛC)(VC ΛC)T,

13

Realizaciones Balanceadas

y utilizando la simetría existente entre ambas expresiones, podemos sustituir VC ΛC por LC a lahora de construir la transformación contragradiente. Tendremos entonces que existe una matrizortogonal V ∈ Rnxn tal que

V T[LCTWO LC ]V = Λ2 .

A partir de la descomposición de Cholesky de WO , WO = LO LOT, se cumple que

V T[(LOTLC )

T(LOTLC )]V = Λ2 .

De esta expresión podemos ver que existe una matriz ortogonal U ∈ Rnxn tal que

V T[(LOTLC )

TUU T(LOTLC )]V = Λ2

y que cumple

LOTLC = UΛV T . (11)

En consecuencia, podemos definir la transformación contragradiente como

S = LC VΛ-1/2,S -1 = Λ-1/2U TLO

T .

Las principales etapas del algoritmo para obtener una transformación balanceada son lassiguientes [62]

Etapa 1: Calcular los factores de Cholesky de las matrices Gramian (Wc y Wo) definidas comolas soluciones de las ecuaciones de Lyapunov

AWC + WC A T + BB T = 0,

A T WO + WO A + C TC = 0.

Es decir,Wc = Lc Lc

T, Wo = Lo LoT,

siendo Lc y Lo matrices triangulares inferiores con elementos diagonales positivos. Nosinteresan los factores de Cholesky de los Gramianos ya que se puede obtener la matriz de valorespropios de WcWo, Λ2, sin necesidad de calcular el producto de los Gramianos.

Etapa 2: Calcular la descomposición en valores singulares (SVD) del producto de los factoresde Cholesky [31, 47]

LoTLc = UΛV T.

Etapa 3: Obtener la transformación balanceada

S = LC VΛ-1/2,

y su inversaS -1 = Λ-1/2U TLO

T.

Etapa 4: Obtener las matrices que definen la nueva realización internamente balanceada

14

Realizaciones Balanceadas

�A = S -1AS = Λ-1/2U TLOTALC VΛ-1/2,

�B = S -1B = Λ-1/2U TLOTB,

�C = CS = CLC VΛ-1/2.

Utilizando las expresiones de la etapa 3 es fácil comprobar que S es una transformacióncontragradiente para Wc y Wo . Los valores singulares de Lo

TLc (que son los valores singulares de lamatriz de Moore M), coinciden con las raíces cuadradas positivas de los valores propios de WCWO.

Una vez obtenida la nueva realización internamente balanceada

� ' ( ) � � ( ) � ( ), ( ) ,

( ) � � ( ),

x t Ax t Bu t x x

y t Cx t

= + =

=

0 0

para obtener el modelo reducido de orden r, con r<n, se realiza la siguiente partición del sistema[75]

� ' ( )� �

� �� ( )

�( )x t

A A

A Ax t

B

Bu t=

���

���� +

���

����11 12

21 22

1

2

,

y t C C x t( ) � � � ( )= 1 2 ,

donde �A11 ∈ Rrxr, �A22 ∈ R(n-r)x(n-r), �B1 ∈ Rrxm, �C1 ∈ Rpxr. Truncando los n-r estados menoscontrolables y observables obtenemos el modelo reducido cuya matriz de transferencia viene dada por

� ( ) � ( � ) �G s C I A Bs= −1 11 1.

Este modelo reducido es estable, minimal y balanceado, con los Gramianos de controlabilidad yobservabilidad diagonales e iguales a

Λr = diag(σ1 , σ2 , ..., σr ) .

El modelo reducido �G (s), cumple el siguiente límite de la norma-L ∞ del error, en el dominio dela frecuencia [38], respecto del modelo original G(s),

σ (G(s) - �G (s)) ≤ 2Σi

n

= r+1 σi ∀s .

El método desarrollado para realizaciones balanceadas de SLC, en el modelo de espacio deestados, puede ser aplicado, con pequeñas modificaciones, al caso de tiempo discreto [62]. Acontinuación describimos de forma concisa algunas de estas diferencias.

Las ecuaciones del modelo en tiempo discreto serán ahora

x Ax Bu x x

y Cxk k k

k k

+ = + ==1 0 0, ,

,

15

Realizaciones Balanceadas

de modo que el par de matrices (A,B) es alcanzable, el par (A,C) es observable (detectable) y lamatriz A es convergente (todos sus valores propios tienen módulo menor que uno).

En este caso las matrices Gramian de alcanzabilidad (WR) y de observabilidad (WO) [79]satisfacen las siguientes ecuaciones de Lyapunov en tiempo discreto

AWR AT - WR + BBT = 0,

ATWO A - WO + CTC = 0.

El algoritmo para calcular la transformación contragradiente que nos permite obtener larealización internamente balanceada es básicamente el mismo que hemos estudiado anteriormente yque consta de las etapas 1-4. La única diferencia vendrá dada por la resolución de la ecuación discretade Lyapunov, de la que obtendremos directamente LO y LR [Varga 90, Hammarling 82, Hammarling91].

3.3.2. Sistemas en lazo cerrado.

Sea un SLC invariante en el tiempo definido por las ecuaciones

x t Ax t Bu t x x

y t Cx t

' ( ) ( ) ( ), ( ) ,( ) ( ),

= + ==

0 0

donde x(t) ∈ Rn, y(t) ∈ Rp, u(t) ∈ Rm, y A, B y C son matrices constantes de dimensionesapropiadas. Asumimos que éste se encuentra en forma minimal (controlable y observable). Entonces,la ecuación de Riccati para el filtrado de Kalman (ERFK) y la ecuación de Riccati para el controlóptimo (ERCO) están definidas, respectivamente, del siguiente modo

APK + PK AT + BBT + PK C

TCPK = 0,(12)

ATPC + PC A + CTC - PC BBTPC = 0.

Que el sistema (A,B,C) sea minimal implica que para cada una de estas ecuaciones [53], dualuna de la otra, existe una única solución definida positiva, estabilizante (definida negativa,antiestabilizante) que denotaremos por PK+ (PK-) y PC+ (PC-) respectivamente.

Consideremos una transformación de coordenadas en el espacio de estados

�x = Tx ,

donde T ∈ Rnxn es una matriz invertible. Sean �P K+ y �P C+ las soluciones de las ecuacionesERFK y ERCO del nuevo sistema. Es fácil comprobar, de forma similar al caso de las realizacionesbalanceadas en lazo abierto, que

�P K+ = TPK+ T T,

�P C+ = T -TPC+ T -1 .

Además, los valores propios del producto P=PK+PC+ son invariantes bajo esta transformación[61], puesto que

�P K+ �P C+ = TPK+ PC+ T

-1.

También puede comprobarse, mediante manipulaciones algebraicas elementales [53], que

16

Realizaciones Balanceadas

PK+ = -P C-

-1 , PC+ = -P K-

-1 .

Las matrices optimas de filtrado y de control en lazo cerrado definidas, respectivamente, como

AO = A - PK+ C TC,

AC = A - BB TPC+ ,

son semejantes, ya que

AO = (I + PK+ PC+)AC(I + PK+ PC+)

-1 .

La representación en el espacio de estados del compensador óptimo lineal COL (K(s)), resultadodel acoplamiento de un observador óptimo y de un regulador lineal óptimo, viene dada por

� ' ( ) � ( ) ( )x t A x t B y tK K= + (observador óptimo)

u t C x tK( ) � ( )= − , (control de ganancia óptimo)

donde

AK = A - BB TPC+ - PK+ C TC,

B K = PK+ C T,

C K = BTPC+ .

Como se ha comentado antes, los valores propios del producto P = PK+ PC+ son invariantes bajouna transformación de semejanza y además son reales y estrictamente positivos. Siµ1

2 ≥ µ22 ≥ ...≥ µn

2 > 0 son los valores propios, ordenados en sentido decreciente, existe unatransformación de semejanza S

(A, B, C) S → (�

,�

,�

)A B Ctal que

P K+ = �

P C+ = M = diag(µ1 , µ2 , ..., µn ).

Esta transformación, como en el caso de lazo abierto, puede calcularse obteniendo directamentelos factores de Cholesky de PK+ y PC+ a partir de (12)

PK+ = LK+ LT

K+ y PC = LC+ LT

C+ .

Entonces, calculando la PSVD de LTK+ LC+

LTK+ LC+ = UΛV T

elegimosS = LK+ VΛ−1/2.

La transformación de semejanza S distribuye el peso de las componentes de estado entre dosproblemas, uno de control y otro de filtrado, de igual peso (PK+ = PC+ ). Este peso o importancia de la

componente k-ésima del estado �xk en el problema del COL es µk, pues µk es al mismo tiempo el error

de covarianza del filtrado en la dirección de �xk y el coste inducido por una condición inicial alineada

17

Realizaciones Balanceadas

con �xk . Esto nos lleva al problema de compensación, si pensamos en un compensador constituido por

la cascada de un observador (o filtro) y un control de ganancia.

Así, µk especifica en qué forma, la componente k-ésima de la variable de estado �xk participa en

el comportamiento en lazo cerrado del sistema. Si µk es grande, entonces �xk es difícil de filtrar y de

controlar, y por lo tanto debe de tenerse en cuenta en el diseño del compensador. Si µk es pequeño, �xk

es fácil de filtrar y controlar, por lo que �xk no es una componente de la variable de estado esencial y

puede descartarse en el diseño del compensador reducido [53].

De acuerdo con las consideraciones anteriores, se propone el siguiente método de actuación. Lamatriz M se divide en dos bloques diagonales

M MM

rn r

r n r

=�� ��

−−

11

2200

� �

,

donde los elementos de M11 son mucho mayores que los de M22, es decir,µ1 ≥ ... ≥ µr >> µr+1 ≥ ... ≥ µn > 0.

Dividimos las ecuaciones del sistema y el compensador óptimo de acuerdo con la particiónrealizada en M

�' ( )

� �

� ��( )

� ( )x tA A

A Ax t

B

Bu t=

���

�� � +

���

�� �11 12

21 22

1

2,

y t C C x t( )� � �

( )= 1 2 ,

( )

� �

� � �

( )

� ( )x tA A

A Ax t

B

Bu t

K K

K K

K

K=

���

���� +

���

����11 12

21 22

1

2 ,

y t C C x tK K( )� �

( )= 1 2 ,

El modelo reducido es el representado por (�

A 11 , �

B 1 , �

C 1 ) y su compensador COL óptimo de

orden reducido es evidentemente (�

A K11 ,

B K1 ,

C K1 ).

De forma intuitiva se deduce que el compensador de orden reducido garantiza la estabilidad delsistema si los elementos de M22 son lo suficientemente pequeños.

En el caso discreto el procedimiento a seguir es muy similar al descrito para tiempo continuo.Las ecuaciones matriciales ERFK y ERCO serán, respectivamentes

AP1 AT - P1 + BBT - P1 C

TCP1 = 0,

ATP2 A - P2 + CTC - P2 BBTP2 = 0.

Existen diversos métodos, todos ellos iterativos, para resolver la ecuación de Riccati [81]. Entreellos, el método de Newton (o iteración de Kleinmann) introducido en [58] es el único método conocidocuya estabilidad numérica ha sido demostrada y en la que en cada iteración hay que resolver una

18

Realizaciones Balanceadas

ecuación de Lyapunov. Este método requiere una aproximación inicial a la solución del problema y laconvergencia puede ser lenta si esta aproximación está alejada de la misma. En consecuencia, y debidoa su alto coste computacional por iteración y lenta convergencia, este método se considera como unalgoritmo de refinamiento óptimo para construir algoritmos globales numéricamente estables másrápidos aplicándolo en la última etapa de otros métodos más rápidos (como los basados en la funciónsigno matricial [83] o en la descomposición de Schur [60]) pero cuya estabilidad numérica no estádemostrada.

En el método de Newton se obtiene una secuencia de matrices que, bajo ciertas condiciones,converge a la única solución simétrica semidefinida positiva de las ecuaciones de Riccati anteriores[58]

AX + XA T + BB T - XC TCX = 0,

A TX + XA + C TC - XBB TX = 0.

Aunque es posible desarrollar diversos algoritmos, matemáticamente equivalentes, para laresolución de las ecuaciones de Riccati, basados en [58], el siguiente es uno de los que mejorcomportamiento presenta desde el punto de vista de robustez en presencia de errores de redondeo [7].Para el caso de la ecuación de Riccati

A TX + XA + C TC - XBB TX = 0, (13)

los pasos a seguir serán los siguientes:

1. Calcular una matriz inicial simétrica X0 tal que A - SX0 , S = BB t, es estable.

2. Para k= 0,1,2,... hasta la convergencia o k > maxit

a) Rk = -(A TXK + XK A + C TC - XK SXK ).

b) Calcular la solución YK de la ecuación de Lyapunov en tiempo continuo

(A - SXkT)Yk + Yk (A - SXk ) = Rk .

c) Xk+1 = Xk + YK

Las matrices A, S y Q =C TC no se modifican, mientras que la matriz solución X se actualiza encada iteración mediante una corrección YK decreciente.

El método de Newton puede utilizarse para resolver la ecuación 13 obteniendo directamente elfactor de Cholesky, L, de la matriz solución X mediante algunas modificaciones del anterior algoritmo[46].

� ����������� ����� ��"�� ��� � �

El método de Schur, propuesto recientemente por Safonov y Chiang para sistemas en lazoabierto, utiliza las bases ortonormales de los subespacios invariantes a la derecha y a la izquierdaasociados a los valores propios grandes de la matriz WC WO , para obtener un modelo reducido quecomparte muchas de las propiedades de los modelos internamente balanceados del mismo orden [84,91].

19

Método de Shur

Este método pretende evitar el cálculo de la transformación balanceada (lo que Varga denominamétodos de raíz cuadrada o SR (square-root methods)) que puede introducir errores considerablescuando el sistema está próximo a la inobservabilidad y/o la incontrolabilidad. Esta circunstancia fuetratada por Tombs y Postlethwaite [87], quienes mostraron que el método de Laub et al. [62] puedeutilizarse para calcular directamente las primeras r columnas de la transformación balanceada que sonusadas para calcular las r primeras filas y columnas de la realización balanceada. Sin embargo estemétodo puede estar mal condicionado cuando algunos estados son más controlables que observables yviceversa.

Consideremos inicialmente el siguiente sistema lineal continuo invariante en el tiempo

x t Ax t Bu t x x

y t Cx t

' ( ) ( ) ( ), ( ) ,( ) ( ),

= + ==

0 0

donde x(t) ∈ Rn, y(t) ∈ Rp, u(t) ∈ Rm, y A, B y C son matrices constantes de dimensionesapropiadas. Asumimos que el par (A,B) es controlable y que el par (A,C) es observable .

Sean WC y WO las matrices Gramian de controlabilidad y observabilidad asociadas a estesistema. Es posible reducir el producto de los Gramianos, WcWo, a la forma real de Schur y obtenerlos valores propios ordenados en orden ascendente y descendente, respectivamente,

Q W W Q

x x xx x

a C O a

a

a

a

n

nT =

���

���

λλ

λ

��

� � � � �

� � �

0

0

1

1

,

Q W W Q

x x xx x

d C O d

d

d

n

T =

���

���

λλ

λ

1

20

0

��

� � � � �

� � �

,

donde

λ λ σa d ii i= = 2 ,

i = 1, 2, ..., n,

siendo Qa y Qd matrices ortogonales fruto de la acumulación de las transformacionesortogonales necesarias para calcular la forma real de Schur correspondiente. A continuación partimoslas matrices Qa y Qd como sigue

Q Q Qa a

n r

a

r

=−

1 2� ,

y

Q Q Qd d

r

d

n r

=−

1 2� ,

donde Qd1 y Qa1

forman, respectivamente, una base ortonormal del espacio de vectores propios a

la derecha de WcWo asociado a los valores propios grandes (σ12,..., σr

2 ) y pequeños (σr+12,..., σn

2 ).

Las columnas de Qd2 y Qa2

nos dan una descomposición similar a la anterior pero para el espacio de

vectores propios a la izquierda.

Si ahora calculamos la descomposición en valores singulares del producto Q Qa d2 1

T

Q Q U Va d2 1

T T= Λ ,

tenemos que las matrices reales invertibles de dimensiones n r que conforman latransformación vienen dadas por las siguientes expresiones

S Q US Q V

l a

r d

==

−2

1

1 2

1 2ΛΛ

/

/,.

20

Método de Shur

El principal inconveniente de este método es que requiere la formación inicial del productoWC WO que nos llevará, en algunos casos, a una pérdida de precisión [90, 91].

Una posible alternativa, sugerida en [84], consiste en obtener las matrices que forman la baseortonormal para el espacio de vectores propios a la derecha y a la izquierda de WcWo a partir de ladescomposición en valores singulares del producto de los factores de Cholesky de las matricesGramian (Lo y Lc) del siguiente modo

L L U U VVC O =

��� ���� ��� ����1 2

1

2

1

2

00

ΛΛ

,

donde Λ1 ∈ Rrxr y U1 ∈ Rnxr, V1 ∈ Rrxn. Λ1 contiene los valores singulares mayores delproducto LcLo y Λ2 los valores singulares menores. Como se desprende de [84]

Vr = LC U1 ,Vl = LO V1 ,

forman, respectivamente, una base ortonormal para el espacio de vectores propios a la derecha ya la izquierda de WC WO asociados a los valores propios mayores (σ1

2,..., σr2 ). Si obtenemos ahora la

descomposición QR de Vr y Vl ,

V Q Q R

V Q Q R

r r rr

l l ll

=���

�� �

=���

�� �

1 2

1 2

0

0

,

,

donde Qr1 , Ql1 ∈ Rnxr y calculamos la descomposición en valores singulares del producto

Q Q U Vl r E E1 1

T T= Λ ,

tenemos que las matrices reales invertibles de dimensiones r r que conforman la nuevatransformación, vienen dadas por las expresiones:

S Q US Q V

l l E

r r E

==

−1

1

1 2

1 2ΛΛ

/

/,.

Las matrices de la nueva realización reducida de orden r son

�A = SlTASr , �B = Sl

TB, y �C = CSr ,

con los siguientes Gramianos de controlabilidad y observabilidad

�W C = SlTWC Sl y �W O = Sr

TWO Sr .

Aunque el modelo obtenido no está balanceado (lo que Varga denomina métodos sin balanceadoo BF (balancing-free methods)) posee muchas de las propiedades propias del modelo balanceado delmismo orden (por ejemplo, ambos poseen los mismos polos).

21

Método de Shur

� ������� � � ����� '�� � ��" '��

La reducción de modelos supone un compromiso entre el orden del modelo y la adecuación deéste a las características de nuestro sistema. Como apunta Moore [75] no existe ningún método dereducción que sirva para todos los sistemas, dado que muchas de las características del sistemadependen en gran medida de la aplicación.

En este capítulo hemos descrito algunas de las técnicas utilizadas en la reducción de modelosmediante truncamiento en el espacio de estados y nos hemos centrado en aquellas en las que intervienela PSVD como parte del cálculo.

Además, los métodos de reducción basados en realizaciones balanceadas y la forma real deSchur son de especial interés por estar basados en transformaciones ortogonales, lo que les otorga unaimportante estabilidad numérica. Por otra parte el modelo reducido que generan estos métodosmantiene casi inalteradas muchas de las propiedades del sistema original.

4. Arquitecturas y Modelos de Programación.

Repasemos brevemente el estado actual de la tecnología en los campos que nos incumben: Laarquitectura de computadoras y los paradigmas de programación que sobre ellas podemos emplear.

El desarrollo de nuevos y más potentes computadores ha permitido en los últimos años resolverproblemas que, por su alto coste computacional y/o por posibles restricciones en el tiempo derespuesta, eran prácticamente inabordables. La evolución ha sido tan notable, que en pocos años se hapasado de "supercomputadores" con unas prestaciones de unos pocos cientos de flops (floating-pointoperations per second u operaciones en coma flotante por segundo) a las máquinas masivamenteparalelas que persiguen como objetivo el Teraflop (1012 flops).

Un estudio de las arquitecturas de altas prestaciones debe necesariamente comenzar porestablecer una clasificación que las agrupe y permita identificar sus características más notables. En lasección 4.2 se describen diversas clasificaciones, atendiendo a diferentes tipos de parámetros. En unaclasificación en función de su utilización en la computación científica y técnica, sobresalen por susprestaciones los multiprocesadores, máquinas con varios procesadores completos capaces de funcionarde manera asíncrona.

Los multiprocesadores con memoria compartida disponen de herramientas que permiten unaprogramación "secuencial" clásica que obtiene prestaciones óptimas. Los programas escritos bajo unmodelo de paso de mensajes obtienen las máximas prestaciones en el caso de multicomputadores. Acambio, este modelo presenta una programación mucho más compleja.

En la sección 4.2 de este capítulo se presentan los principales parámetros que intervienen en laprogramación de multicomputadores, a saber, distribución de los datos, subrutinas de paso demensajes y librerías recientemente desarrolladas para facilitar la generación de código. Además, en lasección 4.3 se presentan las arquitecturas paralelas utilizadas en la evaluación de los algoritmossecuenciales y paralelos desarrollados en esta memoria.

��������� � ��� ��� � ������� ��" ��� ��� ' � "�'���� ��� � � "�'��

4.1.1. Clasificación de las arquitecturas.

22

Arquitecturas y modelos de programación

La evolución de los sistemas de altas prestaciones ha supuesto el desarrollo de un gran númerode arquitecturas diferentes. Esta variedad ha llevado a diversas apuestas de futuro por parte de losfabricantes.

En el campo de los sistemas informáticos de aplicación general la estructura básica estáfundamentada en uno o más procesadores que siguen el paradigma Von Neumann o secuencial conconsiderables modificaciones y prestaciones adicionales. Algunas de las contribuciones másimportantes realizadas en la arquitectura de los computadores monoprocesador han sido:

- La microprogramación, introducida por M. Wilkes en 1951.- El segmentado en la ejecución de instrucciones (lo que ha dado lugar a los procesadores

supersegmentados) introducido en 1964 por S. Cray en el computador CDC 6600.- Las antememorias (M. Wilkes, 1965).- El uso de unidades vectoriales (S. Cray, 1975).- La multiplicidad de unidades aritméticas para números enteros y reales en coma flotante en los

procesadores (IBM, 1990).

Desde el punto de vista de su utilización en la computación científica se pueden distinguiractualmente dos grupos: procesadores superescalares y procesadores vectoriales.

Podemos identificar los procesadores vectoriales por la existencia en su código máquina deinstrucciones para el manejo de vectores. El trabajo con los vectores se realiza en unidades aritméticassegmentadas (pipeline), capaces de dividir las instrucciones en varias etapas y ejecutar etapasdiferentes simultáneamente. Este tipo de procesadores son especialmente apropiados para la ejecuciónde códigos secuenciales, compuestos de un gran número de operaciones aritméticas entre datos.Ejemplos de ellos son los procesadores del Cray Y-MP, Cray X-MP, Alliant FX/80, etc.

Los procesadores superescalares, que han experimentado un considerable auge en los últimosaños, resultan especialmente apropiados para ejecutar eficientemente cualquier tipo de código. En lapráctica los programas están compuestos por diferentes tipos de operaciones (aritméticas, deentrada/salida, condicionales, de salto, etc.). Los procesadores superescalares disponen de variasunidades funcionales independientes, capaces de realizar en paralelo diferentes operaciones. Eldesarrollo de estos computadores está ligado a la evolución del diseño RISC (Reduced Instruction SetCode o código con un conjunto de instrucciones reducido) en los que el microlenguaje del computadorestá compuesto por un mínimo número de instrucciones muy simples, y ligado a la tecnología CMOS.Ejemplos de estos procesadores son el RS/6000 de IBM, el DEC Alpha AXP, el MIPS R8000 yR10000 de Silicon Graphichs, etc.

En el caso de los sistemas con más de un procesador, o multiprocesadores, la mayoría de lasarquitecturas actuales pueden ser incluidas dentro de dos categorías: SIMD y MIMD [34, 49].

En las SIMD (Single Instruction Multiple Data o Simple Instrucción Múltiples Datos) todoslos procesadores ejecutan las mismas instrucciones simultáneamente, pero sobre diferentes partes delconjunto de datos a tratar. Para incrementar la flexibilidad de estas máquinas existe un sistema demáscaras sobre la actividad de los procesadores. Los procesadores son frecuentemente simples, essencilla la construcción de las conexiones entre los procesadores y la memoria, y estas arquitecturassuelen contener una gran cantidad (miles) de nodos de procesamiento (por ejemplo: CM-2, MasPar,etc.). Esta arquitectura era hasta no hace mucho tiempo la preferida para la construcción de máquinasparalelas.

Los sistemas MIMD (Multiple Instructions Multiple Data o Multiples Instrucciones MúltiplesDatos) son un conjunto de procesadores/computadores independientes, ejecutando cada uno de ellos su

23

Arquitecturas y modelos de programación

propio flujo de instrucciones y conectados a través de una red de comunicación (bus, red deconmutación dinámica (crossbar, hipercubo, omega, etc.), red estática de topología determinada,LAN, etc.). Los procesadores (o unidades de proceso) pueden ser secuenciales, vectoriales osuperescalares. Los sistemas MIMD pueden clasificarse, en base al tipo de conexión y organización dela memoria del sistema, en memoria compartida y memoria distribuida.

En ambos casos la jerarquía de memoria de estos sistemas tiene dos o más niveles, cada uno deellos con un tiempo de acceso distinto. Es lo que se denomina arquitectura NUMA (Non UniformMemory Addres).

En los sistemas multiprocesador con memoria compartida (MMC) todos los procesadores (delmismo tipo) están conectados a una única memoria central, direccionando un vector común dememoria física, a través de una red de interconexión (ver la Figura 1). Actualmente, en la mayoría deellos los procesadores están conectados a la memoria compartida a través de una antememoria (éstosse denominan multiprocesadores simétricos) para paliar en lo posible el "cuello de botella" que suponeel acceso a la memoria central y que limita el número máximo de procesadores (alrededor de 16).Actualmente los procesadores poseen varios niveles de antememoria (L1: primer nivel, L2: segundonivel, etc.). Generalmente está aceptado que este tipo de sistemas es más fácil de programar que los dememoria distribuida.

M0 1 2 3 m-1· · ·

P0 P1 P2 P3 Pp-1· · ·

M M M M

���������������� ����������������

P i iM MemoriaElemento de Proceso

Figura 1. Esquema de un multiprocesador con memoria compartida.

Los sistemas multiprocesador con memoria distribuida (MMD), también denominadosmulticomputadores, aparecieron en 1982. En estos sistemas cada procesador (en este caso es másapropiado hablar de computador) tiene su propia memoria local, no accesible directamente por otrosprocesadores, y se comunica con el resto de procesadores mediante paso de mensajes a través de algúntipo de red de comunicación (ver la Figura 2). Las topologías utilizadas para estas redes son muyvariadas y van desde el bus o el anillo (propio del "cluster" de estaciones de trabajo), pasando por lamalla hasta el hipercubo, dentro de lo que se denominan redes estáticas. Además existen diversasimplementaciones de redes dinámicas en las que un circuito (router) se encarga de encaminar losmensajes desde el procesador origen hasta el destino

24

Arquitecturas y modelos de programación

M0 1 2 3 p-1· · ·

P0 P1 P2 P3 Pp-1· · ·

M M M M

���������������� ����������������

P i iM MemoriaElemento de Proceso

Figura 2. Esquema de un multiprocesador con memoria distribuida.

4.1.2. Metodologías de programación.

Sobre estas arquitecturas se pueden establecer, a un nivel superior, diversos modelos deprogramación. Los modelos básicos que podemos encontrar de más actualidad son: paralelismo dedatos, paso de mensajes y memoria compartida. El paralelismo de datos tiene su origen en loscomputadoras SIMD y fue desarrollado para permitir la migración de las aplicaciones SIMD asistemas MIMD (un ejemplo lo podemos ver en la programación de la CM-2 de Thinking Machines).El paso de mensajes tiene su origen en el desarrollo de los primeros sistemas MIMD de memoriadistribuida, los cuales intercambian datos a través de la transmisión de mensajes. El modelo dememoria compartida asume que todos los procesadores tienen acceso a una memoria global y tiene suorigen en los computadoras monoprocesador y en los multiprocesadores con memoria compartida(Alliant FX/80, Power Challenge de SGI). En los últimos años este modelo de programación se estáimplantando en computadoras MIMD con memoria local en lo se ha venido a denominar memoriavirtualmente compartida (compañías como Kendall Square Research, Cray Research, Convex y Meikoofrecen ya este modelo de programación). La aplicabilidad de esta implementación quedará limitadapor la eficiencia y las escalabilidad que pueda conseguirse en el acceso a datos remotos, por ello elénfasis tecnológico apunta al diseño de redes de comunicación que soporten anchos de banda elevadosde forma sostenida al aumentar el número de nodos.

La tecnología del software en la computación de altas prestaciones ha evolucionado durante losúltimos veinte años lentamente hacia la estandarización. Primero en la opción de los lenguajes talescomo el tradicional FORTRAN (77 y nuevas versiones como el 90 o el HPF), que permanecedominante en la computación científico-técnica, el C (++) y el SQL, estos últimos sobresaliendo en elcampo comercial, y más recientemente, en el caso de los sistemas operativos, hacia el UNIX (conligeras variantes dentro de cada fabricante). En los computadoras con el modelo de programación dememoria compartida cada fabricante posee un conjunto de directivas paralelizantes y vectorizantespropias para sus compiladores de lenguaje [3], lo cual obliga a cambiarlas (o añadir nuevas) cuando sedesea trasladar el código a otra computadora. En el caso del modelo de programación por paso demensajes se está pasando de la anarquía reinante en cuanto a metodologías, soporte para laprogramación paralela y métodos de interacción, a cierta estandarización gracias a la aceptación delPVM (Parallel Virtual Machine) [37], de amplia implantación actualmente, y más recientemente delMPI [45,67] (Message Passing Interface). El diseño de implementaciones de estos estándares decomunicación se está extendiendo por todas las plataformas hardware: Multiprocesadores conmemoria compartida (Power Challenge de SGI), multicomputadoras (SPx de IBM, CM-5 de TMC,

25

Arquitecturas y modelos de programación

etc.) y clusters de estaciones de trabajo. En este último grupo de sistemas su potencialidad se estáincrementando día a día fruto de los nuevos estándares de comunicación que se están implantandocomo el ATM, Myrinet o Gigabit Ethernet. Como podemos ver hay compañías como SGI que siguenapostando por multiprocesadores con memoria compartida, con antememoria de gran tamaño (4-8MB) por procesador y buses de alta velocidad (con anchos de banda de 1,2 GB/s), y que proponen elcrecimiento de estos sistemas utilizando redes crossbar de fibra óptica, factibles para un númeroreducido de nodos computacionales.

Sobre estos estándares se están construyendo librerías como el SCALAPACK que incorporantodo tipo de herramientas para hacer más transparente la programación paralela, simplificando lalabor de programación, con facilidades como el uso de índices globales en las matrices, aun con ciertapérdida de prestaciones. Incluso algunas, como PLAPACK, que trata las matrices como objetos,permiten evitar el uso de índices.

4.1.3. Prestaciones de los algoritmos paralelos.

Las prestaciones de los algoritmos paralelos para multiprocesadores pueden evaluarse mediantediferentes parámetros (alguno de estos parámetros, como el tiempo de ejecución y los Megaflops, 106

flops, son asimismo aplicables en algoritmos no paralelos):

Tiempo de ejecución. Indica el tiempo necesario para resolver el problema mediante undeterminado algoritmo. Podemos distinguir entre el tiempo secuencial, Ts , que es el tiempo necesariopara resolver el problema en 1 procesador y el tiempo paralelo, Tp , que es el tiempo necesario en pprocesadores.

Megaflops (o Megaflop/segundo). Evalúa la potencia de cálculo del sistema. Se obtiene como elcociente entre el coste teórico aritmético del algoritmo (medido en flops, es decir, operaciones en comaflotante) y el coste temporal del algoritmo (en segundos).

Aceleración (incremento de velocidad o speedup). Indica el incremento de velocidad obtenido alutilizar p procesadores. Se obtiene como el cociente Sp = T1 /Tp . Este valor depende del tamaño delproblema, por lo que es más correcto definir Sp

n = Sp (n) = T1 (n)/Tp (n). Normalmente la aceleración delos algoritmos suele ser Sp

n ≤ p, salvo en los casos en los que al aumentar el tamaño del problema laarquitectura del computador favorece la distribución de los datos y/o el trabajo entre diversosprocesadores (computadores en los que cada procesador tiene su propia antememoria). En estos casosSp

n > p, obteniéndose lo que se conoce como superspeedup.

Eficiencia. Mide el grado de aprovechamiento de los procesadores y se calcula como el cocienteEp

n = Spn/p.

Escalabilidad. Degradación de la eficiencia del algoritmo al aumentar el número deprocesadores y el tamaño del problema, manteniéndose constante la relación entre éstos. Se dice queun algoritmo es escalable para un problema de tamaño (local) k cuando Ep

n = constante, n = kp,p = 1,2, .... La escalabilidad de los algoritmos, si se da, suele alcanzarse para valores de k elevados.

��������� � �%��� ��� ��� ��� � ��� "�'��

Los lenguajes imperativos (Fortran, C, Modula-2, etc.), que durante años han sido válidos paraprogramar procesadores secuenciales, son asimismo útiles para desarrollar código para losprocesadores vectoriales y superescalares y para los MMC. El procesamiento y traducción de unprograma previo a su ejecución es una tarea que, en estos tipos de computadores, es elaborada por un

26

Arquitecturas y modelos de programación

compilador especializado. Existen compiladores capaces de generar código que puede aprovechareficientemente los recursos de estos computadores.

A nivel de usuario, atendiendo cómo se gestionan los accesos a memoria en multicomputadores,como ya hemos comentado en la sección anterior, podemos distinguir entre entornos de programacióndonde para el usuario es indiferente el acceso a datos locales o remotos (memoria virtual compartida)y, por otro lado, entornos donde es el propio usuario el encargado de gestionar los accesos a los datosremotos (entornos de paso de mensajes) [59]. Hay que hacer notar que un mismo computador amenudo puede ser programado de ambos modos (por ejemplo, el KSR-1, SGI PowerChallenge, CrayT3D, etc).

La ventaja principal del entorno de paso de mensajes es su eficiencia. Otras ventajas son suuniversalidad, expresividad y facilidad de depuración [45]. El modelo de programación CSP(Communicating sequential processes o procesos comunicantes secuenciales) describe fielmente lafilosofía de este entorno de programación [48]. Además, este modelo presenta una ventaja adicional degran interés. Prácticamente cualquier lenguaje imperativo puede adecuarse al modelo mediante eldesarrollo o uso de unas pocas primitivas de comunicación. Así han surgido infinidad depseudolenguajes, capaces de proporcionar el modelo de programación CSP, y adecuados para un tipoparticular de arquitectura.

4.2.1. Distribución de datos.

Desde el punto de vista del usuario, cuando queremos dar solución a un problema en unmulticomputador (bajo el modelo CSP), la primera decisión que debe tomarse es la distribución de losdatos. Esta decisión define muchas de las características de la solución, como el grado de paralelismo,la necesidad de comunicaciones, etc. y, en definitiva, la eficiencia del algoritmo. Así, la distribución delos datos debe intentar:

- Distribuir equitativamente la carga computacional entre los procesadores. Puesto que el tiempototal de un algoritmo paralelo en un multicomputador es igual al tiempo total en elprocesador que más tarda en completar su ejecución, es necesario que todos losprocesadores realicen aproximadamente el mismo trabajo.

- Minimizar las comunicaciones requeridas. Las comunicaciones entre procesadores establecenpuntos de sincronización entre procesos y, en la mayor parte de los casos, demoras yesperas que disminuyen el grado de aprovechamiento de los recursos.

- Reducir las necesidades de memoria. La computación paralela sobre multiprocesadores es almismo tiempo computación distribuida. Por ello, es posible resolver problemas de mayortamaño en este tipo de arquitecturas si los datos se encuentran distribuidos.

A menudo estos parámetros resultan contrapuestos, de modo que la mejora de uno de ellosimplica que otro o más empeoren.

Cuando nos enfrentamos a problemas de computación matricial son precisamente las matricesdel algoritmo las que deben distribuirse entre los procesadores. Existen diversos modelos extensamenteconocidos para la distribución de las matrices, como por ejemplo las distribuciones en 1 dimensión (1-D) por bloques, cíclica por filas/columnas, antidiagonales, serpenteantes, etc. y las distribuciones en 2dimensiones (2-D) malla, toroidal, etc. En esta tesis se han utilizado las distribuciones en 1-D porbloques para calcular la PSVD con el método de Kogbetliantz con PVM, y la distribución en 2-Dtoroidal que es la implícita cuando se emplea ScaLAPACK.

Consideremos las funciones div(·) y res(·) que devuelven el cociente y el resto, respectivamente,de la división entera, y supongamos que disponemos de p procesadores, P0 , P1 , ..., Pp-1 . En la

27

Arquitecturas y modelos de programación

distribución por bloques de columnas se divide la matriz M ∈ Rmxn en p bloques de nb columnasconsecutivas, es decir, M = [M0 ,M1 , ..., Mp-1 ] donde nb = n div p, Mi ∈ Rmxnb, 0 ≤ i ≤ p-1., salvo elúltimo bloque Mp-1 ∈ Rmx(nb+n mod p). El bloque Mi se almacena entonces en el procesador Pi .Evidentemente, no es necesario que los bloques de columnas almacenados localmente en un procesadorqueden exactamente en las mismas columnas de la matriz original. Si se quiere reducir la cantidad dememoria necesaria (lo habitual), es posible compactar el almacenamiento sobre la matriz local, demodo que el bloque Mg , que consta de las columnas (globales) g nb + 1, ..., (g+1)nb,, es a su vez elbloque de la matriz local M1 , donde ocupa las columnas (locales) 1, ..., nb. De esta forma una matrizde dimensión m n necesita (m n)/p posiciones en cada procesador para ser almacenada de maneradistribuida. En el caso de matrices triangulares se aproximan las dimensiones globales y locales por (m n)/2 y (m n)/(2p), respectivamente.

Finalmente, consideremos que disponemos de un conjunto de p q procesadores Pij parai = 1, 2, ..., p y j = 1, 2, ..., q. En la distribución toroidal se divide la matriz M ∈ Rmxn en bloques Mij

de tamaño mb nb, es decir, [Mij ]mbxnb , 0 ≤ i < (m-1) div mb +1, 0 ≤ j < (n-1) div nb +1. Entonces elbloque Mij se asigna al procesador Pimodp,jmodq . Esta distribución incluye como casos particulares todaslas distribuciones por filas y columnas en 1-D, tanto cíclicas como por bloques. La correspondientedescripción gráfica aparece en la Figura 3.

P01P00 P02

P11P10 P12

P21P20 P22

P01P00 P02

P11P10 P12

P21P20 P22

P01P00 P02

P11P10 P12

P21P20 P22

P01P00 P02

P11P10 P12

P21P20 P22

···

···

·

··

·

··

··

·

Figura 3. Distribución toroidal para 3 � 3 procesadores.

4.2.2. Comunicaciones.

28

Arquitecturas y modelos de programación

En los multicomputadores, la transferencia de información entre los procesadores se realizamediante el paso de mensajes. Así pues, un algoritmo paralelo está compuesto de operaciones(fundamentalmente nos interesan las operaciones aritméticas) y comunicaciones que establecen puntosde sincronismo entre procesadores. Si no es posible solapar (simultanear) cálculos y comunicaciones,el coste total del algoritmo paralelo responderá a la suma del coste aritmético y el coste decomunicaciones.

a)

P0 P1 Pq-1· · ·

b)

P00 P01 P0,q-1· · ·

P10 P11 P1,q-1· · ·

P20 P21 P2,q-1· · ·

c)

P5 P4

P1 P0

P7 P6

P3 P2

Figura 4. Redes de interconexión con topología en (a) anillo de q procesadores, (b) toro de 3 � qprocesadores e (c) hipercubo de dimensión 3.

Frente al coste aritmético, que se mide en flops, el cálculo del coste de comunicaciones es algomás complejo, aunque se puede normalizar para poderlo comparar con el aritmético.

29

Arquitecturas y modelos de programación

Las comunicaciones dependen fuertemente del nivel físico de conectividad (red de interconexión)de la máquina. Las redes de interconexión más habituales son las estáticas y según la forma en queconecten a los procesadores establecerán una topología distinta. Podemos distinguir entre redes deconexión con topología en anillo, malla, toro, hipercubo, etc. (ver la Figura 4).

En principio, la velocidad de comunicación en estos sistemas distribuidos se mide en función dedos parámetros,

- la latencia o tiempo de establecimiento de la señal, α, y- el tiempo necesario para transmitir una unidad de información a través de un enlace, τ, cuyo

valor es inversamente proporcional al ancho de banda del enlace.

Estos parámetros permiten, por ejemplo, estimar el tiempo de transferencia de un mensaje dedimensión n a través de un enlace como α + τn.

De manera más general, podemos distinguir entre diferentes operaciones de comunicación como:

- Envío o recepción de un mensaje entre dos procesadores no necesariamente vecinos.- Difusión de un mensaje. Un nodo envía un mensaje al resto de nodos del sistema.- Reunión de mensajes. Un nodo recoge un mensaje de cada uno de los restantes nodos del

sistema y realiza una operación de reducción sobre éstos (por ejemplo, calcula el máximo,la suma, etc.).

- Reunión global de mensajes. Cada nodo recoge un mensaje de cada uno de los restantes nodosdel sistema y realiza una operación de reducción sobre éstos.

En la última generación de multicomputadores, la realización de un número cada vez mayor deestas operaciones queda en manos de complejos algoritmos de encaminamiento. Es decir, la máquinaofrece al usuario un conjunto de subrutinas de comunicación entre nodos (al menos para el envío,difusión y recepción de mensajes). El coste de estas subrutinas de comunicaciones dependerá delnúmero de enlaces que se atraviesen, el número de paquetes en que se divida el mensaje, etc. [15, 16].Por simplicidad, para evaluar el coste de los algoritmos paralelos contaremos el número de mensajesque cada procesador envía (o difunde) y el tamaño de éstos.

4.2.3. Librerías de comunicaciones PVM y MPI.

En los últimos años, el desarrollo de estándares de comunicaciones está permitiendo unificar laprogramación de los multicomputadores. De este modo han surgido librerías de comunicaciones, talescomo PVM y MPI [37,45], principalmente orientadas a los lenguajes de mayor difusión en lacomputación científica, Fortran y C.

Cualquiera de estas dos librerías, junto con el lenguaje de programación Fortran y los núcleoscomputacionales BLAS y LAPACK [5,19,20], componen un conjunto de herramientas suficientementepotente para permitir la resolución de numerosos problemas del álgebra matricial y de infinidad deotros problemas que responden a las mismas características.

La librería PVM (Parallel Virtual Machine o Máquina Virtual Paralela) está compuesta poruna serie de programas que permiten a un conjunto heterogéneo de computadores trabajarconcurrentemente [37]. PVM está diseñada para unir recursos computacionales y proporcionar alusuario una plataforma paralela para ejecutar sus aplicaciones, independientemente del tipo decomputadores de que se disponga y de su ubicación. Básicamente, a nivel de uso, es una librería derutinas basadas en la filosofía del paso de mensajes, incluyendo facilidades para la sincronización detareas.

30

Arquitecturas y modelos de programación

Las funcionalidades que ofrece PVM son principalmente:

- Control de procesos. Asignación de identificadores de procesos, creación y eliminación deprocesos, manejo de señales, gestión de máquinas virtuales, etc.

- Información sobre número de procesos en el sistema, identificadores de procesos, códigos deerror y estado, etc.

- Operaciones sobre grupos. Creación, eliminación y modificación de grupos de procesos.- Gestión de buffers de mensajes.- Comunicaciones. Envío y recepción síncrona y asíncrona de mensajes, difusión global y por

grupos, etc.

Un demonio y una consola actuan como procesos auxiliares en la tarea de comunicación de lasmáquinas. No obstante, para computación paralela son más adecuadas implementaciones en las quePVM es una librería implementada a bajo nivel, que, sin usar las funciones de comunicación de UNIX,realizan las transferencias aprovechando la potencia del hardware paralelo. Existen inclusoimplementaciones para arquitecturas con memoria compartida, de modo que se emplea el paradigmade paso de mensajes, pero se implementa como transferencias en la misma memoria.

A la hora de la programación, lo que más interesa es el hecho de que las operaciones de envíoson asíncronas, es decir, que se envía un dato y al instante se puede modificar, sin por ello afectar a lotransmitido. Además la operación termina inmediatamente, pudiendo seguir la computación y evitandoesperas indeseadas. Esto hace del PVM una elección más conveniente que otros sistemas síncronos,aunque hay que considerar la penalización en el uso de memoria, que en algunos sistemas, como elmultiprocesador Meiko, es realmente notable.

La metodología general para enviar un mensaje es la siguiente. Un mensaje puede contener datosde distintos tipos. Por ello, la rutina initsend prepara el siguiente mensaje que se va a transmitir,inicializando el buffer por defecto. A continuación vamos componiendo el mensaje, añadiendo datosmediante las rutinas de la familia pkxxxx, donde xxxx es el tipo de datos. Y para enviar llamamos asend que envía el mensaje al procesador indicado, realmente lo encola para ser enviado.

Para recibir, la rutina recv recibe el mensaje (lo extrae de la cola de recibidos), y ya podemosobtener los datos que lo componen con las rutinas de la familia upkxxxx. El buffer no necesita serdestruido, pues implícitamente lo hace la rutina recv.

MPI (Message Passing Interface o Interfaz de Paso de Mensajes) es una librería de subrutinasque definen un estándar de comunicaciones [45]. El MPI ha sido definido por el MPIF (MPI Forum),con la participación de más de 40 organizaciones, creadores de software, eminentes científicos, etc.,que desde 1992 se han reunido para dar a luz una librería de comunicaciones para paso de mensajesque fuera ampliamente usada. Este estándar de comunicaciones fue formalmente establecido en Abrilde 1994 (MPI 1.0).

Frente a PVM, que fue originalmente diseñada para entornos heterogéneos, MPI está másorientada hacia la programación de máquinas masivamente paralelas, aunque permite entornosheterogéneos. Así, MPI proporciona la mayor parte de las funcionalidades enumeradas en el caso dePVM salvo facilidades para la gestión (creación) de procesos y la configuración de máquinas virtuales.

31

Arquitecturas y modelos de programación

Algunas de las características más importantes de la librería MPI son las siguientes:

− Permite comunicaciones eficientes. Eliminando el copiado de memoria a memoria (comoocurre en PVM) y permitiendo el solapamiento entre comunicaciones y cálculo.

− MPI es simple y muy potente. Cualquier programa paralelo y distribuido puedeimplementarse con tan solo 6 funciones, pero MPI dispone de hasta 125 funciones yprocedimientos.

− Comunicaciones punto a punto y colectivas. Posee rutinas de reducción.− Define contextos de comunicación para las operaciones colectivas.− Comunicaciones síncronas y asíncronas, bloqueantes o no, con o sin memoria tampón.− Permite definir nuevos tipos de datos (tipos MPI). Esto permite el envío de complicadas

estructuras de datos muy fácilmente (sin las copias necesarias en PVM).− Permite definir topologías de procesos virtuales. Esto permite la optimización de las

comunicaciones en computadores con una determinada topología.

Actualmente los fabricantes de computadores están desarrollando librerías de MPI optimizadaspara sus arquitecturas. En el caso de sistemas multiprocesadores con memoria compartida lascomunicaciones se realizan mediante lectura/escritura en la memoria principal del computador,utilizándose procesos o hilos de ejecución para implementar las comunicaciones no bloqueantes. En elcaso de un cluster de estaciones de trabajo lo más habitual es utilizar una red Ethernet con protocoloTCP/IP.

4.2.4. Núcleos computacionales paralelos (ScaLAPACK).

Recientemente se han desarrollado y se siguen desarrollando dos iniciativas para facilitar eldesarrollo de algoritmos numéricos paralelos en multicomputadores: ScaLAPACK (Scalable LinearAlgebra PACKage) y PLAPACK (Parallel Linear Algebra PACKage). Éstas están basadas en núcleoscomputacionales paralelos que permiten al usuario el desarrollo de aplicaciones paralelas con unconsiderable ahorro de tiempo y trabajando a un nivel de especificación superior que el utilizado hastaahora para el desarrollo de este tipo de código.

ScaLAPACK es una librería de rutinas de álgebra lineal de altas prestaciones para sistemasmultiprocesadores basados en el paso de mensajes y redes de estaciones de trabajo que utilizan PVMy/o MPI. Se trata de una continuación del proyecto LAPACK (diseñado para estaciones de trabajo,computadores vectoriales y multiprocesadores con memoria compartida) y al igual que éste poseerutinas para resolver sistemas de ecuaciones lineales, problemas de mínimos cuadrados y problemas devalores propios. Sus rutinas están diseñadas para trabajar únicamente sobre matrices densas.

La librería PLAPACK aporta el concepto de programación orientada a objetos al álgebramatricial paralela. Esta librería utiliza MPI y dispone de rutinas paralelas para operacioneselementales como producto matriz-vector y producto de matrices, resolución de sistemas triangulareslineales, etc. Otras operaciones matriciales más complejas no están disponibles aún por lo que suaplicación resulta limitada.

Los principales objetivos de ScaLAPACK son eficiencia, escalabilidad, fiabilidad, portabilidad,flexibilidad y facilidad de uso (haciendo que la interfaz sea lo más parecida posible a la de LAPACK).Muchos de estos objetivos se han alcanzado gracias a que el desarrollo de estas librería se ha basadoen estándares, sobre todo para las rutinas aritméticas elementales (BLAS o Basic Linear AlgebraSubprograms) y las de comunicaciones a bajo nivel (BLACS o Basic Linear Algebra CommunicationSubprograms).

32

Arquitecturas y modelos de programación

La librería ScaLAPACK está escrita en FORTRAN 77 en un estilo de memoria compartida(SIMD), utilizando el paso de mensajes explícito para la comunicación entre los procesadores. Lasmatrices se asume que están distribuidas según una topología 2D toroidal por bloques (ver Figura 3).

La topología utilizada para las comunicaciones entre los procesadores, en especial para lasoperaciones de difusión y recogida de datos, es especificada por el programador mediante unparámetro específico. Se puede seleccionar una topología por defecto (en ocasiones optimizada para lamáquina), varios tipos de topologías en anillo, árbol, hipercubo o una topología heterogénea diseñadapor el propio usuario.

ScaLAPACK posee tres tipos de rutinas:

− Directoras (driver). Resuelven problemas algebraicos estándar (ej. sistemas de ecuaciones).− Aritméticas (computational). Realizan tareas aritméticas básicas. Cada tarea directora

llama a una secuencia de rutinas aritméticas.− Auxiliares (auxiliary). Realizan ciertas subtareas o cálculos aritméticos de menor entidad.

La Figura 5 describe la jerarquía del software de ScaLAPACK. En ésta, los componentes bajola línea de puntos, etiquetados como Local, son llamados por un procesador, con argumentosalmacenados sólo en ése procesador. Los componentes sobre la línea, etiquetados como Globales, sonrutinas paralelas síncronas, cuyos argumentos incluyen matrices y vectores distribuidos entre losmúltiples procesadores. A continuación se describen brevemente cada uno de estos componentes.

Global

Local

LAPACK

BLAS

BLACS

MPI/PVM

PBLAS

ScaLAPACK

Figura 5: Jerarquía software de ScaLAPACK.

4.2.4.1. BLAS.

El BLAS [19,20] incluye subrutinas para operaciones básicas de álgebra lineal tales comoproductos escalares, multiplicaciones matriz por vector y multiplicaciones de matrices,correspondientes a los niveles 1, 2 y 3 del BLAS, respectivamente. Utilizando operaciones de nivelBLAS-3 afinadas para una determinada arquitectura se pueden reducir los efectos de la jerarquía de

33

Arquitecturas y modelos de programación

memoria (fallos de página en las antememorias) y permitir que las operaciones en coma flotante serealicen casi a la máxima velocidad de la máquina.

4.2.4.2. LAPACK.

El LAPACK [5] (Linear Algebra PACKage) es una colección de rutinas para resolver sistemaslineales, problemas de mínimos cuadrados y problemas de valores propios y valores singulares. Lasaltas prestaciones que se obtienen con estas rutinas son debidas a que sus algoritmos están basados enllamadas al BLAS, sobre todo en multiplicaciones de matrices. Cada rutina tiene uno o másparámetros de afinado, tales como el tamaño de bloque para las rutinas del BLAS, para obtener lasmejores prestaciones. Estos parámetros dependen de la máquina y se obtienen de una tabla, definidacuando el paquete es instalado, y referenciada en tiempo de ejecución.

Las rutinas del LAPACK han sido escritas como un solo hilo de ejecución y pueden serejecutadas en máquinas con memoria compartida donde esté disponible la librería BLAS paralela.

4.2.4.3. BLACS.

El BLACS [21] es una librería de paso de mensajes diseñada para álgebra lineal. El modelocomputacional consta de un conjunto de procesos unidimensional o bidimensional, donde cada procesoalmacena parte de las matrices y los vectores. El BLACS posee rutinas de envío y recepción síncronaspara transmitir una matriz o submatriz de un procesador a otro, difundir una matriz desde unprocesador al resto, o realizar operaciones de reducción global.

4.2.4.4. PBLAS.

El PBLAS es un BLAS paralelo, que permite el paso de mensajes y cuya interfaz es muyparecida al BLAS. Esta librería permite que así como el LAPACK hace llamadas al BLAS, elScaLAPACK se haya construido a partir de llamadas al PBLAS. De esta forma la interfaz delScaLAPACK es muy parecida, sino idéntica en ocasiones, a la del LAPACK.

La idea es que el PBLAS se convierta en un estándar para los sistemas en memoria distribuidacomo lo es el BLAS para los sistemas con memoria compartida.

����� ��� � ��� ��� � ��� "�' � �� ��� "�� ��'��

4.3.1. Alliant FX/80.

4.3.1.1. Descripción de la arquitectura.

Aunque ya desfasado, este computador ha marcado una tendencia en la construcción decomputadores paralelos que ha influido mucho en la concepción de algunos computadores de altasprestaciones actuales, por lo que creemos que es interesante comentar su arquitectura [1]. Se trata deun multiprocesador con memoria compartida, con autonomía de funcionamiento, pues soporta suspropios periféricos. Los procesadores son de dos tipos: IP, básicamente para control de periféricos yCE, para realizar operaciones en coma flotante, vectoriales y de gestión de la concurrencia. Lasmáquinas más modernas de la gama FX/80 incluyen procesadores ACE (CE avanzados) en lugar delos CE, siendo los primeros el doble de rápidos que los segundos. La velocidad de pico computacionalde los ACE es de 23 Mflops.

34

Arquitecturas y modelos de programación

El Alliant FX/80 posee ocho ACE's y dos niveles de memoria compartida. La memoria principalposee 8 bancos que pueden llegar a poseer cada uno 8 MBytes y está conectada mediante un bus a dosantememorias de 256 KBytes cada una. Las antememorias están conectadas a los procesadores através de una red de interconexión de alta velocidad tipo crossbar. Acceder a la antememoria es de dosa tres veces más rápido que acceder a la memoria principal.

Además cada procesador tiene sus propias instrucciones de antememoria y su propio conjuntode registros vectoriales. En particular tienen 32 registros dobles de 8 bytes cada uno y la unidadvectorial de cada procesador está dividida en cuatro etapas. En la Figura 6 podemos ver en detalle laarquitectura de este computador.

Alliant FX/80

BUS

8 ó 32 Mbytes

8 ó 32 Mbytes

8 ó 32 Mbytes

8 ó 32 Mbytes

8 ó 32 Mbytes

8 ó 32 Mbytes

8 ó 32 Mbytes

8 ó 32 MbytesBus y periféricos VME

Cache de IP 32k CPC256k 256k

CPC

IP

IP IP

CE

CE

CE

CE

CE

CE

CE

CE

Red de control de concurrencia

Figura 6: Esquema de la arquitectura del Alliant FX/80.

4.3.1.2. Entorno de programación.

Básicamente existen dos metodologías para la programación en memoria compartida:Optimización de Bucles y Conjunto Explícito de Procesos. En esta última la esencia radica en lautilización de un lenguaje paralelo y técnicas de programación paralela, definiendo explícitamente losprocesos que intervienen.

La optimización de bucles, utilizada en este computador, está ideada para la rápidaparalelización de programas secuenciales.

35

Arquitecturas y modelos de programación

Podemos señalar que:

- La programación sigue siendo secuencial y es el compilador quien se encarga de paralelizary/o vectorizar el programa, centrándose en los bucles.

- La aplicación se diseña con un enfoque secuencial, aunque sólo obtendremos buenosresultados con seguridad si ya se enfoca el código pensando en la paralelización que elcompilador realizará. Es decir, si el programa es inherentemente secuencial, no habráposible paralelización. En cambio si escribimos código paralelizable, el compilador lesacará partido.

- El programador indica las directivas de compilación para orientar el modo de paralelización-vectorización deseado y para informar de la no existencia de dependencias entre datos,pues el compilador es, por razones obvias, fuertemente conservador.

- En tiempo de ejecución, distintos procesadores ejecutan simultáneamente distintas iteracionesde un mismo bucle paralelizado. Si el coste de las iteraciones asignadas es diferente, losprocesadores terminan en instantes diferentes y la eficiencia decrece. Posteriormente serealiza una sincronización, necesaria para mantener la consistencia de las operaciones.

El lenguaje utilizado para la implementación de los algoritmos es el Fortran. Se trata de Fortran77, con las extensiones comúnmente aceptadas para el manejo de vectores y matrices [2, 3]. Elcompilador es capaz de optimizar el código secuencial, paralelizando y vectorizando los bucles.Concretamente hay tres modos independientes de optimización:

- Optimización global (directiva g): Del estilo de la realizada por los compiladoressecuenciales clásicos.

- Optimización por vectorización (directiva v): Se genera código para bucles que realiza deforma vectorial las operaciones sobre vectores y matrices.

- Optimización por concurrencia (directiva c): Se genera código para bucles que realiza deforma paralela las operaciones sobre vectores y matrices.

Evidentemente, las mayores prestaciones se obtienen con los tres modos activos. Lasoptimizaciones de concurrencia y vectorización se combinan de dos modos:

- En caso de un sólo bucle, sin anidación, o en varios bucles anidados. Cuando no es posiblehacerlo de otra forma, el modo elegido es paralelizar y vectorizar el bucle, vectorizandopor segmentos y ejecutando paralelamente todos los segmentos posibles. Es el llamadoVector-Concurrent.

- En caso de al menos dos bucles anidados optimizables, se prefiere el modo denominado COVI(Concurrent-Outer, Vector-Inner), paralelizándose el bucle más externo y vectorizando elmás interno. Se consigue entonces la máxima eficacia del computador.

El compilador, al activar el usuario las directivas de compilación citadas, toma las decisionesque cree más convenientes, asegurándose que no existen dependencias entre datos. Éstas son elproblema principal para paralelizar cualquier algoritmo, y aquí especialmente, de modo que elprogramador puede indicar la presencia o no de esas dependencias mediante directivas, que apareceránen el programa como comentarios especiales del tipo

CVD$ <tab> Directiva.

36

Arquitecturas y modelos de programación

Exponemos ahora las empleadas en los programas:

- NoConcur: Indica que el siguiente bucle no debe paralelizarse. Se utiliza, por ejemplo, enbucles pequeños, pues el resultado sería menos eficiente.

- NoVector: Idem para la vectorización.- NoSync: Indica, de forma más potente que la directiva NoDepCheck, que no existen

dependencias entre los datos, de modo que pueden ejecutarse asíncronamente las distintasiteraciones del bucle afectado.

Las directivas no sólo pueden afectar a bucles, sino también a rutinas. Para una exposicióndetallada, véase [3].

4.3.2. SGI Power Challenge.

4.3.2.1. Descripción de la arquitectura.

El computador PowerChallenge de Silicon Graphics es un multiprocesador con memoriacompartida que consta de 12 procesadores superescalares de tipo MIPS R10000 [85].

La antememoria de este computador está estructurada en dos niveles. El primer nivel estácompuesto por una antememoria de datos interna de 16 Kbytes destinada al almacenamiento de datosenteros.

En el segundo nivel de antememoria se encuentra una memoria (o antememoria externa dedatos) de 2 Mbytes (con posibilidad de ampliación a 4 Mbytes) destinada a almacenar datos en comaflotante y los datos enteros. La carga y descarga de datos en coma flotante se efectúa directamentesobre la antememoria externa sin necesidad de que éstos pasen por la antememoria interna.

La memoria RAM puede consistir de 1 hasta 8 módulos. En cada módulo se pueden instalar 8bancos de 64 ó 256 Mbytes. Así, en total, la memoria de esta arquitectura puede variar entre 64Mbytes y 16 Gbytes.

El MIPS R10000 es un procesador superescalar con tecnología RISC. La velocidad pico decomputación de este procesador es de 360 Mflops. Las características generales de este procesadorpueden resumirse en las siguientes:

- Es capaz de ejecutar hasta 6 operaciones por ciclo de reloj, 2 de éstas con accesos a memoria,otras 2 en la unidad entera y las 2 restantes en la unidad en coma flotante.

- Incorpora una antememoria de instrucciones interna de 16 Kbytes y una antememoria de datosde 4 Mbytes.

- Dispone de una unidad funcional para el cálculo con enteros con 32 registros, una unidadfuncional con otros 32 registros para el cálculo con datos en coma flotante, así como unaunidad de gestión de memoria.

- El bus de datos es de 256 bits y el bus de direcciones de 40 bits.- Incorpora un coprocesador que trabaja con aritmética IEEE de 64 bits, tanto para enteros

como para números en coma flotante.

Es posible describir las unidades funcionales de cálculo de manera más detallada identificandolos siguientes aspectos:

37

Arquitecturas y modelos de programación

- Unidad de cálculo con enteros. Esta unidad dispone de dos unidades aritmético-lógicas, unaunidad para la multiplicación y división de enteros y una unidad de ramificación (cálculode direcciones en instrucciones de salto). Todas estas unidades permiten el desarrollo dehasta 4 instrucciones por ciclo, por ejemplo, dos operaciones con enteros y dos accesos adatos.

- Unidad de cálculo en coma flotante. Esta unidad contiene dos unidades segmentadas quepermiten realizar simultáneamente 2 operaciones en coma flotante.

Los procesadores utilizan el POWERpath-2 como un protocolo de interconexión encargado decomunicar entre si los procesadores, sincronizar los mismos y realizar transferencias. Algunas de lascaracterísticas de la interconexión son:

1. Velocidad de trasferencia sostenida de 1,2 Gbyte/s.2. Coherencia de escritura en antememoria mantenida por hardware.3. Buses independientes de 256 bits (bus de datos) y 40 bits (bus de direcciones).4. Memoria, antememorias y buses con códigos de detección de errores.5. Sistema de señales síncronas a 47,6 MHz.

4.3.2.2. Entorno de programación.

El sistema operativo IRIX ofrecido con el Silicon Graphics PowerChallenge es una versiónmultitarea y multiusuario del Unix V de la Universidad de California en Berkeley.

El compilador de Fortran disponible cumple el estándar ANSI que define el Fortran-77. Realizasu trabajo optimizador sobre código fuente estrictamente secuencial, detectando automáticamentefragmentos de código a partir de los cuales puede generar código objeto ejecutable en paralelo. Junto aeste lenguaje podemos encontrar a nuestra disposición la librería optimizada BLAS así como lalibrería LAPACK.

El Silicon Graphics PowerChallenge dispone además de la librería de comunicaciones PVM yMPI por lo que, en la práctica, puede programarse también como un multiprocesador con memoriadistribuida. Las comunicaciones en este caso se realizan a través de la memoria compartida.

4.3.3. Red de transputers.

Algunos de los algoritmos expuestos en este trabajo han sido ensayados en este sistema, ahoradesfasado. El elemento base es el transputer T805 de INMOS. Información completa de suscaracterísiticas y programación pueden encontrarse en [50, 51, 88]. El T805 es un procesador RISCque incorpora una unidad de coma flotante. Dispone de cuatro enlaces físicos a través de los cualespuede enviar información simultáneamente a otros transputers a los que está conectado. Estacaracterística le hace adecuado para ser usado como integrante de un sistema multiprocesador dememoria distribuida. No obstante, se puede construir una arquitectura con memoria compartida.Denominaremos a estos enlaces Norte, Este, Sur, Oeste o bien 0, 1, 2, 3, respectivamente.

En nuestro sistema, los transputers se montaron en pequeños módulos junto a una memoria localde 1 MByte. Los módulos se encajan opcionalmente en slots, montados a su vez en una placa madre,modelo Transtech TMB08 [88], que a su vez se coloca en un ordenador del tipo PC compatible, queactúa como soporte para las operaciones de entrada/salida, incluyendo el acceso a disco. Existen unasconexiones preestablecidas entre los transputers, concretamente formando una red lineal, enlazandoprocesador i, enlace 2 con procesador i+1, enlace 1, conexiones que no se pueden cambiar. El resto deconexiones se pueden establecer mediante configuración dinámica. Así, para cerrar el anillo de P

38

Arquitecturas y modelos de programación

procesadores, conectamos, el procesador P-1, p. e., canal 3, con el 0, canal 3, mediante le ejecución deun comando.

A continuaciónse realiza una especificación de procesos y procesadores, que permite:- la especificación de procesadores y como se conectan entre sí (canales soft),- la especificación de los parámetros de los procesos,- la especificación de qué programa ejecuta cada proceso,- la comunicación entre procesos (canales especificados en parámetros),- la asignación de procesos a procesadores.

Sobre esta estructura se emplean diversos lenguajes de programación, como Ocam o, en nuestrocaso, Parallel C. Este lenguaje es una extensión del C con facilidades para el manejo de lascaracterísticas de la arquitectura. En concreto permite el paso de mensajes entre procesos, medianterutinas que operan de forma completamente síncrona. Ello conlleva que:

- cada procesador accede sólo a sus propios datos almacenados en una memoria local,- los procesadores pueden intercambiar información mediante el paso de mensajes,- cuando un proceso envía un mensaje debe esperar a que el receptor esté dispuesto a recibirlo,- la sincronización se realiza a través de paso de mensajes y el paso de mensajes implica

sincronización.

4.3.4. MEIKO CS2.

Se trata de un multiprocesador con memoria distribuida fabricado por MEIKO. La máquinaestá formada por procesadores SPARC independiente, con su propia RAM, pero sin disco duro, einterconectados por una red de comunicaciones. La red permite conexiones no bloqueantes de modoque los procesadores se pueden comunicar por pares manteniendo el ancho de banda. Uno de los nodosactúa de servidor de ficheros, teniendo acceso a los discos duros y sirve al mismo tiempo de nodo deacceso al sistema, con un sistema operativo tipo UNIX. La configuración utilizada es la siguiente:

- 8 procesadores:- Viking SPARC a 50 MHz,- antememoria secundaria de 1 Mbyte,- 32 Mbytes de RAM,- sin disco duro.

- 1 procesador servidor de accesos y ficheros de idénticas características, salvo:- 128 MBytes de RAM,- dos discos duros de 1,2 GBytes.

- Velocidad de la conexión entre nodos: 40MBytes/s.

El sistema se maneja como un multiprocesador y no como un multicomputador, es decir sólo seabren sesiones UNIX en el nodo de acceso. No disponiendo de un sistema NQS, los nodos estánorganizados en particiones, cada una con un número distinto de procesadores. Para el procesamientoparalelo, existe un programa (machine manager) que se encarga de coordinar las tareas de losdistintos nodos. Los programas se ejecutan en paralelo mediante el uso del programa prun, al que se leindica el número de procesadores sobre los que se va a ejecutar y la partición.

La programación paralela se realiza mediante PVM3. No se trata de una implementaciónestándar, sino de una adaptación a la arquitectura. Nos encontramos con las siguientesparticularidades:

39

Arquitecturas y modelos de programación

- La comunicación entre tareas no se realiza mediante sockets UNIX, sino llamando a libreríasbásicas de comunicación propias de MEIKO.

- Los procesos no se pueden lanzar independientemente, sino mediante el uso de pvm_spawn,consecuencia de la inaccesibilidad operativa sobre los nodos individuales. El programa seejecuta mediante prun y debe crear el resto de tareas que son asignadas automáticamentea cada procesador. Evidentemente el parámetro de pvm_spawn que especifica el nombrede la imágen es irrelevante.

- No existe la consola pvm, no existiendo gestión ni control de procesos externos. Todo ello haceque esta implementación de PVM se reduzca a una librería de programación paralela y noun sistema de programación distribuida heterogénea, lo cual, no obstante, es muyadecuado para esta arquitectura.

- No existen grupos de procesos, sólo uno (accesible mediante un pointer a NULL), lo queafecta al uso de barreras y demás procedimientos grupales.

4.3.6. Cluster de PCs.

Disponemos de un cluster de 32 ordenadores tipo PC dedicados al procesamiento paralelo. Lascaracterísiticas físicas relevantes de cada equipo son:

- Procesador Pentium II a 300 Mhz.- Memoria RAM de 128 MMbytes.

Los equipos van interconectados mediante dos redes:

- Una red tipo fast ethernet (100 Mbit/s).- Una red Myrinet que proporciona una velocidad de hasta 1.28 Gbit por segundo.

La citada fast ethernet puede utilizarse para computación, pero su principal cometido se haconvertido en soportar el sistema distribuido de ficheros y aplicaciones. Esto se ha producido alincorporar como red básica de cálculo a la red Myrinet.

Ésta puede utilizarse como una red TCP/IP ordinaria mediante el uso del interfaz my0 que seconfigura como cualquier interfaz ethernet. Al tratarse de una red de alta velocidad según losestándares actuales, la utilización de TCP/IP introduce una penalización en las comunicaciones debidaa la presencia de múltiples capas de software que no han sido optimizadas para la velocidad sino conotros fines (versatilidad, por ejemplo).

Por ello se han desarrollado drivers específicos para la Myrinet que proporcionan un interfazmás rápido. Este interfaz es utilizado por librerías básicas de comunicaciones. Sobre ellas se hadesarrollado una implementación de MPI, lo que ya permite la realizacón de programas paralelossegún los stándares. De los interfaces disponibles, destacan el BIP, cuyo funcionamineto en la prácticano es satisfactoruio, y el GM, que sí lo es, obteniéndose interesantes prestaciones.

��������� � � ����� '�� � ��" '��

En este capítulo se han presentado taxonomías que agrupan los computadores atendiendo a sucapacidad para procesar datos e instrucciones, a la gestión que realizan del espacio de direcciones dememoria y a su utilización en la computación científica. La segunda clasificación nos permite detectarun tipo de arquitectura con altas prestaciones computacionales: los multiprocesadores.

La programación de los multiprocesadores con memoria compartida no resulta muy diferente dela programación secuencial. En cambio la programación de los multicomputadores, si se quiere

40

Arquitecturas y modelos de programación

aprovechar al máximo los recursos de la máquina, debe realizarse bajo un entorno de paso de mensajesy este modelo presenta una programación mucho más compleja.

Uno de los parámetros principales que determina las prestaciones de los algoritmos paralelossobre multicomputadores es la distribución de los datos. Dos han sido las distribuciones propuestas,distribución por bloques de columnas, y distribución toroidal 2-D.

La principal ventaja de la distribución toroidal 2-D es su escalabilidad, que la hace adecuadapara tratar problemas de gran dimensión. La combinación de una distribución de datos apropiada, y unuso coherente de las subrutinas de comunicación, facilita en gran medida el desarrollo de algoritmosparalelos.

Por último, el estudio de la arquitectura y de las prestaciones de la máquina paralela sobre lacual se desea desarrollar un algoritmo es una de las tareas básicas en la programación. Así, se handescrito en este capítulo las características más importantes de las máquinas utilizadas durante larealización de esta tesis.

41

5. Computación de la SVD.

��������� ���� �%� � ��'���� � � � � "�� ����� "�'��

En este capítulo presentamos los métodos fundamentales para la computación de la SVD. Deestos métodos se derivarán los algoritmos para la computación de la PSVD que presentaremos en elcapítulo siguiente. Realizaremos aquí una implementación completa del método de Kogbetliantz,secuencial, por bloques y paralela.

5.1.1. Notación algorítmica.

En la exposición de los algoritmos descritos en esta memoria, usaremos una notación informal.Dado que utilizaremos lenguajes imperativos, emplearemos la notación algorítmica clásica en la queciertas acciones aparecerán muy detalladas y otras simplemente indicadas.

La brevedad se empleará cuando la acción indicada haya sido suficientemente explicada odetallada anteriormente. En este sentido, el trabajo exigirá una lectura completa, o de leerse por partes,se deberán seguir las indicaciones de las páginas donde se explicó algún concepto empleado.

En el otro extremo detallaremos aquellas partes del algoritmo que consideremos relevantes ycuya realización final no es inmediata, aunque a veces un algoritmo pueda quedar excesivamentelargo. En este caso se procurará dar un algoritmo esquemático y otro detallado equivalente.

5.1.2. El método de Kogbetliantz.

El método de Kogbetliantz [57] es adecuado para la computación secuencial y paralela de laSVD y la PSVD, y lo describimos a continuación. Sea A ∈ Rmxn, con m ≥ n. Cuando m < n, basta contrabajar con la transpuesta.

El primer paso consiste en convertir la matriz en otra triangular superior con los mismos valoressingulares, lo que se consigue mediante el cálculo de la descomposición QR, Q TA = (R T, 0)T.

La idea básica es obtener ahora los valores singulares de R ∈ Rnxn convirtiéndola en una matrizdiagonal mediante la aplicación de las adecuadas transformaciones ortogonales. Durante el proceso nonos preocuparemos del orden de los elementos de la diagonal ni de si son no negativos. El algoritmoestá tomado de Luk [63], quien como otros autores lo denomina algoritmo tipo Jacobi, pues es unamodificación del algoritmo de Jacobi utilizado para matrices simétricas.

Consiste básicamente en un algoritmo iterativo en el que en cada iteración, que denominaremosbarrido, se anulan los elementos situados por encima de la diagonal de R. Las transformacionesaplicadas para anular un elemento destruyen necesariamente algún cero anterior, independientementedel orden en que se apliquen, lo que justifica el proceso iterativo. Al final de cada barrido tenemos quelos elementos por encima de la diagonal están más próximos a cero, es decir es un procesoconvergente, si se eligen las rotaciones adecuadas para hacer los ceros.

42

Computación de la SVD

Tomemos una matriz triangular 2 x 2, que diagonalizamos con dos rotaciones planas (Givens)J(θ ) y K(φ ), según

Jw x

zK

d

d( ) ( )θ φT

0

0

01

2

��� ����=

��� ����.

Para ello utilizamos dos pasos. Primero encontramos una rotación que simetrice la matriz

S w xz

p qq r( )ψ T

0

�� =

�� ,

y que viene dada por

ρ ψ ψ ρρ

ψ ρ ψ= + ≡ =+

=w z

xcot , sen , cos sen ,

sign( )

1 2

salvo para x = 0, en cuyo caso se toma ψ = 0.

En el segundo paso, diagonalizamos el resultado, calculando K(φ ) de modo que

Kp q

q rK

d

d( ) ( )φ φT

��� ����=

��� ����1

2

0

0. (14)

En el caso q = 0, elegimos φ = π/2, y si no, operamos a partir de (14), observando que t ≡ tan φsatisface la ecuación t2+2ρτ−1 = 0, con ρ = cot 2φ = (r-p)/2q. Esta ecuación tiene dos soluciones

t t= − + + =+ +

sign ysign

( )( )

,ρ ρ ρρ

ρ ρ1

12

2

obteniéndose el coseno y el seno a partir de t. Cada una de las soluciones da un ángulo distinto,y elegimos la segunda expresión, que nos da ángulos grandes. A estas rotaciones se les denominaexternas, y son las que emplearemos para una adecuada convergencia. Obsérvese que el caso x = 0,matriz diagonal, produce un intercambio de los valores w y z.

Finalmente, J(θ ) viene dada por la composición J(θ )T = K(φ )TS(ψ )T.

El algoritmo consiste en calcular las anteriores rotaciones a partir de las n-1 submatricesprincipales 2 x 2 de R, es decir,

Ri,i+1 = R(i:i+1, i:i+1), i = 1, 2, ..., n-1 (15)

y aplicarlas a R, preservando su estructura triangular

R ← J(θ )TRK(φ ) . (16)

Con ello sólo los elementos de la primera subdiagonal superior son anulados. La experienciademuestra que esto es suficiente para diagonalizar toda la matriz ([63]) y barrido tras barrido, todoslos elementos fuera de la diagonal tienden a cero. Este hecho implica que los de la primera subdiagonalsuperior son los elementos que más lentamente convergen a cero. Por ello, el criterio que elegiremospara terminar los barridos será que todos los elementos de la primera subdiagonal superior seancero dentro de una cota de error prefijada. Cuando esto se produce, el resto de elementos no

43

Computación de la SVD

diagonales están también dentro de la cota de error. Este criterio de convergencia es mucho mássencillo de evaluar que calcular el peso de los elementos no diagonales y mucho más seguro que parartras un número determinado de barridos, como sugiere Luk en [63].

No obstante, como precaución, el programa se detendrá cuando se alcance un númerodeterminado de barridos, que se puede estimar experimentalmente, como haremos en el algoritmoPSVD. Esta acotación es necesaria, pues una cota de error poco afortunada o una matrizespecialmente difícil puede producir una iteración infinita.

El algoritmo final es:

repetirconverge= verdaderopara i= 1, ..., n-1

j= i+1si Rij no es diagonal

converge= falsoCalcular J(θ ) y K(φ ) a partir de Rij , como se ha explicadoR= J(θ )TRK(φ )

hasta que converge o se alcanza el máximo de barridos

Algoritmo 1: SVD Kogbetliantz secuencial.

Obsérvese que en cada barrido las rotaciones se aplican en el orden trivial. Otros órdenes sonválidos y producen mejor o peor velocidad de convergencia de los barridos, pero siempre del mismoorden de magnitud. Citemos ya ahora que este orden no es adecuado para computación paralela, comoveremos más adelante.

5.1.3. El método de Golub y Reinsch.

El algoritmo que exponemos a continuación es el método más extendido para la computación dela SVD. Ello se debe a su rapidez y su buen comportamiento con la mayoría de tipos de matrices.

Se divide en dos fases. La primera es un proceso finito que consiste en la bidiagonalización de lamatriz mediante transformaciones ortogonales. La segunda fase en un proceso iterativo quediagonaliza la matriz bidiagonal.

Fase 1. Sea A ∈ Rmxn, m ≥ n, la transformamos en bidiagonal mediante una equivalenciaortogonal

U AV B B0 0 0T =

�� = �

donde B es una matriz bidiagonal superior

B =

b b

bbn n

nn

11 12

1

0 00

0

0 0

�� � � �

� � � �

� � �

� �−

����

����,

.

44

Computación de la SVD

Las matrices U0 y V0 se forman como el producto de 2n-2 transformaciones de Householder:

U0 = U01 U02 ... U0n

V0 = V01 V02 ... V0,n-2 .

Describamos ahora el proceso. Primero encontramos una transformación de Householder U01

tal que

A (1) = U01 A =

* * ** *

* *

��

� � � �

0

0

���

� ��

.

Es decir, con la primera columna puesta a ceros excepto el primer elemento. A continuaciónencontramos otra transformación de Householder que anula los elementos de la primera fila salvo losdos primeros

A (2) = A

(1)V01 =

* ** *

* *

0 00

0

�� � � �

���

� �� =

* *

'

0 0000

A

���

� ��

.

El proceso se repite entonces con A', de modo que contruimos U'02 y V'02 . De ellas, completandopor la esquina superior izquierda con la identidad, se obtienen las U02 y V02 deseadas. Repitiendo elproceso recursivamente se obtiene la matriz bidiagonal.

Fase 2. La segunda fase no puede realizarse mediante un proceso finito pues supondría lasolución algebraica de una ecuación de grado mayor que cuatro, contradiciendo el teorema de Abel.

La matriz bidiagonal B se reduce mediante transformaciones ortogonales a la forma diagonal Σusando una aproximación basada en la denominada iteración QR implícita

U1TBV1 = Σ = diag(σ1 , ..., σn ).

La descomposición en valores singulares de A es entonces

U TAV = Σ0

��

donde U = U0 diag(U1 ,I(m-n) ) y V = V0V1 .

El proceso de bidiagonalización es una variante de la iteración QR empleada en el cálculo devalores propios. Partiendo de la matriz bidiagonal B obtenida en la fase 1, construimos una secuenciade matrices bidiagonales {Bk} tales que cada Bi tiene posiblemente los elementos no diagonalesmenores que Bi-1 . La i-ésima iteración es equivalente a aplicar el método implícito QR con eldesplazamiento de Wilkinson a la matriz simética tridiagonal Bi

TBi , pero sin, por supuesto, formarexplícitamente el producto.

Supongamos que ningún elemento de la diagonal o la superdiagonal es cero. Si lo es, esto setraduce en un desdoblamiento de la matriz y se aplica el algoritmo a cada una de las partes.

45

Computación de la SVD

Describamos un paso de la iteración. Sea B de la forma

Bn

n

=

������

������

α β

βα

1 2 0

0

� �

� .(17)

Entonces el desplazamiento de Wilkinson (σ) de la matiz B TB es el valor propio primero de lasubmatriz 2 x 2 inferior derecha de B TB

α β α ββ α α βn n n n

n n n n

− − −

++

���

�� �1

21

21

12 2

más próximo a αn2 + βn

2.

Calculado σ, determinamos una rotación de Givens J1 ' tal que

J112

1 2 0' *α σα β

−��

�� =

�� �� .

Formamos

J JIn

11

2

00=

�� −

' .

Ahora aplicamos J1 a B por la derecha, es decir, formamos

B ≡ BJ1 ,

lo que cambiará el valor cero de la posición (2,1) de B, es decir obtendremos

B ≡ BJ1 =

* ** *

**

+

�����

�����

� �

� ,

donde '+' representa el valor rellenado.

Debemos ahora aplicar una serie de rotaciones de Givens que anulen el elemento añadido, lo quese hace calculando las rotaciones de modo que el elemento sobrante se desplaza hacia abajo según

B ≡ J2TB =

* **

**

+�

�����

�����

� �

� ,

B ≡ BJ3 =

* **

**

� �

�+

�����

�����,

46

Computación de la SVD

B ≡ BJ3 =

* ** *

**

+

�����

�����

� �

� ,

y así sucesivamente, de modo que al final tendremos una nueva matriz bidiagonal B formada porla aplicación de la siguiente transformación de equivalencia ortogonal a la B inicial

(J2n-2T...J4

TJ2T )B(J1 J3 ...J2n-3).

La convergencia de la iteración QR implícita es cuadrática de modo que el elemento βn convergea cero cuadráticamente (en la práctica la convergencia es más que cúbica). Una vez βn es cero,podemos trabajar con una matriz de dimensión n-1 y repetir el mismo proceso hasta que toda la matrizB se convierte en diagonal. Los autores mencionan que los experimentos numéricos indican que elnúmero medio de iteraciones QR completas en la matriz bidiagonal es habitualmente inferior a 2 porcada valor singular.

Calcular el valor de σ según se ha explicado en el texto.y = α1

2-σz = α1 β2

para k = 1, 2, ...., n - 1Determinar J1 ' tal que

J yz1 0' *

�� =

�� .

Formar J1 y calcular B = BJ1 .y = bkk

z = bk+1,k

Determinar J2 tal que

J yz2 0' *

�� =��

.

Formar J2 y calcular B = J2TB.

Si k < n - 1y = bk,k+1

z = bk,k+2

fin para

Algoritmo 2:SVD Golub-Reinsch(un paso).

El criterio para determinar la nulidad de los elementos diagonales αi es que

|αi| ≤ ε(|βi|+|βi-1|),

y para aceptar que un elemento de la superdiagonal sea cero, el criterio es que

|βi| ≤ ε(|αi|+|αi-1|),

donde ε es un pequeño múltiplo de la precisión aritmética de la máquina.

47

Computación de la SVD

La precisión de este algoritmo es elevada, un valor singular calculado cualquiera no se desviarádel real en más de c(m,n)µ||A||2 , donde c es una constante que depende de m y n, y µ es la precisiónaritmética del computador.

El coste del método se estima en 2mn2-2n3/3, si sólo se requiere calcular los valores singulares,incluyendo el coste de la bidiagonalización [43].

En [12] Chan propone una alternativa en el paso de la bidiagonalización que mejora lasprestaciones cuando m es mucho mayor que n. El método es simple:

Paso 1. Calcular la factorización QR de A

Q A RT =��

10 .

Paso 2. Calcular la SVD de R1 usando el algoritmo de Golub y Reinsch R1 = XΣY T y componerambos pasos para obtener U = Qdiag(X, Im-n ) y V = Y.

El coste del método es de mn2 + n3 flops. En [43] aparece una tabla completa de los costes deambos métodos (Golub-Reinsch y Chan) en función de lo que se pretende calcular (sólo valoressingulares o también los vectores singulares).

5.1.4. El método de Demmel y Kahan.

Estos autores han presentado en [18] un nuevo algoritmo que permite calcular los valoressingulares de una matriz bidiagonal con toda la precisión que permita la máquina y los datos. Sedenomina iteración QR con desplazamiento cero. La razón de su nombre se debe a que secorresponde con el algoritmo de Golub y Kahan cuando el desplazamiento es cero. Se basa en laobservación de que cuando el desplazamiento es cero no hay cancelación por sustracción, de modo quelos valores singulares pueden obtenerse con mayor precision.

Sea B la misma que en (17). Sea J1 ' la rotación de Givens tal que:

( ' )*

,J112

1 2 0

αα β

��� ����=

��� �� �

Consideramos

JJ

In1

1

2

0

0=

��� ����−

'.

Entonces

BJ1

0

=

∗+ ∗ ∗

∗∗

�����

������ �

donde el elemento (2,1) resulta no-nulo, pero el (1,2) sí que es nulo. Este cero se propagará porel resto del algoritmo y es la clave de su efectividad.

48

Computación de la SVD

Si aplicamos J2 a la izquierda de BJ1 para anular el elemento (2,1), tenemos

B J BJ≡ =

∗ ∗ +∗

∗∗

������

������2 1

que tiene un elemento no-nulo en la posición (1,3), como en el algoritmo de Golub-Kahan. Porconstrucción, el rango de la submatriz 2 2 de J2 BJ1

b bb b

12 13

22 23

��

es 1, de modo que cuando apliquemos la rotación J3 a J2 BJ1 para anular el elemento (1,3),también se anula el (2,3), de modo que tenemos

B J BJ J≡ =

∗ ∗∗

∗∗

�������

�������2 1 3

0

0�

� �

.

Es decir que tenemos un elemento nulo extra por encima de la superdiagonal respecto al mismopaso en el algoritmo de Golub y Kahan. El proceso continúa hasta el final de la matriz.

La convergencia del último elemento de la superdiagonal es lineal con un factor constante deσ2

n-1 /σ2

n . Respecto a la precisión, el error de cálculo de σi es inferior a w/(1-w)σi , done w esaproximadamente 69n2µ, siendo µ la precisión de la máquina [17].

5.1.5. El paralelismo en los métodos expuestos.

Evidentemente, el primer paso para la paralilización de los métodos es ver si ésta es posible.

El método de Kogbetliantz, tal y como se ha expuesto, no es directamente paralelizable, perobasta con cambiar el orden de aplicación de las rotaciones para que lo sea. Estudiaremos este hecho enel apartado siguiente.

Los métodos de Golub y Reinsch, y el de Demmel y Kahan presentan características similares (ya su vez similares a la iteración QR para valores propios): son estrictamente secuenciales en loreferente al cálculo de los valores singulares de la matriz bidiagonal. Realmente esto no es uninconveniente, si observamos que el coste de la bidiagonalización es del orden de n3, mientras el que elcoste de la diagonalización final es del orden de n2. Si, además, partimos de la base de que el númerode procesadores sobre el que se ejecutará el algoritmo paralelo será normalmente menor (de hechomucho menor) que n, se obtiene un algoritmo muy eficiente si:

- Paralelizamos el proceso de bidiagonalización.- Diagonalizamos la matriz bidiagonal en un procesador.

49

Computación de la SVD

Esta forma de operar da como resultado la implementación paralela de algortimos muyempleados en computación secuencial.

��������� � � ��" � "��� � ������� ��"�� � ��� ����� ��"�� � � � "������ ���� � �

Este método es uno de los empleados para el cálculo de la SVD, y se caracteriza por su elevadaprecisión y alto grado de paralelismo. Presentamos realizaciones del algoritmo secuencial, por bloquesy un algoritmo paralelo, con los resultados experimentales.

5.2.1. Preliminares.

La experimentación de los algoritmos desarrollados en este apartado se ha realizado en unordenador Power Chalenge de Silicon Graphics, que cuenta con 12 procesadores R10000, descrito enla página 37 siendo aprovechables para computación paralela, por configuración, hasta 11 de ellos.Las pruebas de todos los algoritmos se han realizado midiendo en tiempo de reloj y no el tiempo deCPU. Por supuesto los programas corrían en modo cuasi stand alone, es decir que el resto de procesosde la máquina no se asignaban en ningún momento a los procesadores que ejecutan nuestrosalgoritmos.

Ejecutamos el algoritmo para matrices de tamaños n = 120, 240, 360, 480, 600, 720, 960,1080, 1200, 1440, 1800, 2160, que serán apropiados para la comparación con los algoritmosparalelos. Asimismo, aunque hemos probado completamente el algoritmo para verificar sucomportamiento, expondremos los resultados obtenidos con tan solo 20 iteraciones, lo que facilita laspruebas y permite comparar más apropiadamente los resultados con el algoritmo paralelo.

Como matrices de prueba para la comparación de los resultados obtenidos en todos losalgoritmos, hemos utilizado matrices muy estables generadas (pseudo) aleatoriamente. Cada elementode las matrices es un número aleatorio entre 1 y 1.01. Así se obtienen matices con una norma acotaday lejos de la singularidad, de modo que entre el valor singular mayor y el menor sólo hay pocosórdenes de magnitud, garantizando la convergencia del algoritmo dentro de una cota de error pequeña.Por supuesto, se han realizado numerosas pruebas utilizando matrices de muy diverso talante: malcondicionadas, con muchos valores singulares próximos a cero, y con valores singularespredeterminados, obteniéndose resultados satisfactorios.

La rutina generadora de los números aleatorios emplea el conocido método de actualizar unasemilla que se modifica cada vez que se llama, generando siempre la misma secuencia de números, enfunción de la semilla inicial. La rutina opera solamente con 4 dígitos de la parte fraccionaria de lasemilla, de modo que prácticamente cualquier implementación causará los mismos redondeos. Así nosaseguramos que funcionará en cualquier máquina (diremos que es portable).

El código en Fortran es:

! Genera un número aleatorio entre 1 y 1.01 a partir de Semilla,modificadaDOUBLE PRECISION FUNCTION Random(Semilla)DOUBLE PRECISION Semilla

Semilla= DFloat(Int(10000*Semilla/251))/10000 ! Corta en la 4ª cifra.Semilla= Semilla - DFloat(Int(Semilla))Semilla= 1753*SemillaRandom= 71*Semilla/1243370+1

END

50

Computación de la SVD

5.2.2. Resultados experimentales del algoritmo secuencial.

Hemos realizado una implementación directa del algoritmo 1 explicado en la página 44. Losresultados obtenidos se muestran en la tabla 1.

Matriz 1 2 3 4 5 6 7 8 9 10 11 12Tamaño 120 240 360 480 600 720 960 1080 1200 1440 1800 2160Tiempo 20 60 130 330 470 1280 2730 3530 4740 7490 13370 20180MFlops 86.40 115.2 119.6 83.78 91.91 48.60 40.51 39.65 36.46 33.22 29.08 27.74

Tabla 1: Prestaciones y tiempos de ejecución (ms) de 20 iteraciones del algoritmo secuencial.

Como puede observarse, el algoritmo alcanza un pico para la matriz con n = 360 (129.600elementos, 1 Mbyte aproximadamente). Para matrices mayores las prestaciones decrecen rápidamente,como puede verse gráficamente en la figura 8 (pag. 53). La razón es simple: la antememoria de cadaprocesador es de 1 Mbyte. Para matrices mayores de este tamaño, el algoritmo secuencial presentadopierde localidad, pues al trabajar sobre filas y columnas enteras, el procesador necesita datos que estánfuera de la antememoria, que debe actualizarse continuamente.

5.2.3. Algoritmo secuencial por bloques.

La solución a la pérdida de prestaciones del algoritmo secuencial consiste en utilizar unalgoritmo por bloques que trabaje al máximo con los elementos de una zona de la matriz, cargados enla antememoria, antes de pasar a otras zonas de la matriz.

5.2.3.1. Algortimo por bloques trapezoidales.

Dividimos la matriz en bloques tapezoidales (fig. 7) e intentamos trabajar completamente concada bloque antes de pasar al siguiente. Evidentemente, al ser un algoritmo iterativo, el proceso serepetirá para cada iteración. Por ello, al vaciar y rellenar la antememoria algunas veces por iteración,las prestaciones para matrices grandes necesariamente decrecerán respecto a la matriz con n = 360 quehemos visto para el caso secuencial clásico, pero se mantendrán en unos márgenes razonables.

312 4

Figura 7: Distribución por bloques trapezoidales.

En la figura 7 se han representado 4 bloques que aparecen sombreados . La idea básicadel algoritmo es la siguiente. Comenzamos a operar de abajo a arriba (es decir con índices de filas

decrecientes). Trabajamos primero con el bloque inferior , donde calculamos y aplicamos lasrotaciones J y K, y almacenamos las K.

51

Computación de la SVD

En el caso genérico (en la fig. 7 se ha representado para el segundo bloque trapezoidal):

1. Aplicamos las rotaciones K almacenadas, en el orden en que fueron calculadas (operacionesnúmero 1 y 2 de la figura).

2. Calculamos las rotaciones J y las aplicamos a todo el trapecio (operación 3 de la figura).3. Calculamos, aplicamos y almacenamos las rotaciones K a la zona triangular (operación 4 de

la figura). Esta operación es simultánea con la anterior.

El algoritmo detallado es:

para ib= NB-1, ..., 0 /* índice del bloque */para jb= NB-1, ..., ib+1 /* índice en el trapecio */

para i= jb+TB, ..., jb*(TB+1)-1/* con i<n-1 */j= i+1aplicar la rotación K previamente calculada, filas ib+TB, ..., ib*(TB+1)-1

para i= ib+TB, ..., ib*(TB+1)-1 /* filas del bloque trapezoidal */j= i+1calcular las rotaciones J y K.almacenar Kaplicar J al trapecioaplicar K al triángulo

Algoritmo 3: SVD por bloques trapezoidales.

Los resultados obtenidos se muestran en la tabla 2.

Matriz 1 2 3 4 5 6 7 8 9 10 11 12Tamaño 120 240 360 480 600 720 960 1080 1200 1440 1800 2160Tiempo 20 60 130 240 390 740 1590 1920 2430 3500 5370 8340MFlops 86.40 115.2 119.6 115.2 110.8 84.06 69.55 72.90 71.11 71.09 72.40 67.13

Tabla 2: Resultados del algoritmo por bloques.

Tal y como habíamos previsto los resultados son mucho mejores que en el algoritmo secuencial,alcanzándose el máximo para la matriz con n = 360, que llena perfectamente la antememoria. A partirde esa matriz las prestaciones decrecen, pero mucho más lentamente que el algoritmo secuencialclásico. La comparación con este algoritmo aparece en la tabla 4 (pag 62) y en la figura 8.

52

Computación de la SVD

����� ������� � ������� ������� ��������������������� �� ���

�������������� ����� �!�"�#� �����

$

%�$

&$

'�$

(�$

)*$�$

)*%�$

+,��������-./� ��0�����

Figura 8: MFlops de los algoritmos secuenciales (clásico y bloques)

5.2.4. Algoritmos paralelos.

5.2.4.1. Estudio del paralelismo en el algoritmo secuencial.

El algoritmo secuencial 1 expuesto en la página 44 es difícilmente paralelizable. En cadabarrido, el bucle básico: "para i= 1, ..., n-1" es inherentemente secuencial.

Efectivamente, sea el paso (iteración) i= i1 . Calcular, por ejemplo, la rotación J(θ ) requiereacceder a los elementos de R de índices (i1 ,i1 ), (i1 ,i1 +1) e (i1 +1,i1 +1), que, además, seránactualizados en este paso. El siguiente paso, i= i1 +1, necesitará acceder a los elementos de índices(i1 +1,i1 +1), (i1 +1,i1 +2) e (i1 +2,i1 +2). Por tanto, como el elemento (i1 +1,i1 +1) debe ser actualizadoen i= i1 , este paso no puede realizarse simultáneamente con el siguiente. Como el razonamiento esválido para todo i, el algoritmo, tal cual, no es paralelizable.

Por un razonamiento similar, concluimos que el algoritmo por bloques tampoco puedeparalelizarse.

5.2.4.2. Algoritmo paralelo basado en el orden par-impar.

Antes de rechazar el algoritmo, observemos que en la actualización básica no aparece ningunareferencia al orden en que se deben diagonalizar las submatrices 2x2. Simplemente se ha propuesto elorden más inmediato, que da una iteración convergente. La cuestión que nos planteamos es: otrosórdenes en la aplicación de las rotaciones, ¿darán algoritmos convergentes?. La propuesta dada porLuk en [9,11,63] es la utilización de un orden diferente, que denomina par-impar, y que expondremosa continuación.

La experiencia del autor de la presente memoria le induce a pensar que existen otros muchosórdenes que generan iteraciones convergentes, de hecho la única condición hallada en las pruebasrealizadas es que en cada barrido se apliquen todas las rotaciones, independientemente del orden. No seconoce una prueba de esta afirmación. Sin embargo el orden par-impar está probado y da buenosresultados.

Para construirlo, partimos del anterior razonamiento de secuencialidad. Para el paso i= i1 +2, loselementos de A accedidos para el cálculo de la rotación son (i1 +2,i1 +2), (i1 +2,i1 +3) e (i1 +3,i1 +3), quees evidente que no coinciden con los del paso i= i1 . ¿Cómo se extiende esta afirmación al resto de los

53

Computación de la SVD

datos?. La actualización básica (16) implica a las filas y las columnas de R, pues se aplican rotacionespor la izquierda y por la derecha a la matriz. Esto implica cruces fila - columna para todo valor de ique impiden la paralelización.

La clave está en separar ambos grupos de rotaciones. Tomemos las matrices J. Estas rotaciones,para i= i1 sólo implican las filas de R de índices i1 e i1 +1, que no interaccionan para nada con los filasdel paso i= i1 +2, que requiere los índices i1 +2 e i1 +3, según hemos razonado antes.

Podemos, pues, calcular simultáneamente todas las rotaciones J de índice impar. Acontinuación, para devolver la triangularidad, calculamos y aplicamos también simultáneamente lasrotaciones K de los índices impares.

Por tanto la propuesta es: realizar en paralelo las rotaciones de índice impar, es deciri= 1, 3, ..., y después, también en paralelo, las de índice par, i= 2, 4, ... .

El algoritmo final aparece en la página siguiente (algoritmo 4).

repetirconverge= verdaderopara i= 1, 3, 5, ...

j= i+1si Rij no es diagonal

converge= falsoCalcular y aplicar J(θ ) a partir de Rij .

para i= 1, 3, 5, ...j= i+1Calcular y aplicar K(φ ) a partir de Rij .

para i= 2, 4, 6, ...j= i+1si Rij no es diagonal

converge= falsoCalcular y aplicar J(θ ) a partir de Rij .

para i= 2, 4, 6, ...j= i+1Calcular y aplicar K(φ ) a partir de Rij .

hasta que converge o demasiados barridos

Algoritmo 4: SVD par-impar.

Obsérvese en él la ambigüedad en la terminación de los bucles "para". Dependerá si el tamañode la matriz, n, es par o impar. Una expresión para calcular el último índice de cada bucle (Fin) puedeser:

Fin(Ini)= (n-Ini+1) / 2 * 2 + Ini - 2, para Ini= 1, 2 .

Para distribuir la matriz triangular entre los procesadores, pueden usarse distintos modelos.Supóngase que se dispone de p procesadores, siendo n múltiplo de p, por simplicidad. El modo másinmediato es distribuir la matriz por bloques de filas consecutivas, es decir, asignando las filas1, ..., n/p al primer procesador (el 0), las filas n/p+1, ..., 2n/p al procesador 1, etc. No obstante estadistribución no parece muy conveniente para el algoritmo par-impar. Especialmente hay que señalarque produce un balance de carga pobre, limitando la eficiencia a 0.5.

54

Computación de la SVD

Lo más habitual, buscando un balance de carga correcto, es asignar las filas cíclicamente:

fila 1 2 ... p p+1 p+2 ... 2p 2p+1 ...procesador 0 1 ... p-1 0 1 ... p-1 0 ...

o bien de modo cíclico pero serpenteante:

fila 1 2 ... p p+1 p+2 ... 2p 2p+1 ...procesador 0 1 ... p-1 p-1 p-2 ... 0 0 ... .

En esta memoria no desarrollaremos este algoritmo, sino que construiremos otro basado en elmismo principio de paralelización, pero con otros criterios.

5.2.4.3. Algoritmo paralelo por bloques de filas.

Vamos a proponer ahora un algorimo que, basado en el orden secuencial, presenta un alto gradode paralelismo. Vamos a repartir la matriz por bloques de filas entre los distintos procesadores demodo cíclico serpenteante como se muestra en la figura 9 (n=24, p=4), buscando un balance de cargaóptimo. Cada procesador dispondrá de dos bloques de filas de la matriz, a los que denominaremosbloque grande y bloque pequeño atendiendo al número de elementos no nulos que contiene.

proc 0

proc 1

proc 2

proc 3

proc 3

proc 2

proc 1

proc 0

a a aa a a

a a aa a a

a a aa a a

a a a

1 1 1 2 1 24

2 2 2 3 2 24

3 3 3 4 3 24

4 4 45 4 24

55 5 6 5 24

6 6 6 7 6 24

7 7 7 8 7 24

00 00 00 00 00 00

, , ,

, , ,

, , ,

, ,

, ,

, , ,

, , ,

... ...... ...

... ...... ... ...... ... ... ...... ... ... ...... ... . .. ...... ... 0

0 00 00 00 00 00 00

8 8 8 9 8 24

9 9 9 10 9 24

10 10 10 11 10 24

11 11 11 12 11 24

12 12 12 13 12 24

13 13 13 14 13 24

14 14 14 15 14 24

a a aa a a

a a aa a a

a a aa a a

a a a

, , ,

, , ,

, , ,

, , ,

, , ,

, , ,

, , ,

... ...... ... ... ...... ... ... ...... . .. ... ...... ... ... ...... ... ... ...... ... ... ...... ... ... ...... ... .. . ...... ... ... ...... ... ... ...... ... ... ...... .. . ... ...... ... ....

, , ,

, , ,

, , ,

, , ,

, , ,

, , ,

, , ,

00 00 00 00 00 00 00

15 15 15 16 15 24

16 16 16 17 16 24

17 17 17 18 17 24

18 18 18 19 18 24

19 19 19 20 19 24

20 20 20 21 20 24

21 21 21 22 21 24

a a aa a a

a a aa a a

a a aa a a

a a a.. ...

... ...

... ...

, , ,

, ,

,

00 00 0

22 22 22 23 22 24

23 23 23 24

24 24

a a aa a

a

������������������������

������������������������

Fig 9: Distribución de la matriz.

El algoritmo opera en dos fases. En la fase 1, en cada procesador operamos según el ordensecuencial establecido en el algorimo 1, sobre las filas que tiene asignadas, en ambos bloques.

En la fase 2 deben calcularse las rotaciones restantes, que implican la última fila de un bloque yla primera del siguiente, de modo que hay que transferir filas de un procesador a otro. Existen diversascombinaciones para realizar tales transferencias, pero no todas dan un buen balance de carga.

Tras un detallado estudio, proponemos que la primera fila de cada bloque (fig 9) se envíe alprocesador que posee el bloque anterior, es decir, enviar la primera fila de cada bloque "hacia arriba".Evidentemente entre los bloques centrales no es necesario el envío, es una transferencia interna en elúltimo procesador , y en el primer bloque (asignado al procesador 0) no se envía nada. Para el cason=24, p=4, sería (figura 10):

Fase Proc. Opera con las filas (nº operaciones)

55

Computación de la SVD

0 1-2 (23) 2-3 (22) 22-23 (2) 23-24 (1)1 1 4-5 (20) 5-6 (19) 19-20 (5) 20-21 (4)

2 7-8 (17) 8-9 (16) 16-17 (8) 17-18 (7)3 10-11 (14) 11-12 (13) 13-14 (11) 14-15 (10)0 3-4 (21)

2 1 6-7 (18) 21-22 (3)2 9-10 (15) 18-19 (6)3 12-13 (12) 15-16 (9)

Figura 10: Actuación de los procesadores.

Obsérvese que la fase 2 comenzará al finalizar la fase 1. La operación con la última fila delbloque grande del último procesador y la primera fila del bloque pequeño del mismo procesador, filas12-13 en el ejemplo, es posible hacerla en la fase 1 pues los datos están disponibles. Pero el realizarlosupondría desequilibrar el algoritmo, que es síncrono y no voraz. Por ello la ejecutamos en la segundafase. Obsérvese que el balance de carga es teóricamente perfecto, pues el número de elementos sobrelos que actúa cada procesador es el mismo. Incluso en la fase 2 el número de operaciones realizadaspor el procesador 0 (filas 3-4 del ejemplo) es exactamente igual a la suma de las realizadas porcualquier otro procesador.

En cada una de las fases los cálculos JR se hacen localmente, pues los datos necesarios estándisponibles en cada procesador. En cambio las operaciones RK implican a las columnas de R, queestán distribuidas por los procesadores. Así, la aplicación de K es un cálculo distribuido. Lorealizaremos sin transferir elementos de las matrices, sólo enviando los parámetros c y s de lasrotaciones que integran K. Para optimizar las comunicaciones se envían en bloques, que serían den/2p-1 parejas (c,s) en la fase 1 y de una pareja en la fase 2. Aun así, la aplicación de K será elauténtico cuello de botella del algoritmo.

Denominemos Ka a las rotaciones K calculadas en el bloque grande y Kb a las calculadas en elbloque pequeño. Estas rotaciones se transmiten por un criterio de vecindad, siempre al procesadoranterior y se reciben del siguiente. Asumiendo una topología de anillo en la conexión de losprocesadores, el procesador anterior al primero es el último. Así pues, el algoritmo podráimplementarse en redes con las conectividades más simples. Lo mismo sucede, como ya hemosexplicado, con el transvase de filas para la ejecución de la fase 2: las filas se intercambian entreprocesadores vecinos.

En la figura 11 puede verse como se aplican las rotaciones recibidas en cada paso.

56

K0b K1a K1b

K1b K2a K2b

K2b K3a K3b

K3b K0b

K0b

local iP = 1

K2a K2b K3a K3b

K3a K3b K0b

K0b K1b

K1b K2b

K1b K2b

K0b K1b

K0b

iP = 2 iP = 3

Figura 11: Aplicación distribuida de las rotaciones, fase primera.

Cada una de las celdas representa un bloque cuadrado de n/2p elementos. Kia representa lasrotaciones calculadas en el procesador i en el bloque grande y Kib representa las rotaciones calculadasen el procesador i en el bloque pequeño. El índice iP es el número de la etapa de la aplicacióndistribuida según la nomenclatura que usaremos en la descipción del algoritmo 5 (pág 59).

Para la segunda fase, dado que las rotaciones calculadas por el bloque pequeño del procesador 0no las necesita nadie, el esquema de operaciones varía ligeramente, según puede verse en la figura 12.

57

Computación de la SVD

K0b K1a K1b

K1b K2a K2b

K2b K3a K3b

K3b

local iP = 1

K2a K2b K3a K3b

K3a K3b

K1b

K1b K2b

K1b K2b

K1b

iP = 2 iP = 3

Figura 12: Aplicación distribuida de las rotaciones, fase segunda.

Supondremos que ambos bloques (grande y pequeño) se almacenan contiguos en un array detamaño n/p n. El algoritmo para cada barrido aparece expuesto en las páginas 59 y 60 (algoritmos5a y 5b). Por simplicidad supondremos, como en el ejemplo, que n es múltiplo de 2p. De no serlobastaría con rellenar con ceros el último bloque.

Tras cada barrido es necesario comprobar si el algoritmo ha terminado. Partimos, en cadaprocesador, del conocimiento de la convergencia local e intercambiamos esta información con el resto,según el algoritmo 7. Al final de este algoritmo, la variable acabó dice si debe continuar la iteración delos barridos. Debe tenerse en cuenta si se alcanzó el número máximo de barridos.

El algoritmo 7 hace uso de las relaciones de vecindad, por coherencia con la estructura generaldel algoritmo. Su naturaleza es paralela si se usan envios no síncronos, el coste se reduce a una solaoperación en la mayoría de barridos, pasando a 3 operaciones en los últimos barridos. Si lasoperaciones de envío fueran síncronas, el algoritmo tendría carácter totalmente secuencial, con uncoste de p-1 operaciones de comunicación como mínimo, como se discute en [69].

No obstante, aprovechando la flexibilidad del PVM o el MPI (ver capítulo 3, pág. 30 y [37,45]),podemos desarrollar otro algorimo para el test de convergencia, que, con los mismos costes, es mássimple y aparece expuesto en la página 60 como algoritmo 6.

58

Computación de la SVD

Fase 1:/* cálculos locales */en el procesador Pk , k= 0, ..., p-1:

para i= 1, ..., n/2p-1 (índices locales, operaciones sobre el bloque grande)j= i+1calcular los parámetros c y s de J a partir de Rij , determinando la convergenciacalcular JR correspondientecalcular y acumular los parámetros c y s de Kaplicarlos a la zona triangular del trapecio

para i= n/2p, ..., n/p-1 (operaciones sobre la zona pequeña)proceder como antes

/* cálculos distribuidos */en el procesador P0:

para iP= 1, ..., p-1enviar Kb al procesador anterior (Pp-1 )recibir Ka y Kb del procesador siguiente (P1 )aplicarlas a los bloques correspondientes (fig 11)

en el procesador Pk , k= 1, ..., p-1:enviar Ka y Kb al procesador Pk-1

para iP= k+1, ..., p-1recibir Ka y Kb

enviar Ka y Kb

aplicar las rotaciones recibidaspara iP= 0, ..., k-1

recibir Kb

si iP ≠ k-1enviar Kb

aplicar/* Transferencia de filas */en el procesador Pk , k= 1, ..., p-2:

enviar la primera fila del bloque grande (fig 9) al procesador Pk-1

enviar la primera fila del bloque pequeño al procesador Pk+1

en el procesador P0:enviar la primera fila del bloque pequeño a P1

en el procesador Pp-1:enviar la primera fila del bloque grande a Pp-2

en el procesador Pk , k= 0, ..., p-1:recibir la(s) fila(s) correspondientes

Algoritmo 5a: SVD paralelo fase 1.

59

Computación de la SVD

Fase 2:/* cálculo local */en el procesador Pk , k= 1, ..., p-1:

en ambos bloques (grande y pequeño, fig 9) operar como en la fase 1 con J, usando laúltima fila y la recibida: i= n/2p , j= i+1

en el procesador P0 :en el bloque grande (fig 9) operar como en la fase 1 con J, con i= n/p , j= i+1

/* cálculo distribuido */en el procesador P0:

para iP= 1, ..., p-1si iP > 1

enviar Kb

recibir Ka y Kb

aplicaren el procesador Pk , k= 1, ..., p-1:

enviar Ka y Kb

para iP= k+1, ..., p-1recibir Ka y Kb

enviar Ka y Kb

aplicar las rotaciones recibidaspara iP= 1, ..., k-1

recibir Kb

si iP ≠ k-1enviar Kb

aplicaren el procesador Pk , k= 0, ..., p-1:

enviar la(s) fila(s) anteriormente recibida(s) al procesador origenen el procesador Pk , k= 0, ..., p-1:

recibir la(s) fila(s) correspondientes

Algoritmo 5b: SVD paralelo fase 2.

en P0 :enviar acabó al resto de los procesadores (una operación)si acabó

recibir el estado de convergencia del resto de procesadores, hacer una operaciónOR y almacenar en acabó.enviar acabó al resto de los procesadores como antes

en Pk , k= 1, ..., p-1:test= acabórecibir acabó de P0

si acabóenviar test a P0

recibir acabó de P0

Algoritmo 6: Convergencia para topología general.

60

Computación de la SVD

en P0 :acabó= todas las rotaciones fueron la identidad (en este procesador)si acabó

enviar acabó a P1

recibir acabó de Pp-1

enviar acabó de nuevo a P1

si envió (recibió) acabó = verdaderorecibir acabó de Pp-1 /* sólo desbloquea */

si noenviar acabó a P1

recibir acabó de Pp-1 /* falso, seguro */en Pk , k= 1, ..., p-1:

establecido acabó, auxi= acabórecibir acabó de Pk-1

si acabóacabó= auxienviar acabó a Pk+1

recibir acabó de Pk-1

si auxienviar acabó a Pk+1

si noenviar acabó a Pk+1

Algoritmo 7: Convergencia circular.

5.2.4.4. Resultados experimentales.

Para ajustar la distribución de la matriz en bloques de igual número de filas hemos decididoemplear 2, 3, 4, 5, 6, 8 y 10 procesadores con los tamaños de matriz adecuados. En la tabla 3aparecen los tiempos de ejcución del algoritmo en milisegundos para veinte iteraciones. Se hanrealizado las pruebas completas para una muestra, pero por cuestiones de carga del ordenador y paraobservar el grado de paralelización preferimos usar siempre el mismo número de iteraciones.

ParaleloTamaño Secuen. Bloques 2 3 4 5 6 8 10

120 20 20 20 46 84 129 169 273 340240 60 60 37 62 98 143 179 259 342360 130 130 63 81 116 144 185 274 369480 330 240 132 128 149 168 192 281 374600 470 390 151 149 165 189 227 293 385720 1280 740 207 202 218 242 268 326 405960 2730 1590 474 309 286 307 320 389 472

1080 3530 1920 1031 492 356 360 328 421 4901200 4740 2430 1648 556 419 366 361 389 4441440 7490 3500 2644 1432 730 562 489 472 5411800 13370 5370 5124 3204 2191 1500 972 694 6922160 20180 8340 8616 5449 3937 2991 2375 1505 965

Tabla 3: Tiempos de ejecución en milisegundos para 20 iteraciones.

61

Computación de la SVD

ParaleloTamaño Secuen. Bloques 2 3 4 5 6 8 10

120 86.4 86.4 86.4 37.57 20.57 13.4 10.22 6.33 5.08240 115.2 115.2 186.81 111.48 70.53 48.34 38.61 26.69 20.21360 119.63 119.63 246.86 192.00 134.07 108.00 84.06 56.76 42.15480 83.78 115.20 209.45 216.00 185.56 164.57 144.00 98.39 73.93600 91.91 110.77 286.09 289.93 261.82 228.57 190.31 147.44 112.21720 48.60 84.06 300.52 307.96 285.36 257.06 232.12 190.82 153.60960 40.51 69.55 233.32 357.90 386.69 360.23 345.60 284.30 234.31

1080 39.65 72.90 135.76 284.49 393.17 388.80 426.73 332.47 285.651200 36.46 71.11 104.85 310.79 412.41 472.13 478.67 444.22 389.191440 33.22 71.09 94.11 173.77 340.87 442.76 508.86 527.19 459.951800 29.08 72.40 75.88 121.35 177.45 259.20 400.00 560.23 561.852160 27.74 67.13 64.98 102.75 142.21 187.19 235.74 372.01 580.18

Tabla 4: MFlops.

Tamaño 2 3 4 5 6 8 10120 1.00 0.43 0.24 0.16 0.12 0.07 0.06240 1.62 0.97 0.61 0.42 0.34 0.23 0.18360 2.06 1.60 1.12 0.90 0.70 0.47 0.35480 1.82 1.88 1.61 1.43 1.25 0.85 0.64600 2.58 2.62 2.36 2.06 1.72 1.33 1.01720 3.57 3.66 3.39 3.06 2.76 2.27 1.83960 3.35 5.15 5.56 5.18 4.97 4.09 3.37

1080 1.86 3.90 5.39 5.33 5.85 4.56 3.921200 1.47 4.37 5.80 6.64 6.73 6.25 5.471440 1.32 2.44 4.79 6.23 7.16 7.42 6.471800 1.05 1.68 2.45 3.58 5.52 7.74 7.762160 0.97 1.53 2.12 2.79 3.51 5.54 8.64

Tabla 5: Speed up respecto al algoritmo por bloques.

Tamaño 2 3 4 5 6 8 10120 1.00 0.43 0.24 0.16 0.12 0.07 0.06240 1.62 0.97 0.61 0.42 0.34 0.23 0.18360 2.06 1.60 1.12 0.90 0.70 0.47 0.35480 2.50 2.58 2.21 1.96 1.72 1.17 0.88600 3.11 3.15 2.85 2.49 2.07 1.60 1.22720 6.18 6.34 5.87 5.29 4.78 3.93 3.16960 5.76 8.83 9.55 8.89 8.53 7.02 5.78

1080 3.42 7.17 9.92 9.81 10.76 8.38 7.201200 2.88 8.53 11.31 12.95 13.13 12.19 10.681440 2.83 5.23 10.26 13.33 15.32 15.87 13.841800 2.61 4.17 6.10 8.91 13.76 19.27 19.322160 2.34 3.70 5.13 6.75 8.50 13.41 20.91

Tabla 6: Speed up respecto al algoritmo secuencial.

Las figuras 13 y 14 muestran gráficamente los resultados.

62

Computación de la SVD

% & ' )*$

���"��������������"� �

)*%�$%!&�$��'�$&�(�$'�$�$��%�$��'�$)*$�(�$)*%�$�$) &�&$) (�$�$%�) '�$

�������������� �� �!�"��� �

$%&'()*$

+/����� ��� ��������!�!������� ��� ��-��������� ��0�����

)*%�$%!&�$��'�$&�(�$'�$�$��%�$��'�$)*$�(�$)*%�$�$) &�&�$)*(�$�$%�)*'�$

)*%�$ &�(�$ ��'�$ ) &�&$

����� ��������� � � �!�"�#� �

%�&�'(

)*$

����������������������

$%&'()*$

+/����� ��� ��������!�!������� ��� ��-��������� ��0�����%�

&�

'()*$

Fig 13 Speed up respecto alg. bloques. Fig 14

% & ' ) $

������������������ ���

)*%�$% &�$��'�$&�(�$'�$�$��%�$��'�$

)*$�(�$)*%�$�$) &�&�$)*(�$�$%�)*'�$

����� �������� �� �!����� �

$�

) $)�%�$%��

+/����� �����"������!�!� � ���!�� ��-!������������� ���

)*%�$%!&�$��'�$&�(�$'�$�$��%�$��'�$)*$�(�$)*%�$�$) &�&�$)*(�$�$%�)*'�$

)*%�$ ��'�$ '�$�$ ��'�$ )*%�$�$ )*(�$�$

����� ���� ���� � ���!����� �

%�

&�

'(

)*$

����������������������

$

)*$

)��

%�$

% �

+/����� ��� ��������!�!������� ��� ��- ������������ ���

%�

&�

'()*$

Fig 15 Speed up respecto alg. secuencial. Fig 16

Como puede observarse, para matrices pequeñas, el speed up disminuye con el número deprocesadores, siendo menor que 1. El resultado es, pues, contrario al deseado, pero era de esperar. Larazón es simple: el número de filas por procesador es cada vez más bajo, y teniendo en cuenta lacapacidad computacional del procesador, las comunicaciones disminuyen las prestaciones delalgoritmo.

63

Computación de la SVD

En cambio para matrices mayores, a partir de 480, comienzan a alcanzarse speed upssuperiores a 1, pero para muchos procesadores, sigue bajando. Es ya en matrices grandes (n > 1000)donde el algoritmo comienza a dar los resultados deseados.

����� ��� � � ����� '�� � ��" '

En este capítulo hemos expuesto los métodos fundamentales para la computación de la SVD. yhemos perfilado la posible paralelización de los mismos.

En el marco de este trabajo, el interés de tales métodos estriba en que sirven de base para lacomputación de la PSVD, que expondremos en el capítulo siguiente.

Hemos realizado una implementación completa del método de Kogbetliantz, que nos será deutilidad para la paralelización del método implícito correspondiente para la PSVD. Hemos mostradoasímismo como puede alcanzarse un alto grado de paralelismo con una ligera modificación delalgoritmo, obteniendo buenas eficiencias en la implementación paralela. También hemos mostrado elefecto de la saturación de las antememorias y como un algoritmo por bloques lo reduce.

No hemos paralelizado los métodos de Golub y Reinsch y de Demmel y Kahan porque sedisponen implementaciones eficientes de los mismos en la librería ScaLAPACK, donde se haparalelizado el proceso de bidiagonalización. Tampoco hemos comparado nuestros resultados con losde esta librería, pues no es el objetivo de este trabajo; esta comparación la realizaremos para la PSVD.

La extensión de la bidiagonalización a dos matrices es un proceso de bidiagonalización implícitaque permitirá el cálculo de la PSVD. El método se expone el el capítulo siguiente, donde procederemosa su paralelización y a comparar los distintos métodos.

64

Computación de la SVD

6. Computación de la PSVD.

En este capítulo, eje de esta tesis, expondremos los métodos fundamentales para la computaciónde la descomposición en valores singulares del producto de dos matrices. Realizaremosimplementaciones secuenciales por bloques y paralelas de los mismos, utilizando diferentesparadigmas de programación y diferentes arquitecturas paralelas.

� ����� ����� ����� ��"���� ����"������ ��� � � �

Este método es el primero que se desarrolló [32], y, como en el caso de la SVD permite obteneruna buena precisión numérica en los resultados. Las operaciones básicas son las rotaciones lo quepermitirá realizar algoritmos de cualquier granularidad. Las prestaciones las discutiremos al final delcapítulo.

6.1.1. Algoritmo secuencial.

En el capítulo 2, presentamos la PSVD del producto AB como una forma general para losdistintos casos que se presentan en las aplicaciones, concretamente en la computación de lasrealizaciones balanceadas, donde aparecen productos de la forma A TB o AB T. La descomposición deAB queda, pues, formulada según

U TAQ = ΣA R , Q TBV = R -1ΣB . (18)

El algoritmo puede construirse a partir del algoritmo 1 (página 44) para la SVD y aparecepropuesto en [32] para el par producto AB T. Un algoritmo anterior para el producto de dos matricespuede encontrarse en [47].

El método puede considerarse un Kogbetliantz implícito. Supongamos dos matrices A ∈ Rnxn yB ∈ Rnxn, ya en forma triangular superior (quizás tras una descomposición QR).

Sean Aij y Bij submatrices principales 2x2 de A y B respectivamente, como en el algoritmo parala SVD. Las utilizaremos como base para calcular las rotaciones que aplicaremos a A y B.Denominemos genéricamente A u y B u a las sucesivas actualizaciones de A y B al aplicar dichasrotaciones.

Consideremos la matriz Cij = Aij Bij . El método consiste en diagonalizar esta matriz como en elcaso de la SVD, es decir buscar dos rotaciones J(θ ) y K(φ ), tales que J(θ )TCij K(φ ) sea diagonal.Entonces calculamos

A u⇐ J(θ )TA uL(ϕ ) y B u ⇐ L(ϕ )TB uK(φ ). (19)

Elegiremos la rotación L(ϕ ) tal que devuelva tanto a A u como a B u su forma triangularsuperior, para que sea posible aplicar otra actualización. Se puede calcular a partir de cualquiera delas matrices y devuelve la triangularidad a ambas. Obsérvese que la acumulación de lastransformaciones L(ϕ ) forma la matriz Q de la PSVD definida en (18).

Por construcción, en cada barrido el producto A uB u se aproxima cada vez más a la formadiagonal. Obsérvese que este producto nunca es calculado. El proceso iterativo se da por finalizadosiguiendo el mismo criterio que en al algoritmo SVD. Al final de los barridos, A u es triangular

65

Computación de la PSVD

superior, y si ΣA es una matriz diagonal definida no negativa, A u = ΣA R, y por ser A uB u diagonal,necesariamente B u = R -1ΣB .

Como en el algoritmo SVD, basta tomar j = i+1, es decir, trabajar sólo con la primerasubdiagonal superior de A y B. El algoritmo 8a resume lo expuesto.

repetirconverge= verdaderopara i= 1, ..., n-1

j= i+1si Cij = Aij Bij no es diagonal

converge= falsoCalcular J(θ ) y K(φ ) a partir de Cij

A= J(θ )TAB= BK(φ )calcular L(ϕ )A= AL(ϕ )B= L(ϕ )TB

hasta que converge o se alcanza el máximo de barridos

Algoritmo 8a: PSVD Kogbetliantz secuencial.

El algoritmo 8a sólo calcula los valores singulares. Si además queremos calcular los vectoressingulares, debemos acumular las transformaciones J y K para construir las matrices U y V, lo que semuestra en el algoritmo 8b.

U=IV=Irepetir

converge= verdaderopara i= 1, ..., n-1

j= i+1si Cij = Aij Bij no es diagonal

converge= falsoCalcular J(θ ) y K(φ ) a partir de Cij

A= J(θ )TAU= J(θ )TUB= BK(φ )V= VK(φ )calcular L(ϕ )A= AL(ϕ )B= L(ϕ )TB

hasta que converge o se alcanza el máximo de barridos

Algoritmo 8b: PSVD Kogbetliantz secuencial con vectores singulares.

Una forma alternativa empleada para los vectores singulares en la SVD es acumular sólo una delas matrices, sea V y obtener U a partir de A, Σ y V. Este procedimiento no puede emplearse ahorapues habría que hacerlo a partir de

66

Método de Kogbetliantz en Memoria Compartida

ABV = UΣA ΣB ,

implicando el producto AB que es justo lo que tratamos de evitar.

El coste teórico del algoritmo lo podemos establecer para cada barrido:

- Cálculo de las rotaciones J(θ ), K(φ ): 28 flops, i= 1, ..., n-1 .- Aplicación de las rotaciones: 6(n-i+1) + 6(i+1), i= 1, ..., n-1 .- Cálculo de L(ϕ ): 5 flops, i= 1, ..., n-1 .- Aplicación de la rotación: 6(n-i+1) + 6(i+1), i= 1, ..., n-1 .

La expresión final, contando algunas operaciones auxiliares y el cálculo de los valoressingulares (n flops) es

13 + barridos*((6*(2*n+4) + 35) * (n-1) + 1) + n,

es decir del orden de n2 por cada barrido y multiplicado por el número de barridos.Concretamente podemos dar como expresión aproximada

barridos*12*n2,

que será válida para todos los algoritmos tipo Kogbetliantz para la computación de la PSVDexpuestos en esta memoria.

Si además introducimos el cálculo de los vectores singulares, el coste del algoritmo seincrementa en:

- Cálculo de los vectores singulares: 2(6n), i= 1, ..., n-1 .

El coste total es, pues,

13 + barridos*((6*2*n + (6*(2*n+4)) + 35) * (n-1) + 1) + n,

es decir aproximadamente

barridos*24*n2.

Detengámonos un momento a observar la fácil extensión del método a la computación de laQSVD de A y B. Basta con partir de A y B en forma triangular superior y tomar Cij = Aij adj(Bij), yaque no siempre será posible tomar la inversa de Bij , pues puede no existir. En el algoritmo 9 semuestra cómo deben realizarse la actualizaciones, de modo que al final de la iteración, tendremos queA se ha transformado en ΣA R, y B en ΣB R, lo que nos lleva a la QSVD, según (5), página 5.

Ambos algoritmos combinados nos llevan a un algortimo para la RSVD de A, B, y D [95].Tomamos Cij = adj(Bij)Aij adj(Dij), y el resto es equivalente. El preprocesamiento de las matrices A, By D se basa en aplicaciones sucesivas de la descomposición QR y puede verse en [94].

67

Computación de la PSVD

repetirconverge= verdaderopara i= 1, ..., n-1

j= i+1si Cij = Aij adj(Bij) no es diagonal

converge= falsoCalcular J(θ ) y K(φ ) a partir de Cij

A= J(θ )TAB= K(φ )TBcalcular L(ϕ )A= AL(ϕ )B= BL(ϕ )

hasta que converge o se alcanza el máximo de barridos

Algoritmo 9: QSVD Kogbetliantz secuencial.

6.1.1.1. Resultados experimentales del algoritmo secuencial.

Se han realizado experimentos sobre las arquitecturas descritas en el capítulo 4, página 34. Losresultados son comparables sólo en cuanto al comportamiento del algoritmo, pero no en cuanto a lasprestaciones obtenidas, pues se trata de arquitecturas muy diferentes. Las implementaciones se hanrealizado en C en la mayoría de los casos y en FORTRAN en algunos.

Se ha observado que el número de barridos es, como se esperaba, proporcional al tamaño de lasmatrices (n). Así, el coste total es proporcional a n3, como era de esperar. Además se ha podidocomprobar experimentalmente, que el número de barridos es del orden de 4n, para alcanzar laconvergencia dentro de una cota de error satisfactoria. No obstante, matrices muy grandes superanescasamente esta cota, por lo que hemos dado como límite de los barridos el valor 5n. Todo elloutilizando matrices de valores aleatorios generados como se expuso en la página 50.

La elección de los tamaños de las matrices de prueba no es arbitraria. Ante todo no sonpotencias de 2, algo que nos preocupará al ocuparnos de la forma de acceder a la memoria. Hemoselegido para estas pruebas múltiplos de 3 y de 5 combinados de diversas formas. Ello permiteconstruir divisiones en bloques perfectos, los que nos conviene para los algoritmos por bloques y paramemoria distribuída.

La tabla 7 muestra los tiempos totales obtenidos en la ejecución del algoritmo secuencial en dosde las arquitecturas experimentadas, el Alliant FX/80 y el Transputer. Representando los tiemposobtenidos respecto a barridos*n2 podemos verificar la linealidad esperada, tal y como aparece en lafigura 17.

Tamaño 15 45 135 405Alliant 0.096 2.36 61.9 1844

Transputer 0.598 13.66 372.7 11157

Tabla 7: Tiempos de ejecución del algoritmo secuencial en las arquitecturas indicadas.

68

Método de Kogbetliantz en Memoria Compartida

� � ��� �����������!������ ��������������� � ����#��� ������#���

$�- $�)

$�- )

)

)*$

)*$�$

) $�$�$

)*$�$�$�$

)*$�$�$�$�$

�� ��� � �� � �� � � �� � �� �� � �� �� � �

� � � � ������ �"���������� ��

Fig. 17: Tiempos de ejecución del algoritmo secuencial en función de barridos*n².

6.1.1.2. Estudio del paralelismo en el algoritmo secuencial.

El algoritmo secuencial (algoritmo 8) expuesto en la página 66 es difícilmente paralelizable. Encada barrido, el bucle básico: "para i= 1, ..., n-1" es inherentemente secuencial, como sucedía en elalgoritmo 1, página 44, para el cálculo de la SVD.

Efectivamente, sea el paso (iteración) i= i1 . Calcular, por ejemplo, la rotación J(θ ) requiereacceder a los elementos de A de índices (i1 ,i1 ), (i1 ,i1 +1) e (i1 +1,i1 +1), que además, serán actualizadosen este paso. El siguiente paso, i= i1 +1, necesitará acceder a los elementos de índices (i1 +1,i1 +1),(i1 +1,i1 +2) e (i1 +2,i1 +2). Por tanto, como el elemento (i1 +1,i1 +1) debe ser actualizado en i= i1 , estepaso no puede realizarse simultáneamente con el siguiente. Como el razonamiento es válido para todoi, el algoritmo, tal cual, no es paralelizable.

6.1.2. Computación paralela en el modelo de memoria compartida.

Como hemos expuesto en capítulo 4 (página 22), los multicomputadores con memoriacompartida (o virtualmente compartida) permiten ser programados mediante un modelo deprogramación específico. Para este modelo hemos desarrollado el algoritmo paralelo de Kogbetliantzbasado en el orden par-impar.

6.1.2.1. Algoritmo paralelo basado en el orden par-impar.

������� ��������������� ���! �" #%$&�('*)+ ),� -�� �.�

Vamos a seguir un razonamiento equivalente al empleado en la página 53 para la SVD. Antesde rechazar el algoritmo secuencial, observemos que en la actualización básica (19), expuesta en lapágina 65, no aparece ninguna referencia al orden en que se deben diagonalizar las submatrices 2x2.Simplemente se ha propuesto para el algoritmo PSVD el orden más inmediato, que da una iteraciónconvergente. La cuestión que nos planteamos es: otros órdenes en la aplicación de las rotaciones,¿darán algoritmos convergentes?. La propuesta dada por Luk en [9,11,63] es la utilización de un ordendiferente, que denomina par-impar, y que expondremos a continuación.

Para construirlo, partimos, de nuevo, del anterior razonamiento de secuencialidad. Para el pasoi= i1 +2, los elementos de A accedidos para el cálculo de la rotación son (i1 +2,i1 +2), (i1 +2,i1 +3) e(i1 +3,i1 +3), que es evidente que no coinciden con los del paso i= i1 . ¿Cómo se extiende estaafirmación al resto de los datos?. La actualización básica (19) implica a las filas y las columnas de A yde B, pues se aplican rotaciones por la izquierda y por la derecha a ambas matrices. Esto implica

69

Computación de la PSVD

cruces fila - columna para todo valor de i que impide la paralelización. Por ejemplo, al aplicar unarotación Lk,k+1 (ϕ ) a A, todas las filas de índices i < k de A quedan implicadas, pero son necesariaspara calcular todas las rotaciones Ji(θ ), como muestra la figura 18.

J

Jk

i

Lk

Figura 18: Filas/columnas implicadas en el cálculo de las rotaciones.

La clave está en separar ambos grupos de rotaciones. Tomemos las matrices J(θ )T y K(φ ). En(19) se aplican a matrices distintas. Estas rotaciones, para i= i1 sólo implican las filas (columnas) deA (de B) de índices i1 e i1 +1, que no interaccionan para nada con los filas (columnas) del pasoi= i1 +2, que requiere los índices i1 +2 e i1 +3, según hemos razonado antes.

Podemos calcular, pues, todas las rotaciones J(θ )T y K(φ ) de la pasada impar,simultáneamente. A continuación, para devolver la triangularidad, calculamos y aplicamos lasrotaciones L(ϕ ).

Por tanto la propuesta es: realizar en paralelo las rotaciones de índice impar, es deciri= 1, 3, ..., y después, también en paralelo, las de índice par, i= 2, 4, ... , como se expone en elalgoritmo 10.

Obsérvese la ambigüedad en la terminación de los bucles "para". Dependerá si el tamaño de lamatriz, n, es par o impar. Una expresión para calcular el último índice de cada bucle (Fin) puede ser:

Fin(Ini)= trunc((n-Ini+1) / 2) * 2 + Ini - 2, para Ini= 1, 2

En la figura 19, mostramos cómo se organizaría una posible realización para 3 procesadores yn=12 y en la figura 20 para n=15.

impar 12par

proc 0 proc 1 proc 2

proc 0 proc 1 proc 2

1 2 3 4 5 6 7 8 9 10 111 2 3 4 5 6 7 8 9 10 11 12

− − − − − −− − − − −

� �������� �������� � �������� ������� � �������� ��������

���� ��� �������� ������� ������������ �����������

Figura 19: Planificación del alg. par-impar para n=12 y p=3.

70

Método de Kogbetliantz en Memoria Compartida

impar 14par

proc 0 proc 1 proc 2

proc 0 proc 1 proc 2

1 2 3 4 5 6 7 8 9 10 11 12 13 151 2 3 4 5 6 7 8 9 10 11 12 13 14 15

− − − − − − − − −− − − − −

� ���������� ���������� � ���������� ���������� � ������������ ������������

� ������ �������� � ������� � ���������� � ��������������� ����������������

Fig. 20: Planificación del alg. par-impar para n=15 y p=3.

repetirconverge= verdaderopara i= 1, 3, 5, ...

j= i+1si Cij = Aij Bij no es diagonal

converge= falsoCalcular y aplicar J(θ ) y K(φ ) a partir de Cij

para i= 1, 3, 5, ...j= i+1Calcular y aplicar L(ϕ ) a partir de A o B.

para i= 2, 4, 6, ...j= i+1si Cij = Aij Bij no es diagonal

converge= falsoCalcular y aplicar J(θ ) y K(φ ) a partir de Cij

para i= 2, 4, 6, ...j= i+1Calcular y aplicar L(ϕ ) a partir de A o B.

hasta que converge o demasiados barridos

Algoritmo 10a: PSVD par-impar.

El algoritmo 10b muestra cómo se puede implementar directamente el algoritmo 10 con elmodelo de programación en memoria compartida. Obsérvese que el uso de la variable ini y el vectorfin permite unificar las operaciones de ambas pasadas, par e impar. En este algoritmo calculamostambién los vectores singulares. Es de notar que las rotaciones L(ϕ ) que integran la matriz Q definidaen (18) se calculan pero no se acumulan, dado que el cálculo de Q carece de interés.

������� ������� ����� " � #% �"�������" ������- � ����� )�# �������*)+� )�����-���-��*)+ �� )+�

La naturaleza de la programación en memoria compartida y la disponibilidad de una memoriavirtual paginada en las arquitecturas utilizadas (Alliant y Silicon) nos inclinan en principio a nopreocuparnos excesivamente de la optimización del uso de la memoria, aunque el seguimiento de laejecución de los programas será quien tendrá la última palabra. Así, pues, el modo de programar enmemoria compartida nos induce a almacenar las matrices A y B como tales, es decir, cada una en unamatriz Fortran.

Respecto al balance de carga, ¿la carga computacional se reparte uniformemente?. La respuestaes, por fortuna, afirmativa. Si elegimos el bucle exterior para ejecución concurrente y para una posiblevectorización los bucles interiores de aplicación de rotaciones, para cada valor de i, la cargacomputacional en la aplicación de las rotaciones por la izquierda a A es decreciente, concretamente, lalongitud de la fila es n-i+1. En cambio, la rotación por la derecha de B es de coste creciente, pues setrata de columnas de longitud i+2. Por ello el total de carga computacional para cualquier i esconstante y proporcional a n+3. Dado que las distintas iteraciones se asignan a distintos procesadoresy cada una tiene el mismo coste, el balance de carga es, a grosso modo, perfecto.

71

Computación de la PSVD

para ini=1,2 fin(ini)= (n-ini+1) / 2 * 2 + ini - 2U= IV= Irepetir

converge= verdaderopara ini= 1,2

para i= ini, ..., fin(ini) de 2 en 2j= i+1si Cij = Aij Bij no es diagonal

converge= falsoCalcular J(θ ) y K(φ ) a partir de Cij

A= J(θ )TA (columnas afectadas i:n)U= J(θ )TU (columnas afectadas 1:n)B= BK(φ ) (filas afectadas: 1:j)V= VK(φ ) (filas afectadas: 1:n)

para i= ini, ..., fin(ini) de 2 en 2j= i+1calcular L(ϕ )A= AL(ϕ ) (filas afectadas: 1:j)B= L(ϕ )TB (columnas afectadas i:n)

hasta que converge o se alcanza el máximo de barridos

Algoritmo 10b: PSVD par-impar en memoria compartida.

������� ������� �����.-������ #�) ����� -�� '�-� �"�$&-�� # )+� -�� -�� -���������" )�� # � ��� ����������" � ��-����

En la tabla 8 se exponen los resultados de la ejecución del algoritmo secuencial. Se hanrepresentado los barridos, el tiempo empleado en segundos y los MegaFlops obtenidos. Lanomenclatura empleada en la tabla es la expuesta en el capítulo 4 (página 36), donde g significaoptimización global (ordinaria) del compilador, y está presente en todas las pruebas, v significavectorización y c concurrencia. Se puede comparar la diferencia entre una compilación con la directivag, otra con gv (vectorización) y otra con gc (paralelización), ejecutando esta última en 1 procesador.En la figura 21 se muestran los mismos resultados gráficamente.

Tamaño Barridosg

Tiempo MFlopsgv

Tiempo MFlopsgc en 1

Tiempo MFlops15 38 0.096 1.32 0.068 1.88 0.11 1.1345 147 2.36 1.64 1.16 3.34 2.81 1.38

135 474 61.9 1.74 24.7 4.31 73.8 1.44405 1670 1843.7 1.80 759 4.38 2206 1.50675 2687 8715 1.70 3666 4.03 10434 1.42

1215 5038 53290 1.68 23416 3.82

Tabla 8: Barridos y tiempos de ejecución del algoritmo secuencial.

72

Método de Kogbetliantz en Memoria Compartida

� � ��� ������ � ��� ���� ���� ��� �����#� ����� ������������ ���

����� ��������� �!� � �!����� �����

�,� ��� ��

$- $�)

$�- )

)

)*$

)*$�$

)*$�$�$

)*$�$�$�$

) $�$�$�$�$

)�� &� )���� &�$ � ' � � )*%�)�$

$�- �

)

) - �

%

%�- �

��- �

&

& - �

����� ����

� � ��� ����� � ��� ������� � ��� ��������� ��������� ����������� ��������

Figura 21: Tiempos y MFlops del algoritmo secuencial.

Puede observarse que:- La introducción de la vectorización da un incremento de velocidad del orden de 2.4, constante

para la gama de tamaños cuando las matrices crecen lo suficiente. Para tamaños menoresel factor es mucho menor como se esperaba, debido a que el coste de llenar las pipesvectoriales no se ve compensado por el reducido tamaño de las operaciones. De hecho,para tamaños todavía menores es probable que el incremento de velocidad fuera menorque uno.

- Los tiempos de computación de matrices grandes van más allá de lo razonable. Estos nosinduce a no ejecutar el algoritmo completo en las pruebas de los algoritmos paralelos.Como se trata de obtener las prestaciones, en los algoritmos paralelos nos limitaremos a10 barridos, lo que ha probado experimentalmente ser suficiente para llegar a unasituación estable de prestaciones. Además los cálculos de MFlops presentados para laejecución completa no son exactos, pues los últimos barridos apenas si realizanoperaciones, ya que hay muchos ceros.

- Para matrices muy grandes, la monitorización de la ejecución nos indica que nuestro programasatura la memoria central de 64 MBytes del Alliant. Los programas se ejecutaron con lamáquina completamente vacía, solo con este proceso. Ello arrojó tiempos reales deejecución ¿razonables? en comparación con los tiempos de CPU, del orden de un 60% deaprovechamiento. Dado que en este ordenador el administrador no ha organizado unsistema de colas que permita la ejecución dedicada, una ejecución en tiempo compartido,propia de este tipo de ordenador, nos daría unos tiempos reales insostenibles. El tiempoempleado en la carga y descarga de nuestro proceso en memoria durante el contextswitching harían caer las prestaciones globales de la máquina a valores mínimos.

Los resultados numéricos de la ejecución del algoritmo paralelo para distintos procesadores seexponen en la tabla 9 y en la figura 22. La nomenclatura se interpretará del siguiente modo: g significaoptimización global (ordinaria) del compilador, y está presente en todas loas pruebas; v significavectorización, c concurrencia (ejecución paralela), y se acompaña del número de procesadores.

73

Computación de la PSVD

Tamaño g gv gc1 gc4 gc8 gcv1 gcv4 gcv815 1.28 1.77 0.90 2.99 4.4 1.16 3.54 6.0145 1.43 2.97 1.04 3.81 7.2 2.00 6.85 11.70

135 1.47 3.51 1.05 4.08 7.4 2.54 9.40 13.94405 1.33 3.02 1.01 3.85 6.78 2.42 7.63 10.15675 1.33 3.05 1.00 3.77 6.50 2.40 6.82 9.23

1215 1.32 2.95 1.00 3.76 6.53 2.29 6.86 8.412025 1.28 2.48 0.98 3.62 6.22 1.63 5.20 6.94

Tabla 9: Prestaciones en Mflops del algoritmo par-impar.

Los incrementos de velocidad los hemos calculado no respecto al secuencial sino respecto alalgoritmo más adecuado para extraer conclusiones: gv respecto a g, gcx respecto a g, y gcvx respectoa gv. Esto se aleja, evidentemente, de la definición estricta de speed up, pero en nuestro caso nosinteresa ante todo analizar la calidad de la paralelización. Se exponen en la tabla 11 y en la figura 23.La tabla y la figura muestran la eficiencia del algoritmo.

Tamaño gv gc1 gc4 gc8 gcv1 gcv4 gcv815 1.38 0.70 2.34 3.44 0.66 2.00 3.4045 2.08 0.72 2.66 5.03 0.67 2.31 3.94

135 2.39 0.71 2.78 5.03 0.72 2.68 3.97405 2.27 0.76 2.89 5.10 0.80 2.53 3.36675 2.29 0.75 2.83 4.89 0.79 2.24 3.03

1215 2.23 0.76 2.85 4.95 0.78 2.33 2.852025 1.93 0.77 2.82 4.86 0.66 2.10 2.80

Tabla 10: Incremento de velocidad del alg. de orden par-impar.

Tamaño gc1 gc4 gc8 gcv1 gcv4 gcv815 0.70 0.59 0.43 0.66 0.5 0.4345 0.72 0.67 0.63 0.67 0.58 0.49

135 0.71 0.7 0.63 0.72 0.67 0.5405 0.76 0.72 0.64 0.80 0.63 0.42675 0.75 0.71 0.61 0.79 0.56 0.38

1215 0.76 0.71 0.62 0.78 0.58 0.362025 0.77 0.71 0.61 0.66 0.53 0.35

Tabla 11: Eficiencia del alg. de orden par-impar.

� ��� ���� � � � � �����

����� ���� �� � ����� �!�"��� �!���

$%&'()*$)*%) &)*'

$ ��$�$ )*$�$�$ )���$�$ %�$�$�$

� ����"�������� � �� ����� ����� ��

���������� ���� ��� � �!����� �!���

$

)

%

&

'

) $ )*$�$ )*$�$�$ )*$�$�$�$

74

Método de Kogbetliantz en Memoria Compartida

��� � ��� ������ �

����� ��������� ������� �"��� �����

$$�- )$�- %$�- �$�- &$�- �$�- '$�- �$�- (

$ ��$�$ )*$�$�$ )���$�$ %�$�$�$ % ��$�$

��������)���!&����(��� �,)��� �&��� ��(

Figuras 22, 23 y 24: Prestaciones en Mflops del algoritmo par-impar.

Las prestaciones en flops se han representado gráficamante en las figuras 22, 23 y 24, e ilustranlas siguientes conclusiones:

- La introducción de la vectorización, como en el caso secuencial, conduce a un incrementomáximo de 2.4 para la matriz 135 x 135.

- El algoritmo paralelo ejecutado en un procesador (gc1) presenta una fuerte pérdida deprestaciones con respecto al algoritmo sin paralelizar (g).

- La eficiencia del algoritmo es reducida, pues el punto más elevado se alcanza para 4procesadores sin vectorizar, y se reduce a 0.7. El Speed Up es realmente moderado,quedando en 5 como mucho. Realmente es porque hacemos comparaciones que nosfavorecen poco. Si por ejemplo comparamos el caso gc4 con el gc1 para la matriz 135 x135, se obtiene un valor de 3.88, eficiencia 0.97, lo que indica que el balance de carga yla paralelización son realmente correctas. Lo que sucede es que la introducción de laconcurrencia supone siempre una carga respecto al mismo algoritmo compilado sinconcurrencia, lo que queda claramente expresado en el Speed Up mucho menor que 1 quese obtiene en los casos gc1 y gcv1.

- Las prestaciones alcanzadas se aproximan al 50% (por procesador) del pico teórico, lo queresulta aceptable considerando que estamos en operaciones vector-vector y no podemosutilizar librerías optimizadas.

- Las prestaciones del algoritmo decrecen a medida que aumenta el tamaño de las matrices,como puede apreciarse claramente en la figura 22b (hemos elegido una representacióncontinua para ilustrarlo exactamente). Esto se debe no al balance de carga, sino al malacceso a los datos.

Esta última conclusión es realmente importante por ser evitable y nos invita a reconsiderar elmodo de tratar el acceso a la memoria (a las matrices) en el apartado 6.1.2.2.

������� ������� �����.-������ # ) ����� - � '�-� �"�$&-�� #�)+� -�� -�� -���������-� ����*),��� -�����-�� ��� ����������" � ��-����

El compilador FORTRAN utilizado en el Power Challenge presenta algunas diferencias encuanto a la paralelización con respecto al del Alliant FX/80. En este último el compilador permitecombinar las decisiones tomadas por el compilador con las indicaciones dadas por el programadormediante las directivas mencionadas en la página 36.

El compilador aquí empleado tiene, en cambio, dos modos de trabajo completamente opuestos.En el primero de ellos, el compilador decide qué bucles paralelizar e ignora las directivas del usuario.La tendencia en este modo de trabajo (que hemos indicado como t en las tablas y gráficas) es aparalelizar los bucles interiores. Las tablas que exponen los resultados las hemos desplazado a la

75

Computación de la PSVD

página 94, para clarificar la exposición en este apartado. La tabla 12 muestra las prestaciones delalgoritmo compilado en este modo sin utilizar las optimizaciones secuenciales habituales en loscompiladores secuenciales. En horizontal se han presentado las prestaciones en distinto número deprocesadores: 1,2,3,4,5,6,8 y 10. Las tablas 13 y 14 (página 94) muestran respectivamente elincremento de velocidad y la eficiencia obtenidas en este modo. Ambas calculadas respecto alalgoritmo ejecutado en un procesador y no al secuencial. Las tablas 15, 16 y 17 muestran los mismosindicadores (prestaciones, speed up y eficiencia) habiendo compilado con las optimizaciones globalespropias de los compiladores secuenciales. Hemos denominado a este modo to. Las gráficas 25, 27, 29,26, 28 y 30 muestran los mismos resultados de forma más compacta.

����� ���� � ��� ���������� � �������� ��

�������������� ��� � �!�"�#� �����

$

)*$

%�$

��$

&�$

��$

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

����� ���� � ��� ���������� � ������ � ���

����� ��������� ��� � �!����� �����

$) $%�$��$&$��$'�$��$(�$

$ ) $�$�$ %�$�$�$ ��$�$�$ &$�$�$

� ������� ����� � �� ����� ����� ����� ��

����� ���� �� � ��� ���!����� �����

$

)

%

&

'

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

� �������� ����� � �� ����� ����� ����� � ���

����� ���� ���� ��� ��� �"��� �����

$

)

%

&

$ )*$�$�$ %�$�$�$ ��$�$�$ &$�$�$

����� ��� ������ ��� � �

�������������� �������!����� � ���

$

$�- %

$�- &

$�- '

$�- (

)

$ ) $�$�$ %�$�$�$ ��$�$�$ &�$�$�$

����� ��� ������ ��� �����

�������������� �������!����� �����

$

$�- %

$�- &

$�- '

$�- (

)

$ ) $�$�$ %�$�$�$ ��$�$�$ &$�$�$

)%�

&�

'()*$

Figuras 25, 26, 27, 28, 29 y 30: Prestaciones, speed up y eficiencia del alg. par-impar (t y to).

Los resultados del modo t muestran un excelente comportamiento del algoritmo. Para pequeñostamaños, como es de esperar, las prestaciones no aumentan a medida que aumenta el número de

76

Método de Kogbetliantz en Memoria Compartida

procesadores. En cambio, a medida que aumenta el tamaño de las matrices, las prestaciones mejoran,tanto en general, como en relación al número de procesadores, como puede observarse en las gráficas25, 27 y 29. No obstante, estos resultados no son realistas, en tanto que el pico de prestacionesobtenido es bajo, debido a la ausencia de optimización de código.

Más interesante es el caso to, donde la gráfica 26 muestra que para pequeñas matrices seobtienen buenas prestaciones, que descienden rápidamente para matrices de tamaño medio (alrededorde n=500). El comportamiento general del modo to es similar al del modo t, como puede observarse enlas gráficas 28 y 30 (que representan el incremento de velocidad y la eficiencia).

El resultado global sólo es aceptable para matrices grandes donde se alcanzan los 74 MFlops,que aun no siendo muy alto es mucho mayor que el que se obtiene para matrices de tamaño medio.

Frente a todo esto, las tablas 18, 19 y 20 y las gráficas 31, 33 y 35 muestran los resultadosobtenidos cuando la paralelización se realiza de modo manual, paralelizando, como hemos explicado,los bucles externos, sin utilizar las optimizaciones de código propias del compilador secuencial (modom). Se han mostrado, como se observa, las prestaciones, el incremento de velocidad y la eficiencia.

Las tablas 21, 22 y 23 y las gráficas 32, 34 y 36 muestran los resultados obtenidos cuando seañaden las optimizaciones del compilador (modo mo).

����� ���� � ��� ���������� � ������ � �

���������� ���� ��� � �!�"��� �����

$)*$%�$��$&�$��$'�$��$

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

� ��� ���� ����� ����� �� � � �������� � ���

����� ���� ���� ��� ��� �"��� �����

$

%�$

&$

'�$

(�$

)*$�$

)*%�$

) $ )*$�$ )*$�$�$ )*$�$�$�$

� �������� ���������� � ��� ����� ��� � � �

���������� ���� ��� � �!�"��� �����

$

%

&

'

(

)*$

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

� �������� ���������� � ��� ����� ��� � � ���

����� ���� �� � ��� ���!����� �����

$

)

%

&

'

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

77

Computación de la PSVD

��� � ��� ����� ��� � �

�������������� �������!����� � ���

$

$�- %

$�- &

$�- '

$�- (

)

$ ) $�$�$ %�$�$�$ ��$�$�$ &�$�$�$

��� � ��� ����� ��� �����

�������������� �������!����� �����

$

$�- %

$�- &

$�- '

$�- (

)

$ ) $�$�$ %�$�$�$ ��$�$�$ &$�$�$

)%�

&�

'()*$

Figuras 31, 32, 33, 34, 35 y 36: Prestaciones, speed up y eficiencia del alg. par-impar (m y mo).

El modo m muestra un comportamiento ejemplar. Para matrices pequeñas se obtienen pequeñasprestaciones, pero ya para matrices de tamaño medio, la incidencia de la paralelización es evidente,obteniéndose prestaciones razonables (teniendo en cuenta la ausencia de optimización). Losincrementos de velocidad son realmente elevados. Una vez más hacemos constar que este no es elmodo más realista, aunque ilustra claramente el comportamiento de nuestra paralelización.

El modo mo sigue los pasos del anterior, pero para matrices pequeñas se observan diferencias.En la figura 32 hemos usado una escala logarítmica en el eje de abcisas para que se aprecie conclaridad el efecto de la optimización del compilador. Efectivamente, para un solo procesador el efectode la optimización es enorme y dispara las prestaciones, de modo que el incremento de velocidad esmucho menor que uno, representado en la gráfica 34. Cuando el tamaño de la matriz empieza aaumentar estas optimizaciones van teniendo menor efecto, y para matrices de tamaño medio, lapresencia de varios procesadores ya es significativa, repercutiendo en el speed up. Los incrementos noson tan elevados como en el modo m, como era de esperar. Sin duda, lo deseable sería que laoptimización también tuviera efecto para las ejecuciones en más de un procesador, pero por motivosinternos del compilador, que desconocemos, dicho efecto sólo produce incremento de prestaciones delorden del 20%, frente a la ejecución en un procesador donde llega al 600%, como muestran las tablas18 y 21 (pág 95).

La figura 32 muestra además otro hecho importante. A partir de un tamaño de matriz (aprox.n=1000), las prestaciones comienzan a bajar y lo hacen progresivamente. Estamos de nuevo, como enel caso de Alliant, con un problema en el uso poco local de de las antememorias. Este problema verásolución en el apartado siguiente, mediante los algoritmos por bloques.

Por último, hemos implementado el cálculo de los vectores singulares. Este cálculo permitirácomparar los algoritmos basados en Kogbetliantz con otros métodos. Los resultados se exponen en lastablas 24, 25, 26, 27, 28 y 29 y en las figuras 37, 39, 41, 38, 40 y 42. Se han experimentado ambosmodos, el no optimizado (mv) y el optimizado (mvo).

Como muestra la figura 39, en el modo mv los incrementos de velocidad son ahora mucho másmoderados, debido a que se obtienen prestaciones realmente pobres, según muestra la figura 37. Comoconsecuencia las eficiencias se mantienen en valores realmente pobres para un número de procesadoresp >2.

78

Método de Kogbetliantz en Memoria Compartida

� ��� ���� ����� ����� ���� � �������� � � �

���������� ���� ��� � �!�"��� �����

$�

)*$)��%�$% ���$� �

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

� ��� ���� ����� ����� �� � � �������� � � ���

����� ���� ���� ��� ��� �"��� �����

$

%�$

&$

'�$

(�$

)*$�$

)*%�$

) $ )*$�$ )*$�$�$ )*$�$�$�$

� �������� ����� � �� ����� ����� ����� � ���

����� ��������� ��� � �!����� �����

$

)

%

&

$ ) $�$�$ %�$�$�$ ��$�$�$ &�$�$�$

� �������� ���������� � ��� ����� ��� � � � ���

����� ���� �� � ��� ���!����� �����

$)%�

&�

'�

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

��� � ��� ������ �� � ���

���������� ���� ��� � �!����� �!���

$

$�- %

$�- &

$�- '

$�- (

)

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

��� � ��� ������ �� � �����

���������� ���� ��� � �!����� �����

$

$�- %

$�- &

$�- '

$�- (

)

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

)%�

&�

'() $

Figuras 37, 38, 39, 40, 41 y 42: Prestaciones, speed up y eficiencia del alg. par-impar (mv y mvo).

En cambio, en el modo mvo, se alcanzan prestaciones mayores, manteniéndose el incremento develocidad y la eficiencia en unas cotas aceptables para matrices de tamaño medio. De nuevo se observaque a medida que crece el tamaño de las matrices las prestaciones bajan, debido a la saturación de lasantememorias. De hecho, dado que se están calculando las matrices U y V, además de A y B, la caídade prestaciones se aprecia antes que para el caso mo que hemos expuesto anteriormente (figura 33),comenzando el problema para valores de n próximos a 500.

79

Computación de la PSVD

Podemos concluir, a modo de resumen, que en el Power Challenge:- La paralelización manual da mejor resultados que la automática a partir de un tamaño

razonable de las matrices.- Las prestaciones alcanzadas son bajas, pues el compilador parece no ser capaz de aplicar el

efecto optimizador cuando crece el tamaño de la matriz (para el modo t) o cuando haymás de un procesador (modo m). Los 70 MegaFlops alcanzados para matrices pequeñasen un procesador, son aceptables, pero no lo son los 120 MagaFlops alcanzados comomáximo en 10 procesadores. Este parece un problema ligado al compilador.

- Para matrices pequeñas, el efecto de la optimización del compilador es mucho menor quecuando se ejecuta el programa en un procesador, obteniéndose incrementos de velocidadmucho menores que uno, que nos lleva a descartar completamente esta paralelizaciónpara estos tamaños.

- Cuando el tamaño de las matrices crece, se produce una pérdida de las prestaciones que es máspatente cuando calculamos también los vectores singulares. Ellos se debe al mal uso delas antememorias, lo que nos lleva a diseñar algoritmos por bloques.

6.1.2.2. Algoritmo paralelo por bloques (par-impar).

������� ��� ������� � �" #�-� �" ������� ��" �������

El acceso a la memoria es un problema no-trivial en la computación de altas prestaciones. Laarquitectura influye fuertemente en los resultados temporales. Citemos las consideraciones másimportantes.

En primer lugar es habitual que la memoria principal está organizada en bancos de forma quedos elementos de una matriz pueden estar o no en el mismo banco. Supongamos una matrizdistribuida, como en Fortran, por elementos contiguos en las columnas. Si deseamos acceder adistintas filas, puede suceder que sus elementos estén todos en el mismo banco, con lo que no seobtiene un acceso simultáneo (no se aprovechan las cualidades del bus). El riesgo de que ello sucedaaparece cuando el número de elementos en una columna es potencia de dos, pues así están organizadaslas memorias. En nuestras pruebas hemos huido intencionadamente de estos tamaños. Lo mismo debehacerse en las implementaciones de las aplicaciones finales. Cuando sea necesario se añadirá una filade ceros.

Un problema más difícil de tratar aparece a medida que crece el tamaño de las matricesempleadas. Cuando las matrices son pequeñas, si los elementos más frecuentemente accedidos cabenen la antememoria, los accesos a memoria no son problemáticos. En cambio, cuando las matrices songrandes, si se trabajan elementos distantes entre sí, comienzan a aparecer fallos de antememoria. Si lasmatrices crecen excesivamente, el mismo problema se traslada a la memoria central, supuesta unamemoria virtual paginada, y es mucho más grave.

La solución es rehacer los programas y trabajar sobre las matrices por bloques. Se trata deacceder localmente a los elementos de la matriz, y si es posible, siempre por columnas. Esta localidadmantiene los elementos en la antememoria y por ello los accesos son muy rápidos. Cuando cambiamosde bloque, nuevos elementos serán accedidos, pero hemos realizado ya una computación intensiva en elbloque anterior.

������� ��� ��� ������� ���. �" #%$&�('��. ��� ��� ��-����

Para aplicar estos criterios a nuestro problema, en primera instancia podemos dividirformalmente la matriz en bloques trapezoidales de filas y columnas, como aparece en la figura 43.

80

Método de Kogbetliantz en Memoria Compartida

En la figura 43 se han representado 4 bloques que aparecen sombreados . La idea básica

del algoritmo es la siguiente: realizamos un barrido PSVD al triángulo , donde se cruzan los dostrapecios. Las rotaciones calculadas, J, K y L, se almacenan en 3 matrices de 2 columnas. A

continuación se pueden aplicar a los bloques rectangulares y , pero uno tras otro, no como en elalgoritmo secuencial.

1,3 5

7

2,4 8

6

A B

Figura 43: Distribución de los accesos por bloques.

Lo más destacable del algoritmo es la necesidad de aplicar las rotaciones a los bloques en elmismo orden (par-impar) que se calcularon, como aparece en el algoritmo 11a.

repetirpara ib= 0, ..., Número de bloques -1

inicializar las matrices que almacenan las rotaciones.calcular y aplicar las rotaciones para un barrido PSVD sobre el triángulo como enel algoritmo 10, acumulando las rotaciones (pasos 1, 2, 3 y 4 en la figura 43),orden par-impar.aplicar las rotaciones según el orden par-impar a los bloques rectangulares, pasos5, 6, 7 y 8 en la figura 43.

hasta que converge o se alcanza el máximo de barridos.

Algoritmo 11a: Algoritmo por bloques trapezoidales.

El proceso se muestra más detallado en el algoritmo 11b.

81

Computación de la PSVD

NB= Número de bloquesTB=n/NBpara ini=1,2 fin(ini)= (TB+1-ini+1) / 2 * 2 + ini - 2U= IV= Iañadir una columna de ceros a A y Brepetir

converge= verdaderoOffs= 0para ib= 0, ..., NB -1

para i= Offs+1, ..., Offs+TBDi ,Ei ,Qi = (1,0)

para ini= 1,2para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2

j= i+1si Cij = Aij Bij no es diagonal

converge= falsoCalcular J(θ ) y K(φ ) a partir de Cij

A= J(θ )TA (columnas afectadas i:Offs+TB+1) paso 1 de la fig. 43Di = J(θ )B= BK(φ ) (filas afectadas: Offs+1:j) paso 2 de la fig. 43Ei = K(φ )

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2j= i+1calcular L(ϕ )A= AL(ϕ ) (filas afectadas: Offs+1:j) paso 3 de la fig. 43B= L(ϕ )TB (columnas afectadas i:Offs+TB+1) paso 4 de la fig. 43Qi = L(ϕ )

si no convergepara ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2J(θ )= Di

A= J(θ )TA (columnas afectadas Offs+TB+2:n) paso 5 de la fig. 43para ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2J(θ )= Di

U= J(θ )TU (columnas afectadas Offs+1:n)para ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2J(θ )= Di

U= J(θ )TU (columnas afectadas 1:Offs)para ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2K(φ )= Ei

B= BK(φ ) (filas afectadas: 1:Offs) paso 6 de la fig. 43para ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2K(φ )= Ei

V= VK(φ ) (filas afectadas: 1:Offs)

82

Método de Kogbetliantz en Memoria Compartida

para ini= 1,2para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2

K(φ )= Ei

V= VK(φ ) (filas afectadas: Offs+1:n)para ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2L(ϕ)= Qi

A= AL(ϕ) (filas afectadas: 1:Offs) paso 7 de la fig. 43para ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2L(ϕ)= Qi

B= L(ϕ )TB (columnas afectadas: Offs+TB+2:n) paso 8 de la fig. 43Offs=Offs+TB

hasta que converge o se alcanza el máximo de barridos.

Algoritmo 11b: Algoritmo por bloques trapezoidales detallado.

������� ��� ��� �����.-���" �*)+$ " -�� #��.�

Hemos realizado otro programa según el mismo criterio, pero dividiendo los bloquesrectangulares en pequeños bloques cuadrados (algoritmo 12).

83

Computación de la PSVD

B= Número de bloquesTB=n/NBpara ini=1,2 fin(ini)= (TB+1-ini+1) / 2 * 2 + ini - 2U= IV= Iañadir una columna de ceros a A y Brepetir

converge= verdaderoOffs= 0para ib= 0, ..., NB -1

para i= Offs+1, ..., Offs+TBDi ,Ei ,Qi = (1,0)

para ini= 1,2para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2

j= i+1si Cij = Aij Bij no es diagonal

converge= falsoCalcular J(θ ) y K(φ ) a partir de Cij

A= J(θ )TA (columnas afectadas i:Offs+TB+1) paso 1 de la fig. 43Di = J(θ )B= BK(φ ) (filas afectadas: Offs+1:j) paso 2 de la fig. 43Ei = K(φ )

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2j= i+1calcular L(ϕ )A= AL(ϕ ) (filas afectadas: Offs+1:j) paso 3 de la fig. 43B= L(ϕ )TB (columnas afectadas i:Offs+TB+1) paso 4 de la fig. 43Qi = L(ϕ )

si no convergesi iB < NB -1

Offs2= Offs+TB+1para ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2J(θ )= Di

A= J(θ )TA (columnas afectadas Offs2+1:Offs2+TB-1)Offs2= Offs2+TB-1para jB= 1, ..., NB-2-iB

para ini= 1,2para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2

J(θ )= Di

A= J(θ )TA (columnas afectadas Offs2+1:Offs2+TB)Offs2= Offs2+TB

Offs2= 0

84

Método de Kogbetliantz en Memoria Compartida

para jB= 1, iBpara ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2K(φ )= Ei

B= BK(φ ) (filas afectadas: Offs2+1:Offs2+TB)Offs2= Offs2+TB

Offs2= 0para jB= 1, NB-1

para ini= 1,2para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2

J(θ )= D(i)U= J(θ )TU (columnas afectadas Offs2+1:Offs2+TB)

Offs2= Offs2+TBOffs2= 0para jB= 1, NB-1

para ini= 1,2para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2

K(φ )= Ei

V= VK(φ ) (filas afectadas: Offs2+1:Offs2+TB)Offs2= Offs2+TB

si iB < NB -1Offs2= Offs+TB+1para ini= 1,2

para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2L(ϕ)= Qi

B= L(ϕ )TB (columnas afectadas: Offs2+1:Offs2+TB-1)Offs2= Offs2+TB-1para jB= 1, ..., NB-2-iB

para ini= 1,2para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2

L(ϕ)= Qi

B= L(ϕ )TB (columnas afectadas Offs2+1:Offs2+TB)Offs2= Offs2+TB

Offs2= 0para jB= 1, iB

para ini= 1,2para i= Offs+ini, ..., Offs+fin(ini) de 2 en 2

L(ϕ)= Qi

A= AL(ϕ) (filas afectadas Offs2+1:Offs2+TB)Offs2= Offs2+TB

Offs=Offs+TBhasta que converge o se alcanza el máximo de barridos.

Algoritmo 12: Algoritmo por bloques cuadrados.

Los resultados se presentan a continuación.

85

Computación de la PSVD

������� ��� ��� �����.-������ #�) ����� -�� '�-� �"�$&-�� # )+� -�� -�� -���������" )�� # � ��� ����������" � ��-����

Se han realizado numerosas ejecuciones con 10 iteraciones, para determinar las prestaciones deambos algoritmos según la relación tamaño de las matrices/bloques. Los resultados aparecen en lastablas 30, 31, 32, 33, 34, 35, 36 y 37 (páginas 99-101), y las figuras 44, 45, 46, 47, 48, 49, 50, 51,52, 53, 54, 55, 56, 57, 58, 59, 60 y 61 (páginas 86-89).

����� ���� ) ��� ��0���

����� ���� �� � �!�����!����� �����

$%&'()*$)*%) &)*'

$ &�$�$ (�$�$ )*%�$�$

� ��� ���� � ��� ��0�����

�������������� ��� � �!�"�#� �����

$%&'()*$)*%) &)*'

$ &$�$ (�$�$ ) %�$�$

� ��� ���� � ��� ��0�����

�������������� ��� � �!�"�#� �����

$%&'()*$)*%) &)*'

$ &$�$ (�$�$ ) %�$�$

����� �����% � ��� ��0��� �

�������������� ��� � �!�"�#� �����

$%&'()*$)*%) &)*'

$ &$�$ (�$�$ ) %�$�$

����� �����)� � ��� ��0�����

�������������� ��� � �!�"�#� �����

$

%

&

'

(

)*$

)*%

$ &$�$ (�$�$ ) %�$�$

� ��� ���� &�$ � ��� ��0�����

���������� ���� ��� � �!�"��� �����

$

)

%

&

(�$�$ )*%�$�$ )*'�$�$

����,)����)���!&����(��� �,)��� �&��� ��(

Figuras 44, 45, 46, 47, 48 y 49: Alliant: MFlops del algoritmo par-impar por bloques rectangulares.

86

Método de Kogbetliantz en Memoria Compartida

����� ���� � � � � �����

���������� ���� ��� � �!�"��� �����

$%&'()*$)*%) &)*'

$ &�$�$ (�$�$ )*%�$�$

� �������� ���������� � ��� ����� ���

����� ���� �� � ��� ���!����� �����

$

)

%

&

'

$ &�$�$ (�$�$ ) %�$�$

��� � ��� ������ �

����� ��������� ������� �"��� �����

$

$�- %

$�- &

$�- '

$�- (

)

$ &�$�$ (�$�$ )*%�$�$

���� )����)���!&����(��� �,)��� �&��� ��(

Figuras 50, 51 y 52: Prestaciones, speed up y eficiencia del algoritmo par-impar por bloquesrectangulares.

� ��� ���� )���) ��� ��0���

���������� ���� ��� � �!�"��� �����

$%&'()*$)*%) &)*'

$ &�$�$ (�$�$ )*%�$�$

����� ���� ��� � ��� ��0�����

���������� ���� ��� � �!�"��� �����

$%&'()*$)*%) &)*'

$ &�$�$ (�$�$ )*%�$�$

87

Computación de la PSVD

����� ���� � �� ��� ��0�����

�������������� ��� � �!�"�#� �����

$%&'()*$)*%) &)*'

$ &$�$ (�$�$ ) %�$�$

����� �����% � ��% � ��� ��0�����

�������������� ��� � �!�"�#� �����

$%&'()*$)*%) &)*'

$ &$�$ (�$�$ ) %�$�$

� ��� ���� )�� ����)���� ��� ��0�����

����� ���� �� � ��� ���!����� �����

$

)

%

&

$ &�$�$ (�$�$ ) %�$�$

����� ���� &$ ���!&�$ � ��� ��0�����

�������������� ��� � �!�"�#� �����

$$�- )$�- %$�- �$�- &$�- �$�- '$�- �$�- (

(�$�$ )*%�$�$ )*'�$�$

����,)����)���!&����(��� �,)��� �&��� ��(

Figuras 53, 54, 55, 56, 57 y 58:MFlops del algoritmo par-impar por bloques cuadrados.

����� ���� � � � � �����

�������������� ��� � �!�"�#� �����

$%&'()*$)*%) &)*'

$ &$�$ (�$�$ ) %�$�$

� ������������������� � �� ����� ���

����� ���� ���� ��� ��� �"��� �����

$)%�

&�

'�

$ &�$�$ (�$�$ )*%�$�$

88

Método de Kogbetliantz en Memoria Compartida

��� � ��� ������ �

����� ��������� ������� �"��� �����

$

$�- %

$�- &

$�- '

$�- (

)

$ &�$�$ (�$�$ )*%�$�$

���� )����)���!&����(��� �,)��� �&��� ��(

Figuras 59, 60 y 61:Prestaciones, speed up y eficiencia del algoritmo par-impar por bloquescuadrados.

A la vista de los resultados, podemos concluir:- Los algoritmos por bloques mejoran las prestaciones para matrices grandes, compárese la

figura 59 con la figura 22 (página 74).- El algoritmo de bloques cuadrados no presenta ninguna ventaja respecto al trapezoidal.- Las prestaciones caen cuando el número de bloques es exagerado.- Las mejores prestaciones en ambos algoritmos no se producen para un tamaño o un número de

bloques determinado, sino para una relación (tamaño / número de bloques) determinado,aproximadamente 100x100 elementos (puede ser rectangular con los mismos elementos).Esto es lo que se espera del uso eficiente de las antememorias.

- El seguimiento de la ejecución de los programas con matrices grandes sigue indicando uncolapso de la memoria central. Esto parece inevitable, debido a que en cada barrido sesigue accediendo a ambas matrices completas.

������� ��� ��� �����.-������ # ) ����� - � '�-� �"�$&-�� #�)+� -�� -�� -���������-� ����*),��� -�����-�� ��� ����������" � ��-����

Hemos seguido la misma nomenclatura que la utilizada en la exposición de resultados delalgoritmo sin bloques.

����� ���� ����� �� � ���� � �������� � �

���������� ���� ��� � �!�"��� �����

$

)*$

%�$

��$

&�$

��$

'�$

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

� ��� ���� ����� ����� ���� � �������� �����

����� ���� ���� ��� ��� �"��� �����

$

%�$

&$

'�$

(�$

)*$�$

)*%�$

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

89

Computación de la PSVD

� ������� ����� � �� ����� ����� ����� ��

����� ���� �� � ��� ���!����� �����

$)%�

&�

'�

) $ )*$�$ )*$�$�$ )*$�$�$�$

� �������� ����� � �� ����� ����� ����� � ���

����� ���� ���� ��� ��� �"��� �����

$

)

%

&

)*$ )*$�$ )*$�$�$ )*$�$�$�$

��� � ��� ����� ��� ��

����� ���� �� � ����� �!�"��� �!���

$

$�- %

$�- &

$�- '

$�- (

)

)*$ )*$�$ )*$�$�$ )*$�$�$�$

��� � ��� ����� ��� � ���

����� ���� �� � ����� �!�"��� �����

$

$�- %

$�- &

$�- '

$�- (

)

)*$ )*$�$ )*$�$�$ )*$�$�$�$

)%�

&�

'()*$

Figuras 62, 63, 64, 65, 66 y 67: Prestaciones, speed up y eficiencia del alg. par-impar por bloquesrectangulares (t y to).

La comparación de las gráficas 25 y 62 nos muestra claramente que incluso en el modo deparalelización automática los resultados obtenidos son mejores. Aquí la paralelización ha afectado alos bucles más internos, beneficiando así a los bucles que trabajan sobre los bloques (pasos 5, 6,, 7, y8 de la figura 43). Al añadir optimización global, la gráfica 63, comparada con la 26, muestra tambiénmejores prestaciones excepto para matrices pequeñas donde el efecto de la optimización es, una vezmás, de escasa relevancia. Además aquí aparece de nuevo (como sucedía en el caso mo del algoritmosin bloques) el fenómeno de la pérdida del efecto de la optimización para más de un procesador.

����� ���� � ��� ���������� � ������ � �

����� ���� �� � ��� ���!����� �����

$

) $

)�

%�$

%��

��$

) $ )*$�$ )*$�$�$ )*$�$�$�$

� ��� ���� ����� ����� ���� � �������� � ���

���������� ���� ��� � �!�"��� �����

$%�$&�$'�$(�$) $�$) %�$) &�$

)*$ )*$�$ )*$�$�$ )*$�$�$�$

90

Método de Kogbetliantz en Memoria Compartida

� �������� ���������� � ��� ����� ��� � � �

����� ���� �� � ��� ���!����� �����

$$�- �)) - �%%�- ��

��- �

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

� ������������������� � �� ����� ��� � � ���

����� ���� ���� ��� ��� �"��� �����

$$�- �)) - �%%�- ��

��- �

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

����� �� ����� ��� � �

���������� ���� ��� � �!����� �!���

$

$�- %

$�- &

$�- '

$�- (

)

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

����� �� ����� ��� � ���

���������� ���� ��� � �!����� �����

$$�- )$�- %$�- �$�- &$�- �$�- '$�- �$�- (

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

)%�

&�

'() $

Figuras 68, 69, 70, 71, 72 y 73: Prestaciones, speed up y eficiencia del alg. par-impar por bloquesrectangulares (m y mo).

El modo de paralelización manual sin optimización (m) presenta un comportamiento pobrerespecto al equivalente sin bloques (figura 68 frente a figura 31). En cambio, cuando se añadeoptimización, la figura 69 muestra que las prestaciones suben, pero lo que es más importante, amedida que crece el tamaño de las matrices, las prestaciones permanecen estables, que es el efectobuscado por el algoritmo por bloques.

No obstante el algoritmo por bloques rectangulares fracasa cuando se incluye el cálculo de losvectores singulares, como muestra la figura 74. El mayor número de datos manejados (dos nuevasmatrices), hace que las prestaciones bajen para matrices medianamente grandes (n > 1500).

����� ���� � ��� ���������� � ������ � �����

����� ���� �� � ��� ���!����� �����

$

%�$

&�$

'�$

(�$

)*$�$

)*%�$

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

� ������������������� � �� ����� ��� � � � ���

����� ���� ���� ��� ��� �"��� �����

$

$�- �

)

) - �

%

%�- �

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

91

Computación de la PSVD

��� � ��� ������ ��� � � ���

�������������� �������!����� �����

$$�- )$�- %$�- �$�- &$�- �$�- '$�- �$�- (

$ ) $�$�$ %�$�$�$ ��$�$�$ &$�$�$

)%�

&�

'()*$

Figuras 74, 75 y 76: Prestaciones, speed up y eficiencia del alg. par-impar por bloquesrectangulares (mvo).

� ��� ���� ����� ����� �� � � �������� � ���

����� ���� ���� ��� ��� �"��� �����

$%�$&$'�$(�$)*$�$)*%�$) &$

) $ )*$�$ )*$�$�$ )*$�$�$�$

� ��� ���� ����� ����� ���� � �������� � � ���

���������� ���� ��� � �!�"��� �����

$

��$

) $�$

)��$

%�$�$

)*$ )*$�$ )*$�$�$ )*$�$�$�$

� ������������������� � �� ����� ��� � � ���

����� ���� ���� ��� ��� �"��� �����

$

$�- �

)

) - �

%

%�- �

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

� ����"�������� � �� ����� ���� ��� � � �����

���������� ���� ��� � �!�"��� �����

$$- �))!- �%%- ��

�- �&

$ )*$�$�$ %�$�$�$ ��$�$�$ &$�$�$

92

Método de Kogbetliantz en Memoria Compartida

����� �� ����� ��� � ���

���������� ���� ��� � �!����� �!���

$

$�- %

$�- &

$�- '

$�- (

)

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

��� � ��� ������ �� � �����

���������� ���� ��� � �!����� �����

$$�- )$�- %$�- �$�- &$�- �$�- '$�- �$�- (

$ )*$�$�$ %�$�$�$ ��$�$�$ &�$�$�$

)%�

&�

'() $

Figuras 77, 78, 79, 80, 81 y 82: Prestaciones, speed up y eficiencia del alg. par-impar por bloquescuadrados (mo y mvo).

El algoritmo por bloques cuadrados, que trabaja con bloques de menor tamaño, se muestraahora claramente superior. Cuando sólo calculamos los valores singulares, la mejora de lasprestaciones no superó el 20%, pero al calcular los vectores singulares, la gráfica 78 nos muestra unasubstancial mejora respecto a la gráfica 74 y mucho más sobre la 38 (página 79). No sólo no bajan lasprestaciones a medida que crece el tamaño de las matrices, sino que no dejan de aumentar, alcanzandolos valores mayores obtenidos en la computación en el modelo de memoria compartida.

6.1.2.3. Conclusiones.

Hemos desarrollado un algoritmo paralelo basado en el orden par-impar sobre dos arquitecturascon memoria compartida, usando el modelo de programación específico para multiprocesadores conmemoria compartida. Posteriormente hemos extendido este algoritmo a una estructura por bloques,tanto rectangulares como cuadrados.

El multiprocesador Alliant FX/80 es una máquina actualmente desfasada en cuanto aprestaciones, que no obstante presenta un compilador FORTRAN con excelente comportamiento. Aquíhemos conseguido buenas eficiencias y que los Megaflops alcanzados se aproximen a lo esperable. Losalgoritmos por bloques se han mostrado claramente superiores para matrices de suficiente tamaño.

En el multiprocesador Power Challenge hemos ensayado dos modos de paralelización dados porel compilador, obteniendo, en general, mejores resultados en el modo manual. También aquí, el mejorcomportamiento lo han ofrecido los algoritmos por bloques. No obstante el compilador no ha sidocapaz de aplicar su capacidad optimizadora con la presencia de varios procesadores, con lo que lasprestaciones máximas alcanzadas han quedado lejos de lo esperado.

Como conclusión final, el modelo de programación en memoria compartida es interesante paradesarrollar algoritmos paralelos con menor esfuerzo, pero depende demasiado del comportamiento delcompilador.

Se adjuntan ahora las tablas de resultados con las que se han construido las gráficas. El lectorpuede pasar directamente a la página 117.

93

Computación de la PSVD

�.-������ # ) ��������-���),� ���. �" #%$&�('*)+ ���"�$ '*)+ -�� -���������-� � �+)+��� -�����-��

Tamaño 1 2 3 4 5 6 8 1015 13.33 13.30 13.31 13.30 13.33 13.26 13.35 13.3145 13.31 13.34 13.33 13.32 13.33 13.32 13.29 13.36

135 11.57 11.55 11.56 11.56 11.56 11.57 11.56 11.56405 10.41 10.03 10.45 10.76 10.99 11.08 11.15 11.06675 8.93 9.36 10.36 10.84 11.19 11.43 11.70 11.73

1215 8.39 9.77 11.46 12.94 13.99 14.55 14.75 14.382025 8.32 11.30 15.80 19.40 22.18 24.51 27.34 28.053645 8.28 12.49 18.18 23.41 28.17 32.51 39.57 44.96

Tabla 12: Prestaciones en Mflops del algoritmo par-impar (t).

Tamaño 2 3 4 5 6 8 1015 0.99 0.99 0.99 1.00 0.99 1.00 0.9945 1.00 1.00 1.00 1.00 1.00 0.99 1.00

135 0.99 0.99 0.99 0.99 1.00 0.99 0.99405 0.96 1.00 1.03 1.05 1.06 1.07 1.06675 1.04 1.15 1.21 1.25 1.27 1.30 1.31

1215 1.16 1.36 1.54 1.66 1.73 1.75 1.712025 1.35 1.89 2.33 2.66 2.94 3.28 3.363645 1.50 2.19 2.82 3.40 3.92 4.77 5.43

Tabla 13: Incremento de velocidad del alg. par-impar (t).

Tamaño 2 3 4 5 6 8 1015 0.49 0.33 0.24 0.20 0.16 0.12 0.0945 0.50 0.33 0.25 0.20 0.16 0.12 0.10

135 0.49 0.33 0.24 0.19 0.16 0.12 0.09405 0.48 0.33 0.25 0.21 0.17 0.13 0.10675 0.52 0.38 0.30 0.25 0.21 0.16 0.13

1215 0.58 0.45 0.38 0.33 0.28 0.21 0.172025 0.67 0.63 0.58 0.53 0.49 0.41 0.333645 0.75 0.73 0.70 0.68 0.65 0.59 0.54

Tabla 14: Eficiencia del algoritmo par-impar (t).

Tamaño 1 2 3 4 5 6 8 1015 65.38 66.24 65.81 66.24 65.81 66.24 66.68 66.2445 69.04 70.27 69.28 70.08 68.39 69.22 70.96 69.16

135 44.55 44.64 44.50 44.65 44.41 44.22 44.62 44.29405 32.80 28.44 27.93 27.92 27.65 26.70 26.26 26.50675 21.95 22.39 23.90 24.46 24.71 23.66 24.99 24.63

1215 19.15 23.33 26.69 29.35 31.26 29.16 30.73 29.952025 18.74 28.05 39.14 46.47 40.30 44.29 54.79 53.583645 17.17 31.27 45.17 56.26 52.55 52.82 74.31 73.09

Tabla 15: Prestaciones en Mflops del algoritmo par-impar (to).

94

Método de Kogbetliantz en Memoria Compartida

Tamaño 2 3 4 5 6 8 1015 1.01 1.00 1.01 1.00 1.01 1.01 1.0145 1.01 1.00 1.01 0.99 1.00 1.02 1.00

135 1.00 0.99 1.00 0.99 0.99 1.00 0.99405 0.86 0.85 0.85 0.84 0.81 0.80 0.80675 1.01 1.08 1.11 1.12 1.07 1.13 1.12

1215 1.21 1.39 1.53 1.63 1.52 1.60 1.562025 1.49 2.08 2.47 2.15 2.36 2.92 2.853645 1.82 2.63 3.27 3.05 3.07 4.32 4.25

Tabla 16: Incremento de velocidad del alg. par-impar (to).

Tamaño 2 3 4 5 6 8 1015 0.50 0.33 0.25 0.20 0.16 0.12 0.1045 0.50 0.33 0.25 0.19 0.16 0.12 0.10

135 0.50 0.33 0.25 0.19 0.16 0.12 0.09405 0.43 0.28 0.21 0.16 0.13 0.10 0.08675 0.50 0.36 0.27 0.22 0.17 0.14 0.11

1215 0.60 0.46 0.38 0.32 0.25 0.20 0.152025 0.74 0.69 0.61 0.43 0.39 0.36 0.283645 0.91 0.87 0.81 0.61 0.51 0.54 0.42

Tabla 17: Eficiencia del algoritmo par-impar (to).

Tamaño 1 2 3 4 5 6 8 1015 12.89 10.59 10.88 9.92 10.15 11.48 12.81 12.7945 12.56 15.43 17.66 17.13 15.34 14.48 16.30 16.97

135 10.85 14.61 19.06 23.49 26.54 29.58 36.44 36.53405 9.79 14.13 19.06 24.23 28.54 33.84 42.12 50.61675 8.62 14.35 19.58 24.59 29.77 34.24 43.88 53.74

1215 8.11 14.42 20.55 26.47 31.79 36.94 47.05 56.452025 8.05 14.41 20.78 27.16 32.84 39.60 51.62 62.593645 7.98 14.19 20.62 27.05 33.51 40.15 52.80 64.94

Tabla 18: Prestaciones en Mflops del algoritmo par-impar (m).

Tamaño 2 3 4 5 6 8 1015 0.82 0.84 0.76 0.78 0.89 0.99 0.9945 1.22 1.40 1.36 1.22 1.15 1.29 1.35

135 1.34 1.75 2.16 2.44 2.72 3.35 3.36405 1.44 1.94 2.47 2.91 3.45 4.29 5.16675 1.66 2.26 2.85 3.45 3.96 5.08 6.22

1215 1.77 2.53 3.26 3.92 4.55 5.80 6.962025 1.78 2.57 3.37 4.07 4.91 6.40 7.763645 1.77 2.58 3.38 4.19 5.03 6.61 8.13

Tabla 19: Incremento de velocidad del alg. par-impar (m).

95

Computación de la PSVD

Tamaño 2 3 4 5 6 8 1015 0.41 0.28 0.19 0.15 0.14 0.12 0.0945 0.61 0.46 0.34 0.24 0.19 0.16 0.13

135 0.67 0.58 0.54 0.48 0.45 0.41 0.33405 0.72 0.64 0.61 0.58 0.57 0.53 0.51675 0.83 0.75 0.71 0.69 0.66 0.63 0.62

1215 0.88 0.84 0.81 0.78 0.75 0.72 0.692025 0.89 0.85 0.84 0.81 0.81 0.80 0.773645 0.88 0.86 0.84 0.83 0.83 0.82 0.81

Tabla 20: Eficiencia del algoritmo par-impar (m).

Tamaño 1 2 3 4 5 6 8 1015 72.43 16.31 14.44 11.52 11.15 12.63 11.57 11.7945 76.01 32.75 31.68 24.05 20.80 20.43 19.47 19.84

135 46.57 33.25 38.22 44.17 47.26 51.21 59.68 49.67405 33.00 31.83 39.48 48.25 55.96 63.19 75.16 87.18675 21.50 31.08 39.50 48.09 56.42 65.09 80.30 94.67

1215 18.70 30.27 42.05 53.19 62.21 70.85 86.84 101.482025 18.23 29.91 41.79 54.09 65.57 77.13 91.68 99.113645 16.87 26.56 37.65 45.83 58.95 69.31 88.25 91.14

Tabla 21: Prestaciones en Mflops del algoritmo par-impar (mo).

Tamaño 2 3 4 5 6 8 1015 0.22 0.19 0.15 0.15 0.17 0.15 0.1645 0.43 0.41 0.31 0.27 0.26 0.25 0.26

135 0.71 0.82 0.94 1.01 1.09 1.28 1.06405 0.96 1.19 1.46 1.69 1.91 2.27 2.64675 1.44 1.83 2.23 2.62 3.02 3.73 4.40

1215 1.61 2.24 2.84 3.32 3.78 4.64 5.422025 1.64 2.29 2.96 3.59 4.22 5.02 5.433645 1.57 2.23 2.71 3.49 4.10 5.23 5.40

Tabla 22: Incremento de velocidad del alg. par-impar (mo).

Tamaño 2 3 4 5 6 8 1015 0.11 0.06 0.03 0.03 0.02 0.01 0.0145 0.21 0.13 0.07 0.05 0.04 0.03 0.02

135 0.35 0.27 0.23 0.20 0.18 0.16 0.10405 0.48 0.39 0.36 0.33 0.31 0.28 0.26675 0.72 0.61 0.55 0.52 0.50 0.46 0.44

1215 0.80 0.74 0.71 0.66 0.63 0.58 0.542025 0.82 0.76 0.74 0.71 0.70 0.62 0.543645 0.78 0.74 0.67 0.69 0.68 0.65 0.54

Tabla 23: Eficiencia del algoritmo par-impar (mo).

96

Método de Kogbetliantz en Memoria Compartida

Tamaño 1 2 3 4 5 6 8 1015 11.69 9.13 9.28 9.53 9.75 11.54 13.49 13.3745 9.90 13.25 12.30 13.04 13.15 13.29 14.94 15.57

135 8.77 12.69 14.40 19.24 21.31 23.44 26.08 24.96405 7.46 12.62 14.36 19.87 22.66 25.12 28.71 31.63675 7.16 12.27 14.13 19.89 22.96 25.66 29.84 33.01

1215 7.02 12.06 14.36 19.99 22.97 25.74 30.10 33.462025 6.94 11.88 14.27 19.78 22.84 25.70 30.26 33.463645 6.73 11.40 13.84 18.87 21.87 24.45 28.75 32.17

Tabla 24: Prestaciones en Mflops del algoritmo par-impar (mv).

Tamaño 2 3 4 5 6 8 1015 0.78 0.79 0.81 0.83 0.98 1.15 1.1445 1.33 1.24 1.31 1.32 1.34 1.50 1.57

135 1.44 1.64 2.19 2.42 2.67 2.97 2.84405 1.69 1.92 2.66 3.03 3.36 3.84 4.23675 1.71 1.97 2.77 3.20 3.58 4.16 4.60

1215 1.71 2.04 2.84 3.27 3.66 4.28 4.762025 1.71 2.05 2.84 3.29 3.70 4.36 4.823645 1.69 2.05 2.80 3.24 3.63 4.27 4.77

Tabla 25: Incremento de velocidad del alg. par-impar (mv).

Tamaño 2 3 4 5 6 8 1015 0.39 0.26 0.20 0.16 0.16 0.14 0.1145 0.66 0.41 0.32 0.26 0.22 0.18 0.15

135 0.72 0.54 0.54 0.48 0.44 0.37 0.28405 0.84 0.64 0.66 0.60 0.56 0.48 0.42675 0.85 0.65 0.69 0.64 0.59 0.52 0.46

1215 0.85 0.68 0.71 0.65 0.61 0.53 0.472025 0.85 0.68 0.71 0.65 0.61 0.54 0.483645 0.84 0.68 0.70 0.64 0.60 0.53 0.47

Tabla 26: Eficiencia del algoritmo par-impar (mv).

Tamaño 1 2 3 4 5 6 8 1015 71.08 16.33 14.10 11.97 12.14 13.76 13.25 13.0945 41.30 32.52 28.17 23.11 21.45 21.05 21.05 21.92

135 32.11 35.77 43.98 50.36 54.82 60.75 59.67 51.29405 19.71 33.62 45.91 57.91 68.69 77.32 82.86 98.51675 18.08 31.13 43.60 56.07 67.44 79.50 99.15 116.71

1215 17.02 29.69 42.75 55.00 67.64 78.50 97.86 106.272025 16.40 28.48 40.85 53.13 65.15 73.88 86.24 102.403645 15.51 26.44 37.72 48.84 58.78 67.07 80.64 84.75

Tabla 27: Prestaciones en Mflops del algoritmo par-impar (mvo).

97

Computación de la PSVD

Tamaño 2 3 4 5 6 8 1015 0.22 0.19 0.16 0.17 0.19 0.18 0.1845 0.78 0.68 0.55 0.51 0.50 0.50 0.53

135 1.11 1.36 1.56 1.70 1.89 1.85 1.59405 1.70 2.32 2.93 3.48 3.92 4.20 4.99675 1.72 2.41 3.10 3.73 4.39 5.48 6.45

1215 1.74 2.51 3.23 3.97 4.61 5.74 6.242025 1.73 2.49 3.23 3.97 4.50 5.25 6.243645 1.70 2.43 3.14 3.78 4.32 5.19 5.46

Tabla 28: Incremento de velocidad del alg. par-impar (mvo).

Tamaño 2 3 4 5 6 8 1015 0.11 0.06 0.04 0.03 0.03 0.02 0.0145 0.39 0.22 0.13 0.10 0.08 0.06 0.05

135 0.55 0.45 0.39 0.34 0.31 0.23 0.15405 0.85 0.77 0.73 0.69 0.65 0.52 0.49675 0.86 0.80 0.77 0.74 0.73 0.68 0.64

1215 0.87 0.83 0.80 0.79 0.76 0.71 0.622025 0.86 0.83 0.80 0.79 0.75 0.65 0.623645 0.85 0.81 0.78 0.75 0.72 0.64 0.54

Tabla 29: Eficiencia del algoritmo par-impar (mvo).

�.-������ # ) ��������-���),� ���. �" #%$&�('��. ��� � � ��-�� �-�� # )�������� ), �-�� -�� -���������" )�� #%�

MFlops con 1 bloque

Tamaño g gv gc1 gc4 gc8 gcv1 gcv4 gcv815 1.10 1.38 0.80 2.45 3.68 0.97 2.68 3.8845 1.35 2.47 0.97 3.49 6.36 1.76 5.83 9.48

135 1.44 3.35 1.04 3.99 7.28 2.53 8.04 13.07405 1.35 3.04 0.99 3.73 6.53 2.41 7.59 9.88675 1.33 2.96 0.98 3.66 6.38 2.39 7.28 9.17

1215 1.33 2.93 0.98 3.65 6.32 2.31 6.93 8.38

MFlops con 5 bloques

Tamaño g gv gc1 gc4 gc8 gcv1 gcv4 gcv815 0.95 1.00 0.75 1.00 1.02 0.74 0.98 0.9845 1.31 2.05 1.08 2.99 4.01 1.60 4.07 5.32

135 1.48 3.23 1.26 4.17 7.78 2.79 8.33 14.13405 1.45 3.43 1.25 4.63 8.10 3.10 10.32 15.00675 1.41 3.24 1.23 4.62 7.84 3.04 9.91 13.48

1215 1.38 3.07 1.21 4.43 7.48 2.93 9.25 11.91

98

Método de Kogbetliantz en Memoria Compartida

MFlops con 9 bloques

Tamaño g gv gc1 gc4 gc8 gcv1 gcv4 gcv845 1.30 2.01 1.10 2.41 2.42 1.58 3.23 3.22

135 1.48 3.18 1.29 4.58 8.15 2.80 8.66 14.16405 1.47 3.48 1.29 4.66 8.39 3.21 10.48 15.60675 1.43 3.31 1.28 4.57 8.10 3.17 10.07 14.11

1215 1.39 3.12 1.24 4.62 7.69 3.02 9.68 12.54

MFlops con 27 bloques

Tamaño g gv gc1 gc4 gc8 gcv1 gcv4 gcv8135 1.47 3.01 1.30 3.04 3.07 2.68 5.54 5.65405 1.48 3.48 1.32 4.71 8.39 3.27 10.42 15.11675 1.46 3.43 1.32 4.49 7.30 3.33 10.16 14.07

1215 1.42 3.27 1.30 4.61 8.12 3.22 10.05 13.74

MFlops con 135 bloques

Tamaño g gv gc1 gc4 gc8 gcv1 gcv4 gcv8405 1.47 3.33 1.32 1.96 1.96 3.13 4.49 4.47675 1.46 3.41 1.33 3.23 3.23 3.30 7.41 7.44

1215 1.45 3.37 1.33 3.81 5.52 3.34 8.63 11.60

MFlops con 405 bloques

Tamaño g gv gc1 gc4 gc8 gcv1 gcv4 gcv81215 1.44 3.31 1.33 1.97 1.97 3.27 4.73 4.73

Tabla 30: MFlops del algoritmo par-impar por bloques rectangulares.

Tamaño g gv gc1 gc4 gc8 gcv1 gcv4 gcv815 1.10 1.38 0.80 2.45 3.68 0.97 2.68 3.8845 1.35 2.47 1.10 3.49 4.01 1.76 5.83 9.48

135 1.48 3.35 1.30 4.58 8.15 2.80 8.66 14.16405 1.48 3.48 1.32 4.71 8.39 3.27 10.48 15.60675 1.46 3.43 1.33 4.62 8.10 3.33 10.16 14.11

1215 1.45 3.37 1.33 4.62 8.12 3.34 10.05 13.74

Tabla 31: Resumen de MFlops del algoritmo par-impar por bloques rectangulares.

Tamaño gv gc1 gc4 gc8 gcv1 gcv4 gcv815 1.25 0.73 2.23 3.35 0.70 1.94 2.8145 1.83 0.81 2.59 2.97 0.71 2.36 3.84

135 2.26 0.88 3.09 5.51 0.84 2.59 4.23405 2.35 0.89 3.18 5.67 0.94 3.01 4.48675 2.35 0.91 3.16 5.55 0.97 2.96 4.11

1215 2.32 0.92 3.19 5.60 0.99 2.98 4.08

Tabla 32: Incremento de velocidad del algoritmo par-impar por bloques rectangulares.

99

Computación de la PSVD

Tamaño gc1 gc4 gc8 gcv1 gcv4 gcv815 0.73 0.56 0.42 0.70 0.48 0.3545 0.81 0.65 0.37 0.71 0.59 0.48

135 0.88 0.77 0.69 0.84 0.65 0.53405 0.89 0.8 0.71 0.94 0.75 0.56675 0.91 0.79 0.69 0.97 0.74 0.51

1215 0.92 0.8 0.7 0.99 0.75 0.51

Tabla 33: Eficiencia del algoritmo par-impar por bloques rectangulares.

�.-������ # ) ��������-���),� ���. �" #%$&�('��. ��� � � ��-������*) �. ) ����� -�� -���������" )�� # �

MFlops con 1x1 bloque (cuadrado)

Tamaño g gv1 gc1 gc4 gc8 gcv1 gcv4 gcv815 1.10 1.65 0.82 2.65 4.41 1.09 3.30 5.2845 1.23 2.74 0.93 3.33 6.16 1.86 6.29 1.05

135 1.27 3.49 0.94 3.64 6.40 2.50 8.59 13.94405 1.17 3.09 0.92 3.44 5.93 2.44 7.54 9.84675 1.15 2.97 0.91 3.37 5.78 2.37 7.14 9.06

1215 1.15 2.92 0.90 3.36 5.70 2.28 6.80 8.08

MFlops con 5x5 bloques (cuadrado)

Tamaño g gv1 gc1 gc4 gc8 gcv1 gcv4 gcv815 0.79 0.69 0.63 0.83 0.82 0.54 7.04 0.7145 1.19 1.55 1.00 2.62 3.49 1.24 3.10 8.02

135 1.40 2.90 1.17 3.92 7.12 2.41 7.42 12.82405 1.41 3.35 1.23 4.55 8.04 3.00 9.99 14.90675 1.39 3.35 1.22 4.62 7.96 3.04 10.15 14.17

1215 1.36 3.22 1.19 4.44 7.66 2.99 9.62 13.04

MFlops con 9x9 bloques (cuadrado)

Tamaño g gv1 gc1 gc4 gc8 gcv1 gcv4 gcv845 1.02 1.05 0.87 1.72 1.71 0.87 1.67 1.67

135 1.35 2.25 1.16 4.03 6.71 1.93 5.98 9.46405 1.41 3.08 1.27 4.57 8.35 2.79 9.10 13.91675 1.42 3.25 1.28 4.64 8.44 3.01 9.88 14.41

1215 1.41 3.35 1.28 4.84 8.36 3.14 10.39 14.50

MFlops con 27x27 bloques (cuadrado)

Tamaño g gv1 gc1 gc4 gc8 gcv1 gcv4 gcv8135 0.99 1.02 0.88 1.72 1.71 0.90 1.68 1.69405 1.30 2.16 1.21 4.04 6.70 1.97 5.79 8.42675 1.36 2.67 1.27 4.29 6.89 2.49 7.59 10.28

1215 1.41 3.01 1.32 4.72 8.58 2.85 9.13 13.30

100

Método de Kogbetliantz en Memoria Compartida

MFlops con 135x135 bloques (cuadrado)

Tamaño g gv1 gc1 gc4 gc8 gcv1 gcv4 gcv8405 0.68 0.58 0.61 0.78 0.78 0.51 0.66 0.66675 0.93 0.95 0.85 1.65 1.65 0.87 1.61 1.61

1215 1.15 1.53 1.08 2.77 3.69 1.42 3.33 4.15

MFlops con 405x405 bloques (cuadrado)

Tamaño g gv1 gc1 gc4 gc8 gcv1 gcv4 gcv81215 0.66 0.56 0.59 0.76 0.76 0.50 0.65 0.65

Tabla 34: MFlops del algoritmo par-impar por bloques cuadrados.

Tamaño g gv1 gc1 gc4 gc8 gcv1 gcv4 gcv815 1.19 1.65 1.00 2.65 4.41 1.24 3.30 5.2845 1.23 2.74 0.93 3.33 6.16 1.86 6.29 8.02

135 1.40 3.49 1.17 4.03 7.12 2.50 8.59 13.94405 1.41 3.35 1.27 4.57 8.35 3.00 9.99 14.90675 1.42 3.35 1.28 4.64 8.44 3.04 10.39 14.41

1215 1.41 3.35 1.32 4.84 8.58 3.14 10.39 14.50

Tabla 35: Resumen de MFlops del algoritmo par-impar por bloques cuadrados.

Tamaño gv gc1 gc4 gc8 gcv1 gcv4 gcv815 1.39 0.84 2.23 3.71 0.76 2.00 3.2045 2.23 0.76 2.71 5.01 0.68 2.30 2.93

135 2.50 0.84 2.88 5.09 0.72 2.46 3.99405 2.38 0.90 3.24 5.92 0.90 2.98 4.45675 2.36 0.90 3.27 5.94 0.91 3.10 4.30

1215 2.38 0.94 3.43 6.09 0.94 3.10 4.33

Tabla 36: Incremento de velocidad del algoritmo par-impar por bloques rectangulares.

Tamaño gc1 gc4 gc8 gcv1 gcv4 gcv815 0.84 0.56 0.46 0.76 0.5 0.445 0.76 0.68 0.63 0.68 0.58 0.4

135 0.84 0.72 0.64 0.72 0.62 0.5405 0.90 0.81 0.74 0.90 0.75 0.56675 0.90 0.82 0.74 0.91 0.78 0.54

1215 0.94 0.86 0.76 0.94 0.78 0.54

Tabla 37: Eficiencia del algoritmo par-impar por bloques rectangulares.

101

Computación de la PSVD

�.-������ # ) ��������-���),� ���. �" #%$&�('��. ��� � � ��-�� �-�� # )�������� ), �-�� -�� -���������-� � �+)+��� -�����-��

MFlops con 1 bloques

Tamaño 1 2 3 4 5 6 8 1015 9.10 9.06 9.10 9.09 9.12 9.09 9.12 9.0745 9.64 5.31 5.02 4.68 4.48 4.37 4.27 4.20

135 9.00 8.25 10.04 10.75 10.75 10.60 10.36 10.13405 8.29 9.44 13.05 16.20 18.11 20.48 22.81 23.72675 7.41 10.10 14.09 17.21 20.83 23.71 28.36 30.84

1215 7.06 11.02 15.63 19.89 23.68 26.98 33.24 37.862025 7.01 11.31 16.50 21.25 25.84 30.02 37.66 44.193645 6.98 11.47 16.95 22.26 27.29 32.14 41.30 49.43

MFlops con 5 bloques

Tamaño 1 2 3 4 5 6 8 1015 7.98 7.99 7.99 7.97 7.99 7.95 7.98 7.9745 9.46 9.41 9.41 8.07 8.05 8.09 8.16 8.19

135 10.17 10.48 10.63 10.56 10.63 10.55 10.41 10.20405 8.46 10.26 13.46 15.61 16.86 17.85 18.40 18.93675 7.16 10.13 13.96 17.21 19.64 21.61 24.50 25.05

1215 6.63 10.33 14.79 18.74 22.32 24.34 30.38 32.652025 6.32 10.29 15.27 19.63 23.97 27.86 34.71 38.203645 6.08 10.17 15.00 19.58 24.30 28.77 37.50 42.54

MFlops con 9 bloques

Tamaño 1 2 3 4 5 6 8 1045 9.04 9.01 8.99 8.99 9.02 9.00 8.99 8.98

135 9.97 10.90 13.05 14.27 14.24 14.38 14.22 13.62405 10.13 11.78 14.96 17.22 18.60 19.68 21.17 21.45675 8.30 11.33 15.24 18.28 20.51 22.53 25.30 25.56

1215 6.90 10.48 15.00 18.94 21.66 25.09 29.79 32.062025 6.37 10.53 15.47 19.88 23.87 27.38 33.97 36.913645 6.14 10.22 15.26 20.18 24.87 29.35 37.63 42.00

MFlops con 27 bloques

Tamaño 1 2 3 4 5 6 8 10135 9.09 8.01 10.02 10.99 11.48 11.43 10.89 10.34405 9.83 12.70 17.36 21.35 24.54 26.99 30.59 30.97675 9.53 13.52 17.79 21.53 24.83 27.62 31.85 33.40

1215 9.45 13.99 19.37 23.91 27.66 30.93 36.90 38.512025 7.89 12.41 17.80 22.51 26.73 30.13 37.36 39.833645 6.50 10.94 16.17 21.05 25.59 29.74 37.83 41.91

102

Método de Kogbetliantz en Memoria Compartida

MFlops con 135 bloques

Tamaño 1 2 3 4 5 6 8 10405 8.73 8.84 12.09 14.47 16.24 17.45 18.63 18.05675 8.50 12.03 16.81 21.13 24.92 28.01 33.52 34.53

1215 8.85 13.66 19.52 25.24 30.17 34.43 43.54 45.692025 8.96 14.16 20.65 26.72 32.65 37.99 48.74 52.423645 9.12 14.89 21.73 28.21 34.24 39.86 51.01 54.43

MFlops con 405 bloques

Tamaño 1 2 3 4 5 6 8 101215 8.09 11.62 16.65 21.20 25.08 28.51 34.79 37.072025 8.23 13.06 19.04 24.60 29.99 34.58 44.23 47.313645 8.69 14.16 20.92 27.49 33.83 39.50 51.52 55.38

Tabla 38: Prestaciones en Mflops del algoritmo par-impar por bloques rectangulares (t).

Tamaño 1 2 3 4 5 6 8 1015 9.10 9.06 9.10 9.09 9.12 9.09 9.12 9.0745 9.64 9.41 9.41 8.99 9.02 9.00 8.99 8.98

135 10.17 10.90 13.05 14.27 14.24 14.38 14.22 13.62405 10.13 12.70 17.36 21.35 24.54 26.99 30.59 30.97675 9.53 13.52 17.79 21.53 24.92 28.01 33.52 34.53

1215 9.45 13.99 19.52 25.24 30.17 34.43 43.54 45.692025 8.96 14.16 20.65 26.72 32.65 37.99 48.74 52.423645 9.12 14.89 21.73 28.21 34.24 39.86 51.52 55.38

Tabla 39: Resumen de Mflops del algoritmo par-impar por bloques rectangulares (t).

Tamaño 2 3 4 5 6 8 1015 0.99 1.00 0.99 1.00 0.99 1.00 0.9945 0.97 0.97 0.93 0.93 0.93 0.93 0.93

135 1.07 1.28 1.40 1.40 1.41 1.39 1.33405 1.25 1.71 2.10 2.42 2.66 3.02 3.05675 1.41 1.86 2.25 2.61 2.93 3.51 3.62

1215 1.48 2.06 2.66 3.19 3.64 4.60 4.832025 1.57 2.30 2.98 3.64 4.23 5.43 5.843645 1.63 2.38 3.09 3.75 4.37 5.64 6.07

Tabla 40: Incremento de velocidad del alg. par-impar por bloques rectangulares (t).

103

Computación de la PSVD

Tamaño 2 3 4 5 6 8 1015 0.49 0.33 0.24 0.20 0.16 0.12 0.0945 0.48 0.32 0.23 0.18 0.15 0.11 0.09

135 0.53 0.42 0.35 0.28 0.23 0.17 0.13405 0.62 0.57 0.52 0.48 0.44 0.37 0.30675 0.70 0.62 0.56 0.52 0.48 0.43 0.36

1215 0.74 0.68 0.66 0.63 0.60 0.57 0.482025 0.78 0.76 0.74 0.72 0.70 0.67 0.583645 0.81 0.79 0.77 0.75 0.72 0.70 0.60

Tabla 41: Eficiencia del algoritmo par-impar por bloques rectangulares (t).

MFlops con 1 bloques

Tamaño 1 2 3 4 5 6 8 1015 44.35 43.96 43.96 44.55 44.55 43.96 44.16 44.3545 57.67 9.36 7.31 6.43 5.84 5.41 0.24 0.08135 42.33 16.62 16.85 15.99 15.20 13.74 0.76 0.58405 32.17 21.13 26.30 29.77 30.40 29.60 26.49 28.98675 19.55 24.65 30.15 36.09 38.46 39.16 31.43 0.781215 17.84 30.06 33.98 42.19 48.85 47.80 4.21 44.472025 17.73 30.05 41.47 48.02 58.25 53.62 66.74 57.093645 17.30 31.30 43.26 53.66 67.30 57.98 72.94 67.07

MFlops con 5 bloques

Tamaño 1 2 3 4 5 6 8 1015 38.28 37.99 38.14 38.57 38.43 38.28 38.43 38.4345 68.15 16.43 10.62 9.15 7.81 6.95 1.80 0.09

135 58.33 21.51 15.60 13.46 12.12 10.83 0.72 10.19405 37.27 24.23 25.82 26.42 25.08 24.21 21.00 19.49675 27.30 28.62 31.45 34.96 35.55 34.97 33.18 1.93

1215 23.94 32.66 38.33 45.38 48.34 46.84 44.26 44.882025 19.73 31.58 45.47 53.86 58.09 63.43 61.88 60.583645 18.06 28.88 42.52 53.05 60.66 69.63 69.17 72.79

MFlops con 9 bloques

Tamaño 1 2 3 4 5 6 8 1045 62.55 12.73 9.45 8.37 7.05 6.63 2.27 1.25

135 52.99 22.76 19.68 18.10 16.50 15.15 13.37 14.43405 36.63 25.36 26.47 27.18 26.32 23.94 23.37 22.47675 28.10 28.97 32.41 34.57 34.94 34.70 33.56 31.51

1215 24.37 33.58 39.45 44.37 48.34 43.32 45.51 47.432025 20.27 36.01 47.40 53.37 58.88 62.30 59.77 62.203645 18.47 31.67 42.96 58.62 67.42 71.92 71.90 77.01

104

Método de Kogbetliantz en Memoria Compartida

MFlops con 27 bloques

Tamaño 1 2 3 4 5 6 8 10135 45.82 19.90 18.84 17.66 16.13 14.82 14.55 13.38405 35.36 29.99 34.50 38.40 38.47 37.52 36.06 34.31675 27.70 33.87 36.40 39.83 41.13 39.72 39.36 37.77

1215 24.49 35.07 39.32 47.10 50.16 50.46 47.97 48.612025 22.13 36.90 48.48 55.33 59.57 60.04 58.74 63.333645 19.00 35.54 51.48 63.18 68.32 70.64 75.63 76.44

MFlops con 135 bloques

Tamaño 1 2 3 4 5 6 8 10405 33.97 28.12 31.72 35.74 35.93 35.55 34.84 34.76675 27.73 33.39 40.13 46.02 49.62 50.02 50.81 51.96

1215 24.09 37.42 44.74 58.52 65.00 66.45 66.03 64.102025 23.01 39.80 54.59 65.80 75.02 76.54 77.94 82.793645 21.50 40.44 55.13 64.95 76.19 75.80 82.30 89.62

MFlops con 405 bloques

Tamaño 1 2 3 4 5 6 8 101215 23.94 36.93 42.13 54.69 62.03 62.88 61.71 62.802025 23.12 40.39 53.53 65.62 75.96 64.86 79.70 82.823645 21.46 39.82 58.88 73.08 82.45 84.77 94.32 101.13

Tabla 42: Prestaciones en Mflops del algoritmo par-impar por bloques rectangulares (to).

Tams 1 2 3 4 5 6 8 1015 44.35 43.96 43.96 44.55 44.55 43.96 44.16 44.3545 68.15 16.43 10.62 9.15 7.81 6.95 2.27 1.25

135 58.33 22.76 19.68 18.10 16.50 15.15 14.55 14.43405 37.27 29.99 34.50 38.40 38.47 37.52 36.06 34.76675 28.10 33.87 40.13 46.02 49.62 50.02 50.81 51.96

1215 24.49 37.42 44.74 58.52 65.00 66.45 66.03 64.102025 23.12 40.39 54.59 65.80 75.96 76.54 79.70 82.823645 21.50 40.44 58.88 73.08 82.45 84.77 94.32 101.13

Tabla 43: Resumen de Mflops del algoritmo par-impar por bloques rectangulares (to).

Tamaño 2 3 4 5 6 8 1015 0.99 0.99 1.00 1.00 0.99 0.99 1.0045 0.24 0.15 0.13 0.11 0.10 0.03 0.01

135 0.39 0.33 0.31 0.28 0.25 0.24 0.24405 0.80 0.92 1.03 1.03 1.00 0.96 0.93675 1.20 1.42 1.63 1.76 1.77 1.80 1.84

1215 1.52 1.82 2.38 2.65 2.71 2.69 2.612025 1.74 2.36 2.84 3.28 3.31 3.44 3.583645 1.88 2.73 3.39 3.83 3.94 4.38 4.70

Tabla 44: Incremento de velocidad del alg. par-impar por bloques rectangulares (to).

105

Computación de la PSVD

Tamaño 2 3 4 5 6 8 1015 0.49 0.33 0.25 0.20 0.16 0.12 0.1045 0.12 0.05 0.03 0.02 0.01 0.00 0.00

135 0.19 0.11 0.07 0.05 0.04 0.03 0.02405 0.40 0.30 0.25 0.20 0.16 0.12 0.09675 0.60 0.47 0.40 0.35 0.29 0.22 0.18

1215 0.76 0.60 0.59 0.53 0.45 0.33 0.262025 0.87 0.78 0.71 0.65 0.55 0.43 0.353645 0.94 0.91 0.84 0.76 0.65 0.54 0.47

Tabla 45: Eficiencia del algoritmo par-impar por bloques rectangulares (to).

MFlops con 1 bloques

Tamaños 1 2 3 4 5 6 8 1015 11.06 6.67 6.26 6.30 5.64 1.72 6.08 5.9845 11.86 13.74 15.19 14.35 12.69 12.27 0.73 13.54

135 10.66 14.23 18.35 22.67 9.87 28.18 17.86 10.10405 9.71 14.06 18.80 23.78 10.04 8.70 21.19 24.15675 8.54 14.23 19.36 24.22 18.10 12.15 3.56 2.92

1215 8.05 14.29 20.28 26.12 24.45 20.59 21.53 20.972025 8.02 14.29 20.21 25.74 25.60 25.80 26.57 20.143645 8.03 14.32 20.74 24.67 21.16 19.76 20.34 16.35

MFlops con 5 bloques

Tamaño 1 2 3 4 5 6 8 1015 9.66 3.21 3.10 3.11 1.34 2.94 3.10 3.0645 11.84 6.46 6.37 7.53 7.71 8.24 2.80 7.47

135 11.54 11.45 10.99 11.36 2.82 8.05 1.02 11.29405 10.23 15.70 20.67 24.69 11.27 4.74 15.91 24.54675 9.40 16.11 22.03 27.55 21.69 13.07 13.00 4.89

1215 8.84 16.29 23.01 29.25 28.96 27.41 19.67 9.282025 8.32 16.10 23.51 23.67 22.91 29.24 22.29 22.663645 8.06 15.55 22.92 25.76 15.05 22.10 21.75 21.88

MFlops con 9 bloques

Tamaño 1 2 3 4 5 6 8 1045 11.29 5.06 5.43 5.45 5.10 5.32 5.32 0.76

135 11.23 7.94 8.50 10.13 4.33 6.99 4.95 10.18405 10.14 14.54 16.38 15.43 12.67 5.92 16.43 12.64675 9.41 15.57 20.69 24.74 20.33 22.24 19.67 21.77

1215 8.91 16.21 22.43 28.40 23.70 25.87 20.20 22.322025 8.45 16.40 23.47 25.87 23.03 28.69 29.22 22.113645 8.14 15.73 23.52 25.54 15.28 22.30 22.76 15.27

106

Método de Kogbetliantz en Memoria Compartida

MFlops con 27 bloques

Tamaño 1 2 3 4 5 6 8 10135 10.57 5.75 6.62 6.62 3.03 0.44 6.06 6.50405 10.01 7.85 8.67 10.78 6.89 8.43 8.60 8.30675 9.30 10.82 10.75 12.01 10.48 11.07 9.41 9.12

1215 8.90 14.43 16.51 15.80 12.05 14.34 15.90 15.252025 8.77 15.59 20.83 21.09 20.51 19.68 23.94 19.523645 8.24 16.27 23.02 22.20 15.83 22.36 21.66 15.44

MFlops con 135 bloques

Tamaño 1 2 3 4 5 6 8 10405 10.19 4.77 4.77 4.77 4.49 4.68 4.64 4.24675 9.24 6.30 7.42 7.19 7.15 6.79 5.88 7.04

1215 8.85 7.05 7.62 9.35 8.45 8.49 7.36 7.142025 8.76 8.10 8.83 9.52 8.64 8.72 8.64 8.593645 8.63 11.62 11.01 10.30 11.19 10.62 10.72 11.13

MFlops con 405 bloques

Tamaño 1 2 3 4 5 6 8 101215 9.18 4.97 4.97 3.93 4.22 4.89 4.86 4.882025 8.74 6.40 7.58 7.40 7.10 7.32 7.39 7.293645 8.65 7.06 7.66 6.90 6.90 7.44 7.56 6.75

Tabla 46: Prestaciones en Mflops del algoritmo par-impar por bloques rectangulares (m).

Tamaños 1 2 3 4 5 6 8 1015 11.06 6.67 6.26 6.30 5.64 2.94 6.08 5.9845 11.86 13.74 15.19 14.35 12.69 12.27 5.32 13.54

135 11.54 14.23 18.35 22.67 9.87 28.18 17.86 11.29405 10.23 15.70 20.67 24.69 12.67 8.70 21.19 24.54675 9.41 16.11 22.03 27.55 21.69 22.24 19.67 21.77

1215 9.18 16.29 23.01 29.25 28.96 27.41 21.53 22.322025 8.77 16.40 23.51 25.87 25.60 29.24 29.22 22.663645 8.65 16.27 23.52 25.76 21.16 22.36 22.76 21.88

Tabla 47: Resumen de Mflops del algoritmo par-impar por bloques rectangulares (m).

Tamaño 2 3 4 5 6 8 1015 0.60 0.56 0.56 0.50 0.26 0.54 0.5445 1.15 1.28 1.21 1.07 1.03 0.44 1.14

135 1.23 1.58 1.96 0.85 2.44 1.54 0.97405 1.53 2.01 2.41 1.23 0.85 2.07 2.39675 1.71 2.34 2.92 2.30 2.36 2.09 2.31

1215 1.77 2.50 3.18 3.15 2.98 2.34 2.422025 1.86 2.67 2.94 2.91 3.33 3.33 2.583645 1.88 2.71 2.97 2.44 2.58 2.63 2.52

Tabla 48: Incremento de velocidad del alg. par-impar por bloques rectangulares (m).

107

Computación de la PSVD

Tamaño 2 3 4 5 6 8 1015 0.30 0.18 0.14 0.10 0.04 0.06 0.0545 0.57 0.42 0.30 0.21 0.17 0.05 0.11

135 0.61 0.52 0.49 0.17 0.40 0.19 0.09405 0.76 0.67 0.60 0.24 0.14 0.25 0.23675 0.85 0.78 0.73 0.46 0.39 0.26 0.23

1215 0.88 0.83 0.79 0.63 0.49 0.29 0.242025 0.93 0.89 0.73 0.58 0.55 0.41 0.253645 0.94 0.90 0.74 0.48 0.43 0.32 0.25

Tabla 49: Eficiencia del algoritmo par-impar por bloques rectangulares (m).

MFlops con 1 bloques

Tamaño 1 2 3 4 5 6 8 1015 40.93 7.96 6.94 6.36 6.09 6.19 5.87 5.8345 55.60 25.19 22.71 18.39 16.21 15.62 14.61 14.92

135 40.92 31.27 35.46 40.21 42.93 45.69 52.26 42.83405 30.94 30.94 38.53 47.20 54.67 61.25 73.00 84.13675 20.87 30.75 38.95 47.29 56.00 64.44 78.32 93.25

1215 18.52 30.50 42.15 52.91 62.93 70.75 86.51 102.212025 18.19 30.06 42.27 53.99 65.78 76.42 96.14 112.403645 16.91 26.79 39.17 49.32 61.73 71.17 93.79 96.82

MFlops con 5 bloques

Tamaño 1 2 3 4 5 6 8 1015 16.11 2.95 2.88 2.88 2.79 2.64 2.50 2.4345 51.81 8.68 7.89 7.77 7.24 7.17 7.10 7.20

135 85.65 23.82 18.92 16.90 16.20 16.82 17.74 17.59405 80.82 40.64 37.55 39.38 41.43 41.34 38.83 38.34675 56.32 51.55 50.48 53.33 56.23 56.31 61.47 60.07

1215 46.27 61.63 68.85 76.38 83.22 84.45 86.75 90.642025 37.19 61.54 78.22 91.48 98.33 104.22 107.10 108.213645 33.23 57.02 75.01 87.09 96.63 106.97 125.01 116.91

MFlops con 9 bloques

Tamaño 1 2 3 4 5 6 8 1045 39.07 6.62 5.73 5.78 5.64 5.59 5.55 5.54

135 75.38 16.39 13.81 13.38 13.71 13.78 13.67 13.80405 84.23 33.12 32.97 31.53 29.54 28.95 28.50 30.45675 62.14 41.65 38.88 40.78 43.54 43.40 42.14 42.46

1215 51.81 57.53 54.53 58.70 60.51 61.43 64.62 62.262025 41.31 66.79 71.77 77.85 80.79 84.40 83.86 81.533645 37.50 61.81 78.60 90.14 98.49 104.13 112.97 99.74

108

Método de Kogbetliantz en Memoria Compartida

MFlops con 27 bloques

Tamaño 1 2 3 4 5 6 8 10135 47.00 9.23 8.08 8.11 8.03 7.95 7.98 7.98405 73.08 19.73 17.61 18.88 19.10 19.10 19.13 19.28675 60.34 26.90 23.72 22.21 24.37 27.08 28.74 26.75

1215 55.92 33.93 36.68 36.94 35.67 35.85 34.87 36.392025 47.62 44.39 43.55 45.30 47.80 48.56 48.21 47.323645 39.33 58.06 57.00 60.65 63.82 64.51 69.51 60.53

MFlops con 135 bloques

Tamaño 1 2 3 4 5 6 8 10405 35.86 6.84 6.85 6.85 6.83 6.67 6.78 6.82675 41.63 10.61 10.31 10.36 10.36 10.31 10.30 10.40

1215 45.83 16.25 16.76 16.12 16.17 16.19 16.19 16.092025 44.96 21.85 21.00 23.51 23.82 23.90 23.88 23.623645 34.33 30.34 27.55 27.89 28.06 32.30 35.06 32.05

MFlops con 405 bloques

Tamaño 1 2 3 4 5 6 8 101215 28.53 7.25 7.24 7.23 7.24 7.20 7.24 7.162025 34.17 10.85 10.89 10.84 10.86 10.84 10.86 10.823645 28.32 16.55 17.08 16.62 16.80 16.82 16.76 16.95

Tabla 50: Prestaciones en Mflops del algoritmo par-impar por bloques rectangulares (mo).

Tamaño 1 2 3 4 5 6 8 1015 40.93 7.96 6.94 6.36 6.09 6.19 5.87 5.8345 55.60 25.19 22.71 18.39 16.21 15.62 14.61 14.92

135 85.65 31.27 35.46 40.21 42.93 45.69 52.26 42.83405 84.23 40.64 38.53 47.20 54.67 61.25 73.00 84.13675 62.14 51.55 50.48 53.33 56.23 64.44 78.32 93.25

1215 55.92 61.63 68.85 76.38 83.22 84.45 86.75 102.212025 47.62 66.79 78.22 91.48 98.33 104.22 107.10 112.403645 39.33 61.81 78.60 90.14 98.49 106.97 125.01 116.91

Tabla 51: Resumen de Mflops del algoritmo par-impar por bloques rectangulares (mo).

Tamaño 2 3 4 5 6 8 1015 0.19 0.16 0.15 0.14 0.15 0.14 0.1445 0.45 0.40 0.33 0.29 0.28 0.26 0.26

135 0.36 0.41 0.46 0.50 0.53 0.61 0.50405 0.48 0.45 0.56 0.64 0.72 0.86 0.99675 0.82 0.81 0.85 0.90 1.03 1.26 1.50

1215 1.10 1.23 1.36 1.48 1.51 1.55 1.822025 1.40 1.64 1.92 2.06 2.18 2.24 2.363645 1.57 1.99 2.29 2.50 2.71 3.17 2.97

Tabla 52: Incremento de velocidad del alg. par-impar por bloques rectangulares (mo).

109

Computación de la PSVD

Tamaño 2 3 4 5 6 8 1015 0.09 0.05 0.03 0.02 0.02 0.01 0.0145 0.22 0.13 0.08 0.05 0.04 0.03 0.02

135 0.18 0.13 0.11 0.10 0.08 0.07 0.05405 0.24 0.15 0.14 0.12 0.12 0.10 0.09675 0.41 0.27 0.21 0.18 0.17 0.15 0.15

1215 0.55 0.41 0.34 0.29 0.25 0.19 0.182025 0.70 0.54 0.48 0.41 0.36 0.28 0.233645 0.78 0.66 0.57 0.50 0.45 0.39 0.29

Tabla 53: Eficiencia del algoritmo par-impar por bloques rectangulares (mo).

MFlops con 1 bloques

Tamaño 1 2 3 4 5 6 8 1015 38.57 8.00 7.19 6.61 6.32 6.58 6.54 6.5345 52.40 24.75 22.93 19.08 17.15 16.49 17.36 18.49

135 49.36 37.27 38.74 40.84 41.55 41.94 46.47 43.31405 34.24 40.98 50.83 59.23 66.48 72.71 82.34 90.08675 24.77 40.73 52.35 63.30 73.42 82.95 96.97 111.93

1215 22.86 38.42 52.32 64.40 75.82 85.98 102.92 112.992025 22.91 38.68 53.32 65.19 74.33 83.77 96.46 103.583645 23.04 38.94 54.40 65.82 76.94 86.18 99.89 100.43

MFlops con 5 bloques

Tamaño 1 2 3 4 5 6 8 1015 15.78 2.94 2.87 2.82 2.74 2.60 2.55 2.4045 47.74 10.01 8.50 8.47 8.30 8.20 8.19 8.30

135 78.81 23.05 18.87 18.25 18.15 18.83 18.85 19.46405 48.13 35.65 33.16 33.45 35.04 36.73 35.92 34.84675 43.83 46.83 44.79 47.03 46.11 47.79 50.16 51.03

1215 41.19 56.46 61.32 66.16 67.56 68.23 67.39 65.112025 34.68 57.06 70.51 80.26 84.33 85.17 91.19 83.373645 32.44 53.96 70.07 78.60 85.54 88.42 93.17 98.73

MFlops con 9 bloques

Tamaño 1 2 3 4 5 6 8 1045 35.51 6.56 6.02 5.94 5.93 5.79 5.80 5.76

135 69.92 15.52 14.18 13.21 14.08 14.80 16.42 16.50405 48.79 27.36 29.56 28.74 27.48 26.60 31.76 32.00675 44.09 36.26 33.90 35.33 36.35 37.28 38.51 37.83

1215 44.30 50.45 48.48 51.09 49.47 50.82 53.62 53.572025 37.43 58.87 62.78 66.75 69.97 69.29 67.22 65.703645 34.53 55.53 68.95 78.58 85.89 88.24 86.26 87.43

110

Método de Kogbetliantz en Memoria Compartida

MFlops con 27 bloques

Tamaño 1 2 3 4 5 6 8 10135 43.85 8.21 7.79 7.71 7.71 7.48 7.63 7.59405 44.98 17.80 17.09 15.62 17.07 18.66 19.84 20.20675 43.16 23.51 21.41 23.43 24.82 24.49 23.53 25.90

1215 40.48 28.13 31.57 31.90 32.17 30.89 38.95 37.442025 41.18 39.08 36.92 38.63 41.02 41.95 43.80 41.363645 35.55 51.59 50.07 53.05 53.31 54.84 56.65 56.40

MFlops con 135 bloques

Tamaño 1 2 3 4 5 6 8 10405 25.92 5.84 5.84 5.82 5.81 5.80 5.78 5.82675 30.87 8.90 8.80 8.85 8.83 8.80 8.79 8.76

1215 33.26 14.51 14.45 14.38 14.42 14.45 14.41 14.402025 30.18 19.76 19.98 18.59 19.97 21.25 21.88 22.063645 30.67 27.20 25.10 27.84 29.68 30.30 30.57 30.10

MFlops con 405 bloques

Tamaño 1 2 3 4 5 6 8 101215 22.97 6.04 6.02 5.99 5.98 5.96 5.99 6.002025 26.73 9.06 9.07 9.07 9.06 9.05 9.03 9.033645 23.25 14.93 14.62 14.57 14.61 14.67 14.67 14.61

Tabla 54: Prestaciones en Mflops del algoritmo par-impar por bloques rectangulares (mvo).

Tamaño 1 2 3 4 5 6 8 1015 38.57 8.00 7.19 6.61 6.32 6.58 6.54 6.5345 52.40 24.75 22.93 19.08 17.15 16.49 17.36 18.49

135 78.81 37.27 38.74 40.84 41.55 41.94 46.47 43.31405 48.79 40.98 50.83 59.23 66.48 72.71 82.34 90.08675 44.09 46.83 52.35 63.30 73.42 82.95 96.97 111.93

1215 44.30 56.46 61.32 66.16 75.82 85.98 102.92 112.992025 41.18 58.87 70.51 80.26 84.33 85.17 96.46 103.583645 35.55 55.53 70.07 78.60 85.89 88.42 99.89 100.43

Tabla 55: Resumen de Mflops del algoritmo par-impar por bloques rectangulares (mvo).

Tamaño 2 3 4 5 6 8 1015 0.20 0.18 0.17 0.16 0.17 0.16 0.1645 0.47 0.43 0.36 0.32 0.31 0.33 0.35

135 0.47 0.49 0.51 0.52 0.53 0.58 0.54405 0.84 1.04 1.21 1.36 1.49 1.68 1.84675 1.06 1.18 1.43 1.66 1.88 2.19 2.53

1215 1.27 1.38 1.49 1.71 1.94 2.32 2.552025 1.42 1.71 1.94 2.04 2.06 2.34 2.513645 1.56 1.97 2.21 2.41 2.48 2.80 2.82

Tabla 56: Incremento de velocidad del alg. par-impar por bloques rectangulares (mvo).

111

Computación de la PSVD

Tamaño 2 3 4 5 6 8 1015 0.10 0.06 0.04 0.03 0.02 0.02 0.0145 0.23 0.14 0.09 0.06 0.05 0.04 0.03

135 0.23 0.16 0.12 0.10 0.08 0.07 0.05405 0.42 0.34 0.30 0.27 0.24 0.21 0.18675 0.53 0.39 0.35 0.33 0.31 0.27 0.25

1215 0.63 0.46 0.37 0.34 0.32 0.29 0.252025 0.71 0.57 0.48 0.40 0.34 0.29 0.253645 0.78 0.65 0.55 0.48 0.41 0.35 0.28

Tabla 57: Eficiencia del algoritmo par-impar por bloques rectangulares (mvo).

�.-������ # ) ��������-���),� ���. �" #%$&�('��. ��� � � ��-������*) �. ) ����� -�� -���������-� ����*),��� -�����-��

MFlops con 1x1 bloques

Tamaño 1 2 3 4 5 6 8 1015 57.53 9.67 8.95 8.40 8.17 8.64 8.78 8.6845 64.07 26.88 23.79 19.98 17.95 16.96 17.97 17.75

135 41.16 29.25 33.05 37.62 40.11 42.86 49.87 42.07405 29.27 27.30 33.73 40.79 47.59 53.77 64.13 75.22675 19.62 27.59 34.15 41.09 48.44 55.90 69.00 79.90

1215 16.84 27.27 37.50 47.03 54.84 61.47 75.74 88.752025 16.42 26.62 36.75 48.15 58.76 68.64 86.53 100.023645 16.41 26.75 37.66 47.51 59.25 69.96 91.14 101.80

MFlops con 5x5 bloques

Tamaño 1 2 3 4 5 6 8 1015 11.20 2.15 2.09 2.07 2.00 1.87 1.83 1.7145 42.31 7.64 6.46 6.56 6.35 6.33 6.32 6.21

135 81.76 21.48 16.58 15.85 15.31 15.98 16.65 17.21405 75.28 37.29 34.01 35.02 35.62 35.58 34.03 32.13675 53.51 47.72 46.88 47.86 47.39 50.71 52.65 52.26

1215 46.69 57.20 63.45 69.98 73.92 75.80 76.60 80.032025 45.87 62.21 74.54 85.45 92.65 96.93 109.01 101.053645 31.61 59.07 80.01 95.92 108.52 114.93 121.39 136.27

MFlops con 9x9 bloques

Tamaño 1 2 3 4 5 6 8 1045 22.56 4.01 3.48 3.47 3.51 3.35 3.30 3.24

135 63.87 11.75 10.30 10.15 10.44 10.54 11.16 11.28405 86.68 27.78 27.83 24.36 23.32 22.21 24.42 25.46675 58.86 38.19 33.56 34.25 34.10 33.91 33.53 32.19

1215 49.87 52.70 50.74 50.81 49.39 51.57 53.90 53.822025 49.83 63.98 69.10 73.58 75.95 76.88 71.88 73.373645 50.06 71.99 83.65 94.13 103.55 103.86 105.65 103.17

112

Método de Kogbetliantz en Memoria Compartida

MFlops con 27x27 bloques

Tamaño 1 2 3 4 5 6 8 10135 21.16 3.89 3.42 3.46 3.38 3.28 3.20 3.20405 63.52 12.08 10.59 10.42 10.62 10.95 11.57 11.44675 64.94 22.09 16.09 15.66 16.12 16.69 16.92 17.64

1215 61.04 28.71 29.68 25.64 24.43 23.19 25.56 26.902025 48.07 39.05 35.12 35.24 34.46 34.62 34.79 33.333645 51.32 59.18 53.46 53.43 50.77 52.47 53.16 53.32

MFlops con 135x135 bloques

Tamaño 1 2 3 4 5 6 8 10405 8.95 1.97 1.90 1.91 1.82 1.71 1.64 1.52675 20.05 3.92 3.45 3.40 3.42 3.30 3.19 3.15

1215 38.09 8.62 6.70 6.79 6.60 6.58 6.52 6.372025 46.25 12.47 10.92 10.76 10.78 11.36 11.71 11.543645 41.00 24.13 17.98 16.76 16.84 17.55 17.95 18.41

MFlops con 405x405 bloques

Tamaño 1 2 3 4 5 6 8 101215 8.77 1.98 1.95 1.88 1.83 1.72 1.68 1.532025 19.16 3.95 3.48 3.40 3.43 3.38 3.22 3.173645 28.21 8.67 6.67 6.84 6.62 6.58 6.46 6.43

Tabla 58: Prestaciones en Mflops del algoritmo par-impar por bloques cuadrados (mo).

Tamaño 1 2 3 4 5 6 8 1015 57.53 9.67 8.95 8.40 8.17 8.64 8.78 8.6845 64.07 26.88 23.79 19.98 17.95 16.96 17.97 17.75

135 81.76 29.25 33.05 37.62 40.11 42.86 49.87 42.07405 86.68 37.29 34.01 40.79 47.59 53.77 64.13 75.22675 64.94 47.72 46.88 47.86 48.44 55.90 69.00 79.90

1215 61.04 57.20 63.45 69.98 73.92 75.80 76.60 88.752025 49.83 63.98 74.54 85.45 92.65 96.93 109.01 101.053645 51.32 71.99 83.65 95.92 108.52 114.93 121.39 136.27

Tabla 59: Resumen de Mflops del algoritmo par-impar por bloques cuadrados (mo).

Tamaño 2 3 4 5 6 8 1015 0.16 0.15 0.14 0.14 0.15 0.15 0.1545 0.41 0.37 0.31 0.28 0.26 0.28 0.27

135 0.35 0.40 0.46 0.49 0.52 0.61 0.51405 0.43 0.39 0.47 0.54 0.62 0.73 0.86675 0.73 0.72 0.73 0.74 0.86 1.06 1.23

1215 0.93 1.03 1.14 1.21 1.24 1.25 1.452025 1.28 1.49 1.71 1.85 1.94 2.18 2.023645 1.40 1.62 1.86 2.11 2.23 2.36 2.65

Tabla 60: Incremento de velocidad del alg. par-impar por bloques cuadrados (mo).

113

Computación de la PSVD

Tamaño 2 3 4 5 6 8 1015 0.08 0.05 0.03 0.02 0.02 0.01 0.0145 0.20 0.12 0.07 0.05 0.04 0.03 0.02

135 0.17 0.13 0.11 0.09 0.08 0.07 0.05405 0.21 0.13 0.11 0.10 0.10 0.09 0.08675 0.36 0.24 0.18 0.14 0.14 0.13 0.12

1215 0.46 0.34 0.28 0.24 0.20 0.15 0.142025 0.64 0.49 0.42 0.37 0.32 0.27 0.203645 0.70 0.54 0.46 0.42 0.37 0.29 0.26

Tabla 61: Eficiencia del algoritmo par-impar por bloques cuadrados (mo).

MFlops con 1x1 bloques

Tamaño 1 2 3 4 5 6 8 1015 85.16 14.71 14.14 13.22 13.19 14.09 14.34 13.5745 87.39 46.60 43.83 35.30 31.85 30.45 31.01 32.10

135 69.84 53.07 59.73 67.39 70.51 76.09 87.25 73.39405 54.38 52.36 64.49 74.68 88.89 98.79 117.65 132.63675 38.45 53.99 66.60 80.01 93.39 106.72 128.39 153.21

1215 33.26 53.48 73.13 91.07 105.52 118.71 144.57 166.012025 32.46 52.59 73.28 93.74 113.27 132.67 162.27 174.973645 32.41 52.54 73.39 94.49 115.01 134.35 174.46 188.64

MFlops con 5x5 bloques

Tamaño 1 2 3 4 5 6 8 1015 10.45 2.15 2.08 2.05 1.97 1.86 1.79 1.6845 41.72 8.39 7.06 7.24 6.90 6.92 6.81 6.78

135 79.83 24.00 18.24 17.28 16.97 17.93 18.49 19.02405 54.51 40.00 35.40 36.12 36.94 37.91 37.67 35.18675 49.82 51.70 50.38 50.96 48.95 51.74 53.46 53.64

1215 49.82 62.69 67.14 72.08 74.77 75.27 75.90 71.482025 49.70 68.53 78.10 87.33 90.85 93.01 94.12 94.013645 35.43 63.31 82.37 94.08 103.06 106.90 110.86 116.77

MFlops con 9x9 bloques

Tamaño 1 2 3 4 5 6 8 1045 21.24 4.07 3.55 3.50 3.47 3.45 3.31 3.20

135 63.59 12.15 10.77 10.69 10.66 11.26 11.77 11.54405 57.86 28.14 28.40 24.88 24.04 22.74 24.64 26.25675 48.24 37.64 33.55 34.48 32.93 33.77 33.65 32.72

1215 48.16 53.20 49.69 49.67 47.81 49.22 49.80 49.552025 49.63 63.56 65.42 69.02 70.99 70.21 66.05 66.563645 46.37 70.21 80.54 87.89 93.84 93.41 91.82 93.07

114

Método de Kogbetliantz en Memoria Compartida

MFlops con 27x27 bloques

Tamaño 1 2 3 4 5 6 8 10135 20.25 3.93 3.41 3.39 3.36 3.35 3.24 3.15405 46.24 11.91 10.82 10.50 10.55 10.97 11.47 11.39675 50.78 21.38 16.05 15.72 16.07 16.48 16.80 17.59

1215 46.93 27.34 28.26 24.72 23.84 22.76 24.82 26.192025 44.05 37.18 33.98 34.19 33.50 33.24 33.28 32.143645 47.43 54.13 49.36 49.19 46.34 48.62 48.33 0.00

MFlops con 135x135 bloques

Tamaño 1 2 3 4 5 6 8 10405 8.55 1.97 1.95 1.88 1.79 1.70 1.60 1.54675 18.20 3.89 3.46 3.47 3.36 3.30 3.25 3.18

1215 29.82 8.42 6.59 6.80 6.57 6.52 6.45 6.402025 31.20 11.99 10.92 10.58 10.56 11.06 11.45 11.383645 35.89 22.09 17.90 16.59 16.56 17.17 17.43 0.00

MFlops con 405x405 bloques

Tamaño 1 2 3 4 5 6 8 101215 7.98 1.97 1.91 1.87 1.80 1.69 1.62 1.522025 15.07 3.92 3.44 3.44 3.32 3.30 3.19 3.123645 21.45 8.15 6.58 6.83 6.53 6.47 6.45 0.00

Tabla 62: Prestaciones en Mflops del algoritmo par-impar por bloques cuadrados (mvo).

Tamaño 1 2 3 4 5 6 8 1015 85.16 14.71 14.14 13.22 13.19 14.09 14.34 13.5745 87.39 46.60 43.83 35.30 31.85 30.45 31.01 32.10

135 79.83 53.07 59.73 67.39 70.51 76.09 87.25 73.39405 57.86 52.36 64.49 74.68 88.89 98.79 117.65 132.63675 50.78 53.99 66.60 80.01 93.39 106.72 128.39 153.21

1215 49.82 62.69 73.13 91.07 105.52 118.71 144.57 166.012025 49.70 68.53 78.10 93.74 113.27 132.67 162.27 174.973645 47.43 70.21 82.37 94.49 115.01 134.35 174.46 188.64

Tabla 63: Resumen de Mflops del algoritmo par-impar por bloques cuadrados (mvo).

Tamaño 2 3 4 5 6 8 1015 0.17 0.16 0.15 0.15 0.16 0.16 0.1545 0.53 0.50 0.40 0.36 0.34 0.35 0.36

135 0.66 0.74 0.84 0.88 0.95 1.09 0.91405 0.90 1.11 1.29 1.53 1.70 2.03 2.29675 1.06 1.31 1.57 1.83 2.10 2.52 3.01

1215 1.25 1.46 1.82 2.11 2.38 2.90 3.332025 1.37 1.57 1.88 2.27 2.66 3.26 3.523645 1.48 1.73 1.99 2.42 2.83 3.67 3.97

Tabla 64: Incremento de velocidad del alg. par-impar por bloques cuadrados (mvo).

115

Computación de la PSVD

Tamaño 2 3 4 5 6 8 1015 0.08 0.05 0.03 0.03 0.02 0.02 0.0145 0.26 0.16 0.10 0.07 0.05 0.04 0.03

135 0.33 0.24 0.21 0.17 0.15 0.13 0.09405 0.45 0.37 0.32 0.30 0.28 0.25 0.22675 0.53 0.43 0.39 0.36 0.35 0.31 0.30

1215 0.62 0.48 0.45 0.42 0.39 0.36 0.332025 0.68 0.52 0.47 0.45 0.44 0.40 0.353645 0.74 0.57 0.49 0.48 0.47 0.45 0.39

Tabla 65: Eficiencia del algoritmo par-impar por bloques cuadrados (mvo).

116

Método de Kogbetliantz con Paso de Mensajes

6.1.3. Computación paralela mediante paso de mensajes.

Vamos ahora a estudiar la paralelización del método de Kogbetliantz usando un paradigma muydiferente del anterior. Como se indicó en capítulo 4 (página 22), este modelo suele implicar unaparalelización explícita, cuyas las consecuencias son un mayor control sobre el programa y un mayoresfuerzo de programación.

A la vista de la paralelización realizada sobre memoria compartida, el algoritmo paralelo másinmediato es el que utiliza el orden par-impar, anteriormente descrito. No obstante por consideracionesque ahora expondremos, hemos desarrollado un algoritmo paralelo basado en un orden diferente. Setrata de una secuencialización del algoritmo par-impar anteriormente expuesto, de forma que se usaráel orden secuencial tanto como sea posible. El algoritmo está fuertemente relacionado con ladistribución de los datos, que ahora exponemos.

Para los experimentos, se han utilizado cuatro máquinas: un anillo de Transputers T805, unmultiprocesador Meiko, el multiprocesador Power Challenge y un cluster de PCs. En todos los casosse ha empleado el paradigma de paso de mensajes, pero con diferencias substanciales entre laprogramación con el parallel C de INMOS para el transputer y con el PVM para el resto.

6.1.3.1. Distribución de los datos.

En principio, la distribución más simple es repartir las matrices por bloques de filas o columnasconsecutivas en los procesadores y es lo que haremos, pues nos dará un buen balance de carga y dedatos. No obstante, aquí no siempre dispondremos de arquitecturas con memoria virtual, por lo quealmacenar una matriz triangular por bloques así construidos no aprovechará bien la memoria.

Sea n el tamaño de las matrices y p el número de procesadores. Proponemos almacenar lasmatrices A y B en un único array rectangular (M), colocando B T y A juntas, con las dosdiagonales de ceros necesarias para poder operar. El caso n=6 se muestra en la figura 83, dondeademás aparece la distribución de la matriz M entre los procesadores para p=2. Es una distribuciónpor filas (de M), de modo que en el procesador Pi tendremos las filas de A y las columnas de B deíndices:

n

pi j j

n

p× + = −, con 1 1, ...,

,

es decir, se trata de bloques de filas de M contiguos repartidos secuencialmente entre losprocesadores

proc 0

proc 1

b a a a a a a

b b a a a a a

b b b a a a a

b b b b a a a

b b b b b a a

b b b b b b a

11 11 12 13 14 15 16

12 22 22 23 24 25 26

13 23 33 33 34 35 36

14 24 34 44 44 45 46

15 25 35 45 55 55 56

16 26 36 46 56 66 66

0 0

0 0

0 0

0 0

0 0

0 0

�������

�������

= M.

Figura 83: Distribución de las matrices.

117

Computación de la PSVD

Es interesante observar que considerando que los cálculos realizados con las matrices U y V sonUA y BV T, estamos actuando sobre A por filas y sobre B por columnas. Luego como almacenamos Btranspuesta, estamos calculando VB T, es decir operamos sobre las filas de B T. En una palabra,operamos por filas sobre el array M. Esto supone cierta claridad en la estructura del algoritmo. Unavez más observaremos que el balance de carga es casi óptimo, y además, el aprovechamiento de lamemoria física es máximo. Desde luego, todo esto es consecuencia de la naturaleza del problema.

6.1.3.2. Algoritmo paralelo.

Con esta distribución de los datos, podríamos construir el orden par-impar, que debería serválido tanto cuando el número de filas por procesador es par como cuando es impar. Las dificultadesson evidentes, como muestra la figura 84 para 3 procesadores en los casos de n=12 y n=15.

impar 12par

proc 0 proc 1 proc 2

proc 0 proc 1 proc 2

1 2 3 4 5 6 7 8 9 10 111 2 3 4 5 6 7 8 9 10 11 12

− − − − − −− − − − −

� �������� �������� � �������� ������� � �������� ��������

���� ��� �������� ������� ������������ �����������

impar 14par

proc 0 proc 1 proc 2

proc 0 proc 1 proc 2

1 2 3 4 5 6 7 8 9 10 11 12 13 151 2 3 4 5 6 7 8 9 10 11 12 13 14 15

− − − − − − − − −− − − − −

� ���������� ���������� � ���������� ���������� � ������������ ������������

� ������ �������� � ������� � ���������� � ��������������� ����������������

Figura 84: Distribución de operaciones en el alg. par-impar en memoria distribuída.

Los guiones representan las filas/columnas que participan en la rotación. En el caso de 15 filaspuede verse cierta complejidad, que dificulta la generalización cuando n/p es par o impar. Proponemosun orden más simple, basado en el orden secuencial, con dos fases, una idéntica a la secuencial y laotra para completar todas las rotaciones, con una sola rotación en todos los procesadores excepto enel 0. La figura 85 muestra el caso n=12.

primera fasesegunda fase

proc 0 proc 1 proc 2

proc 1 proc 2

1 2 3 4 5 6 7 8 9 10 11 124 5 8 9

− − − − − − − − −− −

� �������� �������� � �������� ������� � �������� ��������

��� � ��� �

Figura 85: Distribución de operaciones en el alg. paralelo.

Como se ve, en una primera fase se calculan y aplican todas las rotaciones posibles, en ordensecuencial. Entonces se pasa la última fila de M al siguiente procesador (excepto para el último) y secalcula y aplica la rotación que queda, en cada procesador, devolviéndose la fila al procesador deorigen para continuar con el siguiente barrido. Obsérvese que este esquema de comunicaciones puedeimplementarse en una arquitectura simplemente conectada según la topología de anillo bidireccional,lo que le dota de gran generalidad.

Puede observarse la sencillez del esquema, que mantiene el mismo grado de paralelismo, pese aque las fases están descompensadas en cuanto a carga, una respecto de la otra. La única pérdida deparalelismo es la operación que no realiza el procesador 0 en la segunda fase.

Formalmente se trata de una reducción de la granularidad en el paralelismo del algoritmobasado en el orden par-impar. Simplemente adaptamos el grado de paralelismo para coincidir con elnúmero de procesadores.

118

Método de Kogbetliantz con Paso de Mensajes

Ahora bien, ¿el orden propuesto es convergente?. Todos los resultados experimentales apuntan aque sí, aunque no hemos hecho una demostración rigurosa de ello. El numero total de barridos es delmismo orden que el del algoritmo secuencial.

Respecto a la disponibilidad de los datos, ya hemos comentado que los cálculos UA y VB T sehacen localmente en cada procesador, pues afectan a las filas de A y B T, almacenadas por losprocesadores. En cambio la aplicación de la matriz Q a ambas expresiones, es decir, el cálculo de(UA)Q y (VB T)Q debe realizarse sobre las columnas de las expresiones entre paréntesis, que seencuentran distribuidas entre los procesadores. Así, la aplicación de las rotaciones por la derecha esun cálculo distribuido. El método será el clásico: calcular localmente los parámetros c y s de lasrotaciones que integren Q y difundirlos, simultaneando con su aplicación. Este será el cuello de botellareal para el algoritmo. El modelo de difusión elegido es utilizar el anillo como unidireccional, aunquecon PVM hemos realizados experimentos empleando broadcast (realmente multicast). El algoritmo 13muestra las ideas que acabamos de explicar (se muestra un barrido).

En el procesador PK , k = 0, ..., p-1(1.1: Computación local)Para i = 1, 2, ..., n/p - 1

Si Cij = Aij Bij no es diagonalCalcular y aplicar J(θ ) y K(φ ) a partir de Cij

Calcular L(ϕ ) y almacenarlaAplicar L(ϕ ) a los fragmentos de A y B almacenados en este procesador

(1.2: Computación distribuida)Enviar las rotaciones L(ϕ ) almacenadas al resto de los procesadoresRecibir las rotaciones L(ϕ ) del resto de los procesadores y aplicarlas a los

correspondientes fragmentos de A y B almacenados en este procesador.(1.3: Computación distribuida)En el procesador PK , k = 0, ..., p-2

Enviar a PK+1 la última fila de M almacenada en PK

En el procesador PK , k = 1, ..., p-1Recibir la fila

(2.1: Computación local)En el procesador PK , k = 1, ..., p-1

Calcular J(θ ) y K(φ ) y L(ϕ ) como en el paso 1.1(2.2: Computación distribuida)En el procesador PK , k = 0, ..., p-1

Aplicar las rotaciones L(ϕ ) como en el paso 1.2(2.3: Computación distribuida)En el procesador PK , k = 1, ..., p-1

Devolver la fila a PK-1

Algoritmo 13: PSVD Kogbetliantz con paso de mensajes.

Las transferencias de filas de los pasos 1.3 y 2.3 representan un coste despreciable frente alintercambio total de las rotaciones L(ϕ ): los pasos 1.2 y 2.2 son los que generan el cuello de botelladel algoritmo, como hemos verificado usando un simulador que hemos desarrollado [72].

119

Computación de la PSVD

������� ��� ����������� � ��-�$ ) ��- � � �� ��

Usando una topología de anillo, esta computación distribuida (tanto 1.2 como 2.2) puederealizarse en p-1 pasos. En cada paso las rotaciones se envían de un procesador al siguiente,aplicándolas al bloque correspondiente.

La figura 86 muestra el proceso distribuido de la primera fase para p = 4. Cada celda representaun bloque de tamaño n/p. Cada procesador recibe las rotaciones del procesador siguiente y las aplica.Hemos representado como Li la rotación calculada en el procesador i, y como Li

j la rotación calculada

en el procesador i y aplicada en el paso j. La figura 87 muestra el proceso distribuido de la segundafase.

L3 L2 L1

L0 L3 L2

L1 L0 L3

L2 L1 L0

paso 1 paso 2 paso 3

L13 L2

2 L31

L01 L2

3 L32

=L0

2 L11 L3

3

L03 L1

2 L21

Figura 86: Aplicación de la rotaciones en el cálculo distribuido, fase primera.

L3 L2 L1

L3 L2

L1 L3

L2 L1

paso 1 paso 2 paso 3

L13 L2

2 L31

L23 L3

2

=L1

1 L33

L12 L2

1

Figura 87: Aplicación de la rotaciones en el cálculo distribuido, fase segunda.

120

Método de Kogbetliantz con Paso de Mensajes

Hemos denominado a este esquema seq-sr y lo exponemos como algoritmo 14, que es una formageneral para las fases primera y segunda.

En Pk :para ip = 1, ..., k

enviar L(ϕ )(k-ip+1)⊕p a Pk+1

recibir L(ϕ )(k-ip)⊕p de Pk-1

aplicarla a las filas (k-ip)n/p, ..., (k-ip+1)n/p-1 de Bpara ip = k+1, ..., p-1

enviar L(ϕ )(i-ip+1)⊕p a Pk+1

recibir L(ϕ )(k-ip)⊕p de Pk-1

aplicarla a las columnas n-(ip-k)n/p+1, ..., n-(ip-k-1)n/p de A

Algoritmo 14: PSVD Kogbetliantz: intercambio total seq-sr.

Sea tb = n/p, el algoritmo 15a muestra como se puede implementar para la primera fase. Hemosutilizado una variable genérica L donde almacenar las rotaciones recibidas, que inicialmente contienela rotación calculada y se sobreescribe con las que se van recibiendo paulatinamente.

en P0 :para ip= 1, ..., p-1

Laux = L /* Esto es necesario si el envío es bloqueante */recibir de Pp-1 las rotaciones Lp-ip , almacenándolas en L

enviar a P1 las rotaciones Laux

/* aplicar a las columnas correspondientes de P0 las rotaciones recibidas */ini= n-ip*tb +2para i= ini+1, ..., ini+tb-1

aplicar a la columna i de Aen Pk , k= 1, ..., p-1:

para ip= 1, ..., kenviar L a Pk+1

recibir L de Pk-1

/* aplicamos sobre B */ini= (k-ip)*tbpara i= ini, ..., ini+tb-2

aplicar a las columnas i, i+1 de B T

para ip= k+1, ..., p-1enviar L a Pk+1

recibir L de Pk-1

/* aplicamos sobre A */ini= n-(ip-k)*tb +2para i= ini+1, ..., ini+tb-1

aplicar a las columnas i, i+1 de A

Algoritmo 15a: PSVD Kogbetliantz: intercambio total seq-sr detallado, fase primera.

El algoritmo 15b muestra los detalles de la fase segunda.

121

Computación de la PSVD

en P0 :para ip= 1, ..., p-1

recibir de Pp-1 las rotaciones Lp-ip , almacenándolas en L

si ip < p-1enviar a P1 las rotaciones L

i= n-ip*tb +2 aplicar a las columnas i, i+1 de A

en Pk , k= 1, ..., p-1:para ip= 1, ..., k-1

enviar L a Pk+1

recibir L de Pk-1

i= (k-ip)*tb - 1aplicar a las columnas i, i+1 de B T

para ip= k+1, ..., p-1enviar L a Pk+1

recibir L de Pk-1

i= n-(ip-k)*tb +2aplicar a las columnas i, i+1 de A

en Pp-1 :enviar a P0 las rotaciones L

Algoritmo 15b: PSVD Kogbetliantz: intercambio total seq-sr detallado, fase segunda.

Observando la figura 87 puede observarse que en cada paso hay un procesador que permaneceocioso, excepto el procesador P0 que recibe las rotaciones de todos los demás y las aplica. Losprocesadores permanecen ociosos porque el procesador 0 no ha calculado rotaciones en esta fase y portanto ni las envía ni deben ser aplicadas por el resto. En la implementación propuesta en el algoritmo15b, el procesador P0 recibe las rotaciones de Pp-1 e inmediatamente las envía de modo que lo que seestá implementando queda reflejado más aproximadamente en la figura 88. Realmente la situación realsería intermedia ya que en ambas figuras no se han tenido en cuenta los tiempos de comunicación, ni silos envíos son o no de tipo bloqueante, como pasaremos a discutir en el siguiente apartado.

L3 L2 L1

L3 L2

L1 L3

L2 L1

paso 1 paso 2 paso 3

L13 L2

2 L31

L22 L3

1

=L1

1 L32

L12 L2

1

Figura 88: Aplicación de la rotaciones implementada en el cálculo distribuido, fase segunda.

122

Método de Kogbetliantz con Paso de Mensajes

Obsérvese que la cantidad de operaciones que realiza cada procesador en la segunda fase es lamisma. El procesador P0 no computa rotaciones, pero después debe aplicar más rotaciones que elresto, con lo que la cantidad de computación total es la misma. Es lo mismo que sucedía con elalgoritmo propuesto para la SVD en la página 55. No obstante, aunque el balance de carga esperfecto, por la simetría del problema, hay una pequeña pérdida de paralelismo, pues P0 debenecesariamente esperar a que Pp-1 calcule sus rotaciones y cuando al final P0 aplica las rotaciones L1

(recibidas de Pp-1 ), el resto permanece ocioso. Es importante resaltar que estamos discutiendo una fasecon una baja carga computacional y de poca trascendencia en el resultado final; la pérdida deparalelismo es realmente pequeña y no es propia del esquema seq-sr sino del algoritmo que estamosproponiendo.

������� ��� ��� ������� ����-�$ )���������� �

El algoritmo anterior tiene un buen paralelismo si los pares (enviar, recibir) pueden hacerse enparalelo. Esto no sucede en el Parallel C con el que programamos el Transputer, donde hay unapérdida total de paralelismo, pues para cada ip (algoritmo 14) se requieren p-1 pasos ([72]), debiendoademás invertir el orden del envío para un procesador, a fin de evitar deadlock. El orden de lacomunicación es proporcional a p2, pudiendo ser inadmisible dependiendo de la relación entre lacapacidad computacional del procesador y la velocidad de las comunicaciones.

Para evitar realizar una concurrencia explícita con el rudimentario Parallel C, hemos ideadootro esquema (algoritmo alt-sr). Simplemente los procesadores de índice impar realizan lasoperaciones en el orden (enviar, recibir) y los otros como (recibir, enviar). Entonces la comunicaciónpuede realizarse en sólo dos pasos para cada valor de ip. El método es válido también para los pasos1.3 y 2.3 del algoritmo.

La tabla 66 resume los costes de las comunicaciones de ambos esquemas, suponiendooperaciones de envío bloqueantes. El parámetro α es el coste de establecimiento de la comunicación, yβ es el coste del envío por byte.

esquema / pasos 1.2 y 2.2 1.3 y 2.3

seq-sr (p - 1)2 (α + βn/p) (p - 1) (α + β (n + 2))

alt-sr 2 (p - 1) (α + βn/p) 2 (α + β (n + 2))

Tabla 66: Costes con envío bloqueante.

En el PVM, que podemos emplear en el resto de arquitecturas, este algoritmo carece de sentido,pues PVM permite la operación de envío concurrente.

������� ��� ��� ������� ����-�$ )��� ����� �

Usando las posibilidades de PVM y si lo permiten las características de la arquitectura, puedeutilizarse un esquema alternativo. Cada procesador envía, mediante la primitiva multicast de PVM, unúnico mensaje al resto de los procesadores, conteniendo las rotaciones por él calculadas. Acontinuación recibe las rotaciones del resto y las aplica, como muestra de modo general el algoritmo16.

123

Computación de la PSVD

En Pk

multicast de L(ϕ ) al resto de procesadorespara ip = 0, ..., k-1

recibir L(ϕ )ip de Pip

aplicar L(ϕ )ip a las filas ip.n/p, ..., (ip+1)n/p-1 de B.para ip = k+1, ..., p-1

recibir L(ϕ )ip de Pip

aplicar L(ϕ )ip a las columnas ip.n/p, ..., (ip+1)n/p-1 de A.

Algoritmo 16: PSVD Kogbetliantz: intercambio total mul-sr.

En las tres arquitecturas en las que hemos empleado PVM, este método augura buenosresultados, pues la interconexión de los procesadores es total. No obstante requiere un ancho de bandasuficiente, por lo que a medida que aumente el número de procesadores puede ser ineficiente (pocoescalable). La última palabra la tendrán los resultados experimentales en las distintas arquitecturas.

La tabla 67 compara los costes de los esquemas expuestos suponiendo que las operaciones deenvío pueden realizarse de forma no bloqueante (como es el caso del PVM). Puede observarse que elesquema seq-sr tiene el mismo coste teórico que el mul-sr.

esquema / pasos 1.2 y 2.2 1.3 y 2.3

seq-sr (p - 1) (α + βn/p) α + β (n + 2)

alt-sr 2(p - 1) (α + βn/p) 2 (α + β (n + 2))

mul-sr (p - 1) (α + βn/p) α + β (n + 2)

Tabla 67: Costes con envío no bloqueante.

������� ��� ��� ������-�� # ��-���� ���*-� ���-�����" )+�

Al final de cada uno de estos barridos, en cualquiera de los esquemas, la convergencia delalgoritmo debe comprobarse mediante un algoritmo de sincronización. Podemos utilizar los mismosalgoritmos que los empleados en la SVD. El primero de ellos, algoritmo 6, que reproducimos aquí,será adecuado para un arquitectura donde se disponga de la adecuada interconexión entre losprocesadores, como sucedía en el esquema mul-sr para la computación y aplicación de las rotacionesQ. Excepto en las últimas iteraciones, en las que la variable acabó tendrá el valor verdadero, estealgoritmo se ejecuta en un sólo paso paralelo, con un coste computacional despreciable y con un costede comunicaciones de (α+β).

El segundo, algoritmo 7, que reproducimos de nuevo, será adecuado para todas lasarquitecturas, pues se basa en relaciones de vecindad y puede implementarse en una topologíasimplemente circular. De nuevo, en el Parallel C aparece una secuencialización debido a que lasoperaciones de envío son síncronas. El coste de comunicaciones (el de comupatción es nulo) en elParallel C es de (p−1)(α+β) cuando conv es falso (sólo será verdadero en las últimas iteraciones).Afortunadamente, la simulación realizada, demuestra que la penalización inducida es despreciable. Deno ser así, se podría utilizar un esquema similar al alt-sr. El algoritmo implementado medianteoperaciones de envío no síncronas (como es el caso del PVM) tiene un coste de 2(α+β).

124

Método de Kogbetliantz con Paso de Mensajes

en P0 :enviar acabó al resto de los procesadores (una operación)si acabó

recibir el estado de convergencia del resto de procesadores, hacer una operaciónOR y almacenar en acabó.enviar acabó al resto de los procesadores como antes

en Pk , k= 1, ..., p-1:test= acabórecibir acabó de P0

si acabóenviar test a P0

recibir acabó de P0

Algoritmo 6: Convergencia para topología general.

en P0 :acabó= todas las rotaciones fueron la identidad (en este procesador)si acabó

enviar acabó a P1

recibir acabó de Pp-1

enviar acabó de nuevo a P1

si envió (recibió) acabó = verdaderorecibir acabó de Pp-1 /* sólo desbloquea */

si noenviar acabó a P1

recibir acabó de Pp-1 /* falso, seguro */en Pk , k= 1, ..., p-1:

establecido acabó, auxi= acabórecibir acabó de Pk-1

si acabóacabó= auxienviar acabó a Pk+1

recibir acabó de Pk-1

si auxienviar acabó a Pk+1

si noenviar acabó a Pk+1

Algoritmo 7: Convergencia circular.

Al final de ambos algoritmos (6 y 7) acabó dice si debe continuar la iteración de los barridos.Debe tenerse en cuenta si se alcanzó el número máximo de barridos.

6.1.3.3. Detalles de implementación.

Para generar las mismas matrices que en las pruebas realizadas en los experimentos conmemoria compartida (la generación se describió previamente en la página 50), debemos utilizar elgenerador de números aleatorios portable con las mismas semillas. El problema es que el orden degeneración de los elementos, que era trivial en el caso secuencial o en memoria compartida, resulta serrealmente rebuscado en el caso de memoria distribuida.

125

Computación de la PSVD

No obstante nos pareció interesante intentar reproducir el orden, más que generar nuevasmatrices y probarlas en una ejecución secuencial. La generación en el orden deseado presenta ciertasparticularidades. En primer lugar, dado que los últimos elementos que se van a generar son los queirán a parar al procesador p-1 (el último), tendremos que generar las matrices en este procesador parano utilizar más almacenamiento que el imprescindible.

Para el caso de la matriz A es sencillo, se genera por filas que se envían de p-1 a 0, luego de p-1a 1, etc.. Para el caso de la matriz B, al almacenarse transpuesta, se debe generar y enviar elemento aelemento. En apariencia puede pensarse en un coste excesivo de comunicaciones, pero los tiemposresultantes son razonables y debe pensarse que no se medirá como parte del tiempo empleado en elcálculo de la PSVD.

6.1.3.4. Resultados experimentales en el transputer y conclusiones.

Aunque se trata de una arquitectura obsoleta, el transputer mantiene un equilibrio entre lacapacidad de computación y las comunicaciones. Ésta es la arquitectura que inicialmente disponíamosy sobre la que desarrollamos el algoritmo. Como ayuda al desarrollo construimos un simulador cuyosprincipios se exponen en [71]. Además, la conectividad de la red es altamente controlable, de modoque podemos experimentar de forma clara nuestros algoritmos en las topologías elegidas. La tabla 123muestra el número de barridos del algoritmo seq-sr paralelo frente al algoritmo secuencial paramatrices generadas aleatoriamente. Puede observarse la similitud del comporatmiento de ambosalgoritmos.

Paralelo seq-srTamaño Secuencial 3 procesadores 5 procesadores 9 procesadores 15 procesadores

15 38 36 35 NC NC45 147 143 138 140 118

135 474 481 482 478 454405 1620 1505 1480 1492 1661675 NC NC 2839 2767 3375

Tabla 68: Barridos del algoritmo seq-sr.

Como se explicó, el Parallel C no permite operaciones de salida asíncronas, ni multicast, con loque experimentamos aquí con topologías de anillo bidireccional los algoritmos seq-sr y alt-sr. Ésteúltimo está justificado, como se explicó, sólamente en esta circunstancia. Dado el nulo interés de lasprestaciones alcanzadas, exponemos simplemente la eficiencia de ambas implementaciones, en lasfiguras 89 y 90. Sólo se han calculado los valores singulares.

��� � ��� ������ � ��(�$ ������0 � ��

����� ���� ���� ��� ��� �"��� �����

$

$�- %

$�- &

$�- '

$�- (

)

) - %

$ )*$�$ %�$�$ ��$�$ &$�$ ��$�$

��� � ��� ����� ����(�$ � �� � � ���

���������� ���� ��� � �!�"��� �����

$

$- %

$- &

$- '

$- (

)

)!- %

$ )*$�$ %�$�$ ��$�$ &�$�$ ��$�$

%�

&�

'()*$)*%)��

126

Método de Kogbetliantz con Paso de Mensajes

Figuras 89 y 90: Eficiencia de los algoritmos seq-sr y alt-sr en el Transputer.

Como puede observarse, las eficiencias obtenidas son, en general, muy elevadas. Esto se debe,como hemos comentado, a la escasa capacidad computacional del transputer frente a la velocidad delas comunicaciones (en el estado actual de la tecnología también es baja en términos absolutos).Obviamente, para matrices pequeñas y muchos procesadores, la eficiencia es pequeña, pero contamaños moderados de matriz, ya se obtienen eficiencias muy elevadas. El hecho de que algunaseficiencias superen la unidad se debe a que estamos comparando con un algoritmo secuencial sinbloques, y que el algoritmo paralelo es, de hecho, uno por bloques.

El algoritmo alt-sr muestra una clara superioridad frente al seq-sr para matrices pequeñas ymuchos procesadores.

6.1.3.5. Resultados experimentales en la Meiko y conclusiones.

Las figuras 91 y 92 muestran los resultados obtenidos en este multicomputador en lasimplementaciones realizadas con PVM. De nuevo sólo exponemos las eficiencias, y sólo para elcálculo de los valores singulares. La mejor capacidad computacional de la Meiko frente al transputerhace que las eficiencias para matrices pequeñas y varios procesadores sean pequeñas. Para matrices detamaño medio las eficiencias crecen notablemente, superando la unidad. Esto se debe de nuevo a lacaracterística de estar experimentando un algoritmo que es efectivamente por bloques. Aquí, además,la presencia de antememorias, una por procesador, acentúa la capacidad computacional.

����� �� ����� � ��� � �!� � ����0 � ��

����� ��������� �!� � �!����� �����

$

$�- %

$�- &

$�- '

$�- (

)

) - %

) $�$ %�$�$ ��$�$ &�$�$ ��$�$ '�$�$

����� �� ����� � ��� � �!� � ��� � � ���

����� ���� ���� �!����� �"��� �����

$

$�- %

$�- &

$�- '

$�- (

)

) - %

)*$�$ %�$�$ ��$�$ &�$�$ ��$�$ '�$�$

%�

&�

'(

Figuras 91 y 92: Eficiencia de los algoritmos seq-sr y alt-sr en la Meiko.

La implementación mul-sr hace uso de la notable capacidad de comunicaciones de la Meiko, queimplementa un crossbar. Los resultados son prácticamente los mismos que el caso seq-sr, como era deesperar. El esquema alt-sr, aquí y en lo sucesivo, carece de sentido.

6.1.3.6. Resultados experimentales en el Power Challenge y conclusiones.

Este multiprocesador puede ser programado, como ya mencionamos, mediante PVM. Laimplementación PVM puede ser la estandard, mediante sockets UNIX o bien mediante el uso de lamemoria compartida. En ésta, la empleada para nuestros experimentos, los mensajes se almacenan enáreas de la memoria, disponible por todos los procesadores, y el envío se reduce a sincronizar losprocesos. Se reduce así el número de capas de software y es de esperar que se obtengan unasprestaciones interesantes.

127

Computación de la PSVD

En primer lugar hemos experimentado la computación de los valores singulares pero no de losvectores singulares. Las tablas 69, 70, 71 y 72 y las figuras 93, 94, 95 y 96, muestran los resultadosde la ejecución del algoritmo seq-sr bajo esta arquitectura. La tablas 69 y 70 incluyen los tiempos yprestaciones respectivamente obtenidos con el algoritmo secuencial. El comportamiento de estealgoritmo, que no es por bloques, es realmente pobre, descendiendo las prestaciones de forma muynotable a medida que crece el tamaño de la matriz. Esta es la razón de los super speed-ups queaparecen en la tabla 71. El algortimo seq-sr, ejecutado en 2,3,4,5,6,8 y 10 procesadores muestra engeneral un buen comportamiento. Para matrices pequeñas ofrece, como es de esperar, uncomportamiento pobre debido en parte al buen efecto optimizador del compilador en el algoritmosecuencial. Para las matrices n = 1080, el comportamiento del algoritmo es realmente ejemplar,alcanzándose casi un GigaFlop en 10 procesadores, cifra muy satisfactoria. Para matrices másgrandes, debido a no ser un algoritmo por bloques y al escaso efecto de las optimizaciones, elcomportamiento del algoritmo se estabiliza, descendiendo notablemente las prestaciones, pero no laseficiencias que se mantienen en todo momento alrededor del valor ideal (uno).

Es de apreciar que en la tabla 70 podremos "trazar" una diagonal que partiendo del algortimosecuencial para n = 480 llegue hasta n = 1080 y 10 procesadores. Por encima de ella, el número deelementos por procesador permiten un aprovechamiento bueno de las antememorias y la optimizacióndel compilador hace alcanzar valores excelentes de las prestaciones. Por debajo de esa diagonal, lasprestaciones decaen sensiblemente, tomando un carácter uniforme.

Todo ello se aprecia de forma clara en las figuras 94, 95 y 96, donde se ve que para n < 600 elincremento de velocidad y la eficiencia son muy bajos frente al caso n > 2000 donde el incremento develocidad y la eficiencia presentan un comportamiento perfecto, pese al detrimento de las prestaciones.Para valores 600 < n < 2000 los valores desmesurados del incremento de velocidad y la eficiencia sedeben, como hemos citado al excelente comportamiento del algoritmo paralelo frente al algoritmosecuencial. Aunque la comparación con un algortimo secuencial sin bloques no resulte acertada desdeel punto de vista de la definición estricta de incremento de velocidad, tampoco lo sería comparar conun algoritmo por bloques, pues en ese caso deberíamos haber construído un algortimo paralelo y porbloques.

Tamaño 1 2 3 4 5 6 8 10120 0.59 0.48 0.48 0.48 0.72 0.72 0.96 1.20

240 4.80 3.84 2.40 1.92 2.40 2.40 2.40 2.88

360 15.07 11.52 6.48 6.48 5.04 5.04 5.04 5.76

480 43.44 25.92 14.40 14.40 10.56 9.60 9.60 9.60

600 186.20 51.60 26.40 27.60 18.00 16.80 16.80 15.60

720 416.37 118.08 69.12 48.96 33.12 28.80 24.48 23.04

1080 1779.87 786.24 514.08 263.52 123.12 101.52 73.44 62.64

1440 4527.77 2301.12 1359.36 1022.40 771.84 590.40 236.16 195.84

1800 9576.62 4910.40 3168.00 2268.00 1810.80 1429.20 1029.60 716.40

2160 18955.49 9538.56 6255.36 4648.32 3589.92 2903.04 2142.72 1788.48

2400 26992.57 14990.40 9720.00 7252.80 5937.60 4968.00 3705.60 3105.60

2880 49375.20 25223.04 16911.36 12522.24 9498.24 8714.88 6664.32 5633.28

3000 66120.91 35610.00 20880.00 14454.00 11568.00 8904.00 7764.00 6606.00

3240 91604.11 42269.04 27326.16 19932.48 15837.12 12940.56 9765.36 8527.68

Tabla 69: Tiempo de ejecución del algoritmo seq-sr en el Power Challenge.

128

Método de Kogbetliantz con Paso de Mensajes

Tamaño 1 2 3 4 5 6 8 10120 144.62 178.38 178.38 178.38 118.92 118.92 89.19 71.35240 140.48 175.60 280.97 351.21 280.97 280.97 280.97 234.14360 150.21 196.51 349.35 349.35 449.16 449.16 449.16 393.02480 123.19 206.46 371.64 371.64 506.78 557.46 557.46 557.46600 56.04 202.24 395.28 378.10 579.75 621.16 621.16 668.94720 43.26 152.55 260.60 367.91 543.87 625.46 735.83 781.82

1080 34.09 77.18 118.04 230.28 492.89 597.76 826.32 968.791440 31.74 62.45 105.72 140.56 186.20 243.42 608.55 733.841800 29.29 57.13 88.55 123.69 154.92 196.29 272.47 391.602160 25.56 50.80 77.47 104.25 134.99 166.93 226.16 270.962400 24.62 44.33 68.37 91.63 111.93 133.78 179.35 214.012880 23.25 45.52 67.89 91.69 120.88 131.74 172.28 203.823000 19.62 36.44 62.15 89.78 112.17 145.74 167.14 196.443240 17.84 38.67 59.81 82.00 103.21 126.31 167.38 191.67

Tabla 70: Prestaciones del algoritmo seq-sr en el Power Challenge.

Tamaño 2 3 4 5 6 8 10120 0.61 1.23 1.23 0.82 0.82 0.61 0.49240 1.25 2.00 2.50 2.00 2.00 2.00 1.66360 1.30 2.32 2.32 2.99 2.99 2.99 2.61480 1.67 3.01 3.01 4.11 4.52 4.52 4.52600 3.60 7.05 6.74 10.34 11.08 11.08 11.93720 3.52 6.02 8.50 12.57 14.45 17.00 18.07

1080 2.26 3.46 6.75 14.45 17.53 24.23 28.411440 1.96 3.33 4.42 5.86 7.66 19.17 23.111800 1.95 3.02 4.22 5.28 6.70 9.30 13.362160 1.98 3.03 4.07 5.28 6.52 8.84 10.592400 1.80 2.77 3.72 4.54 5.43 7.28 8.692880 1.95 2.91 3.94 5.19 5.66 7.40 8.763000 1.85 3.16 4.57 5.71 7.42 8.51 10.003240 2.16 3.35 4.59 5.78 7.07 9.38 10.74

Tabla 71: Incremento de velocidad del algoritmo seq-sr en el Power Challenge.

129

Computación de la PSVD

Tamaño 2 3 4 5 6 8 10120 0.30 0.41 0.30 0.16 0.13 0.07 0.04240 0.62 0.66 0.62 0.40 0.33 0.25 0.16360 0.65 0.77 0.58 0.59 0.49 0.37 0.26480 0.83 1.00 0.75 0.82 0.75 0.56 0.45600 1.80 2.35 1.68 2.06 1.84 1.38 1.19720 1.76 2.00 2.12 2.51 2.40 2.12 1.80

1080 1.13 1.15 1.68 2.89 2.92 3.02 2.841440 0.98 1.11 1.10 1.17 1.27 2.39 2.311800 0.97 1.00 1.05 1.05 1.11 1.16 1.332160 0.99 1.01 1.01 1.05 1.08 1.10 1.052400 0.90 0.92 0.93 0.90 0.90 0.91 0.862880 0.97 0.97 0.98 1.03 0.94 0.92 0.873000 0.92 1.05 1.14 1.14 1.23 1.06 1.003240 1.08 1.11 1.14 1.15 1.17 1.17 1.07

Tabla 72: Eficiencia del algoritmo seq-sr en el Power Challenge.

� � ��� �� � ��� ��������� � ������ ����0 � ��� �

����� ���� �� � ��� ���!����� �����

$- )

)

)*$

)*$�$

)*$�$�$

) $�$�$�$

)*$�$�$�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ���� � ��� ���������� � ������ ����0 � ��� �

����� ���� �� � ��� ���!����� �����

$

%�$�$

&�$�$

'�$�$

(�$�$

) $�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

� ������������������� � �� ����� ��� ����� ����� ���� � ������� ����0 � �� �

�������������� ��� � �!�"�#� �����

$�

)*$)��%�$% ���$

$ ) $�$�$ %�$�$�$ ��$�$�$

��� � ��� ������ � � ��� ��������� � ������ � �!��0 � ��� �

����� ��������� ������� �"��� �����

$$- �))!- �%%- ��

�- �

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 93, 94, 95 y 96: Tiempo de ejecución, Prestaciones, Incremento de velocidad y Eficienciadel algoritmo seq-sr en el Power Challenge.

Las tablas 73, 74, 75 y 76 y las figuras 97, 98, 99 y 100 muestran los resultados obtenidos eneste multiprocesador con el algortimo mul-sr. Los resultados son, en líneas generales, equivalentes allos de algortimo seq-sr. El hecho de que la memoria compartida simule plenamente un crossbarconduce necesariamente a estos resultados. El autor de esta memoria esperaba un cierto incremento delas prestaciones respecto al seq-sr, al mejorar las comunicaciones, pero no ha sido así, aunque no

130

Método de Kogbetliantz con Paso de Mensajes

puede hablarse realmente de un comportamiento peor. De hecho para 10 procesadores las prestacionesse mantienen muy altas hasta n = 1440. Los resultados de la experimentación de este algortimo norequieren más comentarios.

Tamaño 1 2 3 4 5 6 8 10120 0.59 0.48 0.48 0.48 0.72 0.72 0.96 1.44240 4.80 2.88 2.40 1.92 1.92 2.40 2.88 3.36360 15.07 9.36 6.48 5.76 5.04 5.04 5.76 6.48480 43.44 21.12 14.40 11.52 10.56 9.60 9.60 10.56600 186.20 40.80 26.40 20.40 18.00 16.80 15.60 16.80720 416.37 100.80 53.28 38.88 33.12 28.80 24.48 25.92

1080 1779.87 788.40 477.36 239.76 129.60 99.36 73.44 64.801440 4527.77 2304.00 1353.60 924.48 668.16 483.84 227.52 158.401800 9576.62 4903.20 3171.60 2203.20 1674.00 1400.40 993.60 655.202160 18955.49 9525.60 6216.48 4674.24 3555.36 2928.96 2367.36 1900.802400 26992.57 14952.00 9672.00 7310.40 5620.80 4900.80 3883.20 3302.402880 49375.20 25176.96 16945.92 12545.28 10177.92 8755.20 6382.08 5546.883000 66120.91 35592.00 20802.00 14496.00 11832.00 10212.00 6960.00 6228.003240 91604.11 42055.20 27144.72 19776.96 15603.84 11942.64 9707.04 8404.56

Tabla 73: Tiempo de ejecución del algoritmo mul-sr en el Power Challenge.

Tamaño 1 2 3 4 5 6 8 10120 144.62 178.38 178.38 178.38 118.92 118.92 89.19 59.46240 140.48 234.14 280.97 351.21 351.21 280.97 234.14 200.69360 150.21 241.85 349.35 393.02 449.16 449.16 393.02 349.35480 123.19 253.39 371.64 464.55 506.78 557.46 557.46 506.78600 56.04 255.77 395.28 511.54 579.75 621.16 668.94 621.16720 43.26 178.70 338.08 463.30 543.87 625.46 735.83 694.95

1080 34.09 76.97 127.12 253.10 468.25 610.76 826.32 936.501440 31.74 62.37 106.17 155.45 215.09 297.03 631.66 907.301800 29.29 57.21 88.45 127.33 167.58 200.33 282.35 428.182160 25.56 50.87 77.95 103.67 136.30 165.45 204.70 254.942400 24.62 44.45 68.71 90.91 118.24 135.61 171.15 201.252880 23.25 45.60 67.75 91.52 112.81 131.14 179.90 206.993000 19.62 36.46 62.38 89.52 109.67 127.07 186.45 208.363240 17.84 38.86 60.21 82.64 104.75 136.86 168.38 194.48

Tabla 74: Prestaciones del algoritmo mul-sr en el Power Challenge.

131

Computación de la PSVD

Tamaño 2 3 4 5 6 8 10120 1.23 1.23 1.23 0.82 0.82 0.61 0.41240 1.66 2.00 2.50 2.50 2.00 1.66 1.42360 1.61 2.32 2.61 2.99 2.99 2.61 2.32480 2.05 3.01 3.77 4.11 4.52 4.52 4.11600 4.56 7.05 9.12 10.34 11.08 11.93 11.08720 4.13 7.81 10.70 12.57 14.45 17.00 16.06

1080 2.25 3.72 7.42 13.73 17.91 24.23 27.461440 1.96 3.34 4.89 6.77 9.35 19.90 28.581800 1.95 3.01 4.34 5.72 6.83 9.63 14.612160 1.98 3.04 4.05 5.33 6.47 8.00 9.972400 1.80 2.79 3.69 4.80 5.50 6.95 8.172880 1.96 2.91 3.93 4.85 5.63 7.73 8.903000 1.85 3.17 4.56 5.58 6.47 9.50 10.613240 2.17 3.37 4.63 5.87 7.67 9.43 10.89

Tablas 75: Incremento de velocidad del algoritmo mul-sr en el Power Challenge.

Tamaño 2 3 4 5 6 8 10120 0.61 0.41 0.30 0.16 0.13 0.07 0.04240 0.83 0.66 0.62 0.50 0.33 0.20 0.14360 0.80 0.77 0.65 0.59 0.49 0.32 0.23480 1.02 1.00 0.94 0.82 0.75 0.56 0.41600 2.28 2.35 2.28 2.06 1.84 1.49 1.10720 2.06 2.60 2.67 2.51 2.40 2.12 1.60

1080 1.12 1.24 1.85 2.74 2.98 3.02 2.741440 0.98 1.11 1.22 1.35 1.55 2.48 2.851800 0.97 1.00 1.08 1.14 1.13 1.20 1.462160 0.99 1.01 1.01 1.06 1.07 1.00 0.992400 0.90 0.93 0.92 0.96 0.91 0.86 0.812880 0.98 0.97 0.98 0.97 0.93 0.96 0.893000 0.92 1.05 1.14 1.11 1.07 1.18 1.063240 1.08 1.12 1.15 1.17 1.27 1.17 1.08

Tabla 76: Eficiencia del algoritmo mul-sr en el Power Challenge.

� � ��� �� ����� �� � ���� � �������� � ��� � ��� �

����� ���� �� � ��� ���!����� �����

$- )

)

)*$

)*$�$

)*$�$�$

) $�$�$�$

)*$�$�$�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ���� ����� �� � ���� � �������� � ��� � ��� �

����� ���� �� � ��� ���!����� �����

$

%�$�$

&�$�$

'�$�$

(�$�$

) $�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

132

Método de Kogbetliantz con Paso de Mensajes

� �������� ���������� � ��� ����� ��� ����� ����� ���� � ������� � ��� � ��� �

���������� ���� ��� � �!�"��� �����

$�

)*$)��%�$% ���$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ��� ������ � ����� ����� ���� � ������ � ����� � ��� �

�������������� �������!����� �����

$$�- �)) - �%%�- ��

��- �

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 97, 98, 99 y 100: Tiempo de ejecución, Prestaciones, Incremento de velocidad y Eficienciadel algoritmo mul-sr en el Power Challenge.

Introducimos ahora la computación de vectores singulares. Hemos denominado a las variantesseq-sr-v y mul-sr-v respectivamente. Los resultados de seq-sr-v aparecen en las tablas 77, 78, 79 y 80y en las figuras 101, 102, 103 y 104. Un vistazo directo a la gráfica 102 nos muestra un hecho untanto desalentador: nuestro algoritmo no supera en nuingún caso los 140 Megaflops.

Observemos primero el comportamiento del algoritmo secuencial. La observación de la tabla 78nos muestra las pobres prestaciones de este algoritmo. Para matrices de tamaño pequeño, elcomportamiento es aceptable, pero a medida que aumenta n, la presencia de 4 matrices en lacomputación y el hecho de no ser un algoritmo por bloques, hace que las prestaciones decrezcanpaulatinamente hasta valores mínimos.

El algoritmo paralelo para matrices pequeñas tiene un comportamiento realmente pobre. Elincremento de velocidad es menor que uno hasta n = 480. A partir de aquí el comportamiento delalgoritmo mejora, aumentando las prestaciones tanto en términos absolutos como respecto al algoritmosecuencial cuyas prestaciones decrecen rápidamente. En la gráfica 102 podemos apreciar uncomportamiento correcto a partir de n = 480, observando como las prestaciones aumentan de formaproporcional al aumento del número de procesadores. El mal comportamiento del algortimo secuencialproduce incrementos de velocidad y eficiencias desmesurados a medida que aumenta el tamaño de lasmatrices.

Tamaño 1 2 3 4 5 6 8 10120 1.84 1.92 4.80 9.60 14.40 15.84 15.36 12.24240 21.53 80.16 92.64 114.24 106.56 38.40 20.64 27.84360 150.17 309.60 125.28 180.00 180.72 180.00 180.72 200.16480 455.57 672.00 391.68 178.56 232.32 205.44 247.68 257.28600 821.86 908.40 915.60 750.00 240.00 291.60 295.20 316.80720 1491.93 1118.88 1274.40 1232.64 1039.68 846.72 861.12 398.88

1080 9798.70 2503.44 2235.60 2300.40 1946.16 2131.92 1870.56 1365.121440 24073.48 7891.20 4193.28 3913.92 3813.12 3715.20 3790.08 3090.241800 53733.04 16999.20 9453.60 6876.00 6141.60 5778.00 6199.20 5101.202160 84493.86 27406.08 16433.28 11949.12 10052.64 9054.72 8579.52 7819.202400 139427.9 47088.00 24763.20 19958.40 13459.20 12777.60 11784.00 11275.202880 231303.3 82707.84 45492.48 31737.60 25136.64 21386.88 18305.28 16801.923000 341994.2 112794.0 58170.00 37098.00 29346.00 23790.00 20016.00 18936.003240 584739.1 172802.1 96357.60 64100.16 47005.92 36812.88 29108.16 25297.92

Tabla 77: Tiempo de ejecución del algoritmo seq-sr-v en el Power Challenge.

133

Computación de la PSVD

Tamaño 1 2 3 4 5 6 8 10120 91.37 87.43 34.97 17.48 11.65 10.59 10.92 13.71240 62.00 16.65 14.41 11.68 12.52 34.76 64.68 47.95360 29.94 14.52 35.89 24.98 24.88 24.98 24.88 22.46480 23.37 15.84 27.18 59.63 45.83 51.83 42.99 41.39600 25.29 22.88 22.70 27.71 86.60 71.28 70.41 65.61720 24.06 32.08 28.17 29.12 34.53 42.40 41.69 90.01

1080 12.35 48.37 54.16 52.64 62.22 56.80 64.73 88.701440 11.91 36.36 68.42 73.31 75.25 77.23 75.70 92.851800 10.42 32.96 59.27 81.49 91.23 96.97 90.38 109.842160 11.45 35.32 58.91 81.01 96.30 106.91 112.83 123.812400 9.52 28.20 53.62 66.53 98.66 103.92 112.68 117.772880 9.91 27.74 50.43 72.29 91.27 107.28 125.34 136.553000 7.58 22.99 44.58 69.90 88.36 109.00 129.55 136.943240 5.58 18.90 33.90 50.96 69.49 88.73 112.22 129.12

Tabla 78: Prestaciones del algoritmo seq-sr-v en el Power Challenge.

Tamaño 2 3 4 5 6 8 10120 0.95 0.38 0.19 0.12 0.11 0.11 0.15240 0.26 0.23 0.18 0.20 0.56 1.04 0.77360 0.48 1.19 0.83 0.83 0.83 0.83 0.75480 0.67 1.16 2.55 1.96 2.21 1.83 1.77600 0.90 0.89 1.09 3.42 2.81 2.78 2.59720 1.33 1.17 1.21 1.43 1.76 1.73 3.74

1080 3.91 4.38 4.25 5.03 4.59 5.23 7.171440 3.05 5.74 6.15 6.31 6.47 6.35 7.791800 3.16 5.68 7.81 8.74 9.29 8.66 10.532160 3.08 5.14 7.07 8.40 9.33 9.84 10.802400 2.96 5.63 6.98 10.35 10.91 11.83 12.362880 2.79 5.08 7.28 9.20 10.81 12.63 13.763000 3.03 5.87 9.21 11.65 14.37 17.08 18.063240 3.38 6.06 9.12 12.43 15.88 20.08 23.11

Tabla 79: Incremento de velocidad del algoritmo seq-sr-v en el Power Challenge.

134

Método de Kogbetliantz con Paso de Mensajes

Tamaño 2 3 4 5 6 8 10120 0.47 0.12 0.04 0.02 0.01 0.01 0.01240 0.13 0.07 0.04 0.04 0.09 0.13 0.07360 0.24 0.39 0.20 0.16 0.13 0.10 0.07480 0.33 0.38 0.63 0.39 0.36 0.22 0.17600 0.45 0.29 0.27 0.68 0.46 0.34 0.25720 0.66 0.39 0.30 0.28 0.29 0.21 0.37

1080 1.95 1.46 1.06 1.00 0.76 0.65 0.711440 1.52 1.91 1.53 1.26 1.07 0.79 0.771800 1.58 1.89 1.95 1.74 1.54 1.08 1.052160 1.54 1.71 1.76 1.68 1.55 1.23 1.082400 1.48 1.87 1.74 2.07 1.81 1.47 1.232880 1.39 1.69 1.82 1.84 1.80 1.57 1.373000 1.51 1.95 2.30 2.33 2.39 2.13 1.803240 1.69 2.02 2.28 2.48 2.64 2.51 2.31

Tabla 80: Eficiencia del algoritmo seq-sr-v en el Power Challenge.�,� ��� �� ����� ����� ���� � �������� ����0 � ��� � � �

���������� ���� ��� � �!�"��� �����

)

)*$

)*$�$

)*$�$�$

) $�$�$�$

)*$�$�$�$�$

)*$�$�$�$�$!$

$ )*$�$�$ %�$�$�$ ��$�$�$

� ��� ���� ����� ����� �� � � �������� ����0 � ��� � � �

����� ���� ���� ��� ��� �"��� �����

$%�$&$'�$(�$)*$�$)*%�$) &$

$ )*$�$�$ %�$�$�$ ��$�$�$

� �������� ���������� � ��� ����� ��� ����� ����� ���� � ������� ����0 � ��� � ���

���������� ���� ��� � �!�"��� �����

$

)*$

)��

%�$

% �

$ )*$�$�$ %�$�$�$ ��$�$�$

��� � ��� ����� � � ��� ���������� � ������ � �!��0 � �� � ���

�������������� �������!����� �����

$

$�- �

)

) - �

%

%�- �

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 101, 102, 103 y 104: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo seq-sr-v en el Power Challenge.

Las tablas 81, 82, 83 y 84, y las figuras 105, 106, 107 y 108 muestran los resultados de laexperimentación del esquema mul-sr-v. El comportamiento del algoritmo es prácticamente el mismoque en el caso seq-sr-v. Ahora las prestaciones para valores de n cercanos a 1000 es mejor que en elcaso anterior. Pero en general, el algoritmo presenta el mismo problema fundamental de no alcanzarmás de 140 MegaFlops.

135

Computación de la PSVD

Tamaño 1 2 3 4 5 6 8 10120 1.84 1.92 4.80 9.12 12.72 15.60 13.20 7.92240 21.53 83.52 79.20 75.36 60.00 38.40 20.16 27.36360 150.17 324.00 126.72 180.00 144.00 122.40 93.60 110.88480 455.57 680.64 298.56 181.44 232.32 169.92 166.08 164.16600 821.86 916.80 798.00 524.40 244.80 296.40 238.80 214.80720 1491.93 1143.36 1326.24 1056.96 666.72 491.04 550.08 319.68

1080 9798.70 2589.84 2531.52 2451.60 1874.88 1885.68 1302.48 961.201440 24073.48 7994.88 4599.36 4213.44 4167.36 3968.64 3199.68 2410.561800 53733.04 17226.00 10339.20 7264.80 6436.80 6048.00 5781.60 4852.802160 84493.86 27790.56 17586.72 12912.48 11059.20 9421.92 8501.76 7413.122400 139427.9 47654.40 27259.20 20625.60 15230.40 13387.20 11683.20 10996.802880 231303.3 83940.48 46753.92 34882.56 26789.76 22728.96 17913.60 16600.323000 341994.2 112548.0 62862.00 40740.00 32028.00 26790.00 20304.00 18642.003240 584739.1 173949.1 100712.1 67690.08 50025.60 38581.92 28972.08 26457.84

Tabla 81: Tiempo de ejecución del algoritmo mul-sr-v en el Power Challenge.

Tamaño 1 2 3 4 5 6 8 10120 91.37 87.43 34.97 18.40 13.19 10.76 12.71 21.19240 62.00 15.98 16.85 17.71 22.25 34.76 66.22 48.79360 29.94 13.87 35.48 24.98 31.22 36.74 48.04 40.55480 23.37 15.64 35.66 58.69 45.83 62.67 64.11 64.86600 25.29 22.67 26.04 39.63 84.91 70.12 87.04 96.77720 24.06 31.40 27.07 33.96 53.85 73.11 65.27 112.31

1080 12.35 46.75 47.83 49.39 64.58 64.21 92.97 125.981440 11.91 35.89 62.38 68.10 68.85 72.30 89.67 119.031800 10.42 32.52 54.19 77.12 87.05 92.64 96.91 115.462160 11.45 34.83 55.04 74.97 87.53 102.75 113.87 130.592400 9.52 27.86 48.71 64.38 87.18 99.19 113.65 120.752880 9.91 27.33 49.07 65.77 85.64 100.94 128.08 138.213000 7.58 23.04 41.25 63.65 80.96 96.79 127.72 139.103240 5.58 18.77 32.43 48.25 65.29 84.66 112.75 123.46

Tabla 82: Prestaciones del algoritmo mul-sr-v en el Power Challenge.

136

Método de Kogbetliantz con Paso de Mensajes

Tamaño 2 3 4 5 6 8 10120 0.95 0.38 0.20 0.14 0.11 0.13 0.23240 0.25 0.27 0.28 0.35 0.56 1.06 0.78360 0.46 1.18 0.83 1.04 1.22 1.60 1.35480 0.66 1.52 2.51 1.96 2.68 2.74 2.77600 0.89 1.02 1.56 3.35 2.77 3.44 3.82720 1.30 1.12 1.41 2.23 3.03 2.71 4.66

1080 3.78 3.87 3.99 5.22 5.19 7.52 10.191440 3.01 5.23 5.71 5.77 6.06 7.52 9.981800 3.11 5.19 7.39 8.34 8.88 9.29 11.072160 3.04 4.80 6.54 7.64 8.96 9.93 11.392400 2.92 5.11 6.75 9.15 10.41 11.93 12.672880 2.75 4.94 6.63 8.63 10.17 12.91 13.933000 3.03 5.44 8.39 10.67 12.76 16.84 18.343240 3.36 5.80 8.63 11.68 15.15 20.18 22.10

Tabla 83: Incremento de velocidad del algoritmo mul-sr-v en el Power Challenge.

Tamaño 2 3 4 5 6 8 10120 0.47 0.12 0.05 0.02 0.01 0.01 0.02240 0.12 0.09 0.07 0.07 0.09 0.13 0.07360 0.23 0.39 0.20 0.20 0.20 0.20 0.13480 0.33 0.50 0.62 0.39 0.44 0.34 0.27600 0.44 0.34 0.39 0.67 0.46 0.43 0.38720 0.65 0.37 0.35 0.44 0.50 0.33 0.46

1080 1.89 1.29 0.99 1.04 0.86 0.94 1.011440 1.50 1.74 1.42 1.15 1.01 0.94 0.991800 1.55 1.73 1.84 1.66 1.48 1.16 1.102160 1.52 1.60 1.63 1.52 1.49 1.24 1.132400 1.46 1.70 1.68 1.83 1.73 1.49 1.262880 1.37 1.64 1.65 1.72 1.69 1.61 1.393000 1.51 1.81 2.09 2.13 2.12 2.10 1.833240 1.68 1.93 2.15 2.33 2.52 2.52 2.21

Tabla 84: Eficiencia del algoritmo mul-sr-v en el Power Challenge.

� � ��� �� � ��� ��������� � ������ � ��� � �� � ���

���������� ���� ��� � �!�"��� �����

)

)*$

)*$�$

)*$�$�$

) $�$�$�$

)*$�$�$�$�$

)*$�$�$�$�$!$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ���� � ��� ���������� � �������� � ��� � ��� � ���

����� ���� ���� ��� ��� �"��� �����

$%�$&$'�$(�$)*$�$)*%�$) &$

$ )*$�$�$ %�$�$�$ ��$�$�$

137

Computación de la PSVD

� ������������������� � �� ����� ��� ����� ����� ���� � ������� � ��� � ��� � � �

�������������� ��� � �!�"�#� �����

$

)*$

)��

%�$

% �

$ ) $�$�$ %�$�$�$ ��$�$�$

����� �� ����� � ����� �� � ���� � ����� � ����� � ��� � � �

����� ��������� ������� �"��� �����

$

$- �

)

)!- �

%

%- �

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 105, 106, 107 y 108: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo mul-sr-v en el Power Challenge.

6.1.3.7. Resultados experimentales en el Cluster de PCs y conclusiones.

En esta arquitectura hemos utilizado de nuevo el PVM como soporte para la implementación,utilizando los mismos programas que en el Power Challenge. A pesar de que esta arquitectura disponede una red de comunicaciones de 1Gbit, no hay una implementación PVM que utilice directamente laslibrerías asociadas a la red. Problemas técnicos con el soporte de la misma para TCP/IP nos hanimpedido utilizarla, debiendo usar la red de 100 MBit.

Pese a que cada procesador puede alcanzar hasta 100 MFlops, partimos del hecho de que concódigo escrito en C, todas las pruebas indican que no se pueden sobrepasar los 30 MFlops, pese a laoptimización dada por el compilador. Las tablas 85, 86, 87 y 88 y las figuras 109, 110, 111 y 112 nosmuestran los resultados obtenidos con el algortimo secuencial y el esquema seq-sr. La observación dela tabla 86 nos permite aprecicar que el algoritmo secuencial no supera los 20 MFlops, y, lo que esmas interesante, que las prestaciones decaen a medida que aumenta el tamaño de las matrices, pero noen una forma tan significatva como sucedía en el Power Challenge. La misma tabla 86 nos muestraque el algortimo paralelo presenta, en general, un buen comportamiento.Para matrices pequeñas, comoes de esperar, el incremento del número de procesadores hace caer las prestaciones, dado que la cargacomputacional por procesador es pequeña comparada con la carga de comunicaciones y que la redempleada no es lo suficientemente rápida. Para n = 720, el comportamiento del algoritmo mejorasensiblemente y para n = 2160 se obtiene el mejor comportamiento.

Es de destacar el elevado incremento de velocidad obtenido para 2 y 3 procesadores, debidoprobablemente a que en este caso el algoritmo se comporta como un algoritmo por bloques queaprovecha mejor cada uno de los procesadores.

138

Método de Kogbetliantz con Paso de Mensajes

Tamaño 1 2 3 4 5 6 8 10120 4.46 2.56 3.63 4.54 6.30 7.74 10.30 12.37240 35.37 10.29 10.60 13.43 16.29 18.35 23.73 29.28360 131.12 31.41 26.13 28.60 56.78 62.06 66.15 73.99480 342.23 106.66 90.46 88.05 90.00 89.95 101.63 111.23600 640.51 180.40 147.28 136.85 133.14 133.43 149.94 158.23720 1221.20 319.81 248.86 212.36 199.68 196.85 213.26 236.44

1080 4110.67 1104.36 774.15 612.09 504.21 473.68 461.63 475.121440 10093.41 3905.39 1872.10 1556.25 1207.68 1056.93 879.66 854.121800 19717.98 6949.21 5500.97 2966.62 2787.68 2710.98 1597.23 1370.102160 33611.77 14742.04 8361.24 6768.37 4725.29 4179.58 3684.12 2198.942400 47738.60 19010.12 10837.01 8973.08 7868.25 5530.15 5051.01 3025.772880 76966.30 28903.77 19299.51 13452.11 11468.13 10617.74 7547.86 7507.023000 100983.9 33803.12 28900.97 15338.18 13018.92 11912.22 11145.96 8111.113240 124952.6 159060.8 36162.89 18394.24 15937.85 13713.18 13530.35 11713.20

Tabla 85: Tiempo de ejecución del algoritmo seq-sr en el Cluster de PCs.

Tamaño 1 2 3 4 5 6 8 10120 19.21 33.49 23.62 18.84 13.59 11.06 8.31 6.92240 19.06 65.52 63.60 50.21 41.40 36.75 28.41 23.02360 17.26 72.07 86.64 79.14 39.87 36.47 34.22 30.59480 15.63 50.17 59.15 60.78 59.46 59.49 52.65 48.11600 16.29 57.84 70.85 76.25 78.38 78.20 69.59 65.95720 14.75 56.32 72.38 84.82 90.21 91.50 84.46 76.18

1080 14.76 54.95 78.38 99.14 120.35 128.11 131.45 127.721440 14.23 36.79 76.76 92.34 119.00 135.97 163.37 168.261800 14.22 40.37 50.99 94.56 100.63 103.48 175.64 204.762160 14.41 32.87 57.95 71.59 102.55 115.94 131.53 220.382400 13.92 34.96 61.33 74.06 84.47 120.18 131.58 219.652880 14.91 39.72 59.49 85.35 100.11 108.13 152.11 152.943000 12.85 38.38 44.90 84.60 99.67 108.93 116.42 159.983240 13.08 10.27 45.19 88.86 102.55 119.19 120.80 139.54

Tabla 86: Prestaciones del algoritmo seq-sr en el Cluster de PCs.

139

Computación de la PSVD

Tamaño 2 3 4 5 6 8 10120 1.74 1.22 0.98 0.70 0.57 0.43 0.36240 3.43 3.33 2.63 2.17 1.92 1.49 1.20360 4.17 5.01 4.58 2.30 2.11 1.98 1.77480 3.20 3.78 3.88 3.80 3.80 3.36 3.07600 3.55 4.34 4.68 4.81 4.80 4.27 4.04720 3.81 4.90 5.75 6.11 6.20 5.72 5.16

1080 3.72 5.30 6.71 8.15 8.67 8.90 8.651440 2.58 5.39 6.48 8.35 9.54 11.47 11.811800 2.83 3.58 6.64 7.07 7.27 12.34 14.392160 2.27 4.01 4.96 7.11 8.04 9.12 15.282400 2.51 4.40 5.32 6.06 8.63 9.45 15.772880 2.66 3.98 5.72 6.71 7.24 10.19 10.253000 2.98 3.49 6.58 7.75 8.47 9.06 12.453240 0.78 3.45 6.79 7.83 9.11 9.23 10.66

Tabla 87: Incremento de velocidad del algoritmo seq-sr en el Cluster de PCs.

Tamaño 2 3 4 5 6 8 10120 0.87 0.40 0.24 0.14 0.09 0.05 0.03240 1.71 1.11 0.65 0.43 0.32 0.18 0.12360 2.08 1.67 1.14 0.46 0.35 0.24 0.17480 1.60 1.26 0.97 0.76 0.63 0.42 0.30600 1.77 1.44 1.17 0.96 0.80 0.53 0.40720 1.90 1.63 1.43 1.22 1.03 0.71 0.51

1080 1.86 1.76 1.67 1.63 1.44 1.11 0.861440 1.29 1.79 1.62 1.67 1.59 1.43 1.181800 1.41 1.19 1.66 1.41 1.21 1.54 1.432160 1.13 1.33 1.24 1.42 1.34 1.14 1.522400 1.25 1.46 1.33 1.21 1.43 1.18 1.572880 1.33 1.32 1.43 1.34 1.20 1.27 1.023000 1.49 1.16 1.64 1.55 1.41 1.13 1.243240 0.39 1.15 1.69 1.56 1.51 1.15 1.06

Tabla 88: Eficiencia del algoritmo seq-sr en el Cluster de PCs.

� � ��� �� � � ��!����� � �!��0 � ��� �

�������������� ��� � �!�"�#� �����

)

)*$

)*$�$

)*$�$�$

)*$�$�$�$

) $�$�$�$�$

)*$�$�$�$�$!$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ���� � � ��!� ����� ����0 � ��� �

���������� ���� ��� � �!�"��� �����

$

��$

) $�$

)��$

%�$�$

%���$

$ )*$�$�$ %�$�$�$ ��$�$�$

140

Método de Kogbetliantz con Paso de Mensajes

� �������� ���������� � ��� ����� ��� � � ��!� �� � ����0 � ��� �

���������� ���� ��� � �!�"��� �����

$%&'()*$)*%) &)*'

$ )*$�$�$ %�$�$�$ ��$�$�$

��� � ��� ����� � � � �� � ��� � ��� 0 � ��� �

�������������� �������!����� �����

$

$�- �

)

) - �

%

%�- �

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 109, 110, 111 y 112: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo seq-sr en el Cluster de PCs.

Los resultados del esquema mul-sr aparecen en las tablas 89, 90, 91 y 92 y en las figuras 113,114, 115 y 116. El comportamiento del algoritmo en este caso es muy similar al seq-sr, sin dudadebido al hecho de la buena conectividad de la red, que hasta 20 procesadores realiza la comunicacióna través de un único conmutador con buenas prestaciones. Como detalles particulares, citemos quepara matrices pequeñas se comporta ligeramente peor que el seq-sr, al contrario que para matricesgrandes, donde mejora su rendimiento.

Tamaño 1 2 3 4 5 6 8 10120 4.46 3.36 3.93 5.02 6.32 6.84 9.50 23.31240 35.37 13.83 10.80 13.75 15.00 16.83 21.69 32.61360 131.12 39.57 27.84 27.56 56.24 31.28 42.37 83.23480 342.23 121.44 93.28 92.06 91.01 87.59 97.15 126.43600 640.51 210.03 153.19 143.42 143.73 141.60 168.78 197.41720 1221.20 310.94 235.83 214.02 209.25 202.74 213.24 265.75

1080 4110.67 1108.10 752.26 600.18 528.06 490.55 502.71 521.521440 10093.41 2448.38 1721.15 1352.86 1155.76 1021.27 916.58 850.241800 19717.98 5302.85 3930.66 2716.68 2246.07 1916.97 1653.34 1497.322160 33611.77 12952.37 10739.72 5029.88 4456.32 3325.74 2701.88 2316.342400 47738.60 18603.37 16855.67 8388.88 6240.00 4710.00 3791.29 3199.462880 76966.30 26868.25 23150.65 23456.09 10753.35 9549.82 8571.71 5146.663000 100983.9 28326.31 24362.96 25271.63 16130.04 29543.42 25463.90 6030.883240 124952.6 110187.9 32735.62 28056.42 30986.08 33776.31 22490.34 9371.48

Tabla 89: Tiempo de ejecución del algoritmo mul-sr en el Cluster de PCs.

141

Computación de la PSVD

Tamaño 1 2 3 4 5 6 8 10120 19.21 25.46 21.80 17.06 13.55 12.51 9.01 3.67240 19.06 48.75 62.43 49.03 44.96 40.06 31.09 20.67360 17.26 57.20 81.32 82.12 40.25 72.36 53.42 27.19480 15.63 44.06 57.37 58.13 58.80 61.09 55.08 42.32600 16.29 49.68 68.12 72.76 72.60 73.69 61.82 52.86720 14.75 57.93 76.38 84.16 86.08 88.84 84.47 67.78

1080 14.76 54.76 80.67 101.11 114.92 123.70 120.71 116.361440 14.23 58.69 83.50 106.23 124.34 140.72 156.79 169.031800 14.22 52.90 71.37 103.26 124.90 146.34 169.68 187.362160 14.41 37.41 45.12 96.34 108.74 145.71 179.35 209.212400 13.92 35.72 39.43 79.22 106.51 141.11 175.30 207.732880 14.91 42.73 49.59 48.95 106.77 120.23 133.94 223.093000 12.85 45.81 53.26 51.34 80.45 43.92 50.96 215.173240 13.08 14.83 49.93 58.25 52.75 48.39 72.67 174.41

Tabla 90: Prestaciones del algoritmo mul-sr en el Cluster de PCs.

Tamaño 2 3 4 5 6 8 10120 1.32 1.13 0.88 0.70 0.65 0.46 0.19240 2.55 3.27 2.57 2.35 2.10 1.63 1.08360 3.31 4.71 4.75 2.33 4.19 3.09 1.57480 2.81 3.66 3.71 3.76 3.90 3.52 2.70600 3.04 4.18 4.46 4.45 4.52 3.79 3.24720 3.92 5.17 5.70 5.83 6.02 5.72 4.59

1080 3.70 5.46 6.84 7.78 8.37 8.17 7.881440 4.12 5.86 7.46 8.73 9.88 11.01 11.871800 3.71 5.01 7.25 8.77 10.28 11.92 13.162160 2.59 3.12 6.68 7.54 10.10 12.44 14.512400 2.56 2.83 5.69 7.65 10.13 12.59 14.922880 2.86 3.32 3.28 7.15 8.05 8.97 14.953000 3.56 4.14 3.99 6.26 3.41 3.96 16.743240 1.13 3.81 4.45 4.03 3.69 5.55 13.33

Tabla 91: Incremento de velocidad del algoritmo mul-sr en el Cluster de PCs.

142

Método de Kogbetliantz con Paso de Mensajes

Tamaño 2 3 4 5 6 8 10120 0.66 0.37 0.22 0.14 0.10 0.05 0.01240 1.27 1.09 0.64 0.47 0.35 0.20 0.10360 1.65 1.57 1.18 0.46 0.69 0.38 0.15480 1.40 1.22 0.92 0.75 0.65 0.44 0.27600 1.52 1.39 1.11 0.89 0.75 0.47 0.32720 1.96 1.72 1.42 1.16 1.00 0.71 0.45

1080 1.85 1.82 1.71 1.55 1.39 1.02 0.781440 2.06 1.95 1.86 1.74 1.64 1.37 1.181800 1.85 1.67 1.81 1.75 1.71 1.49 1.312160 1.29 1.04 1.67 1.50 1.68 1.55 1.452400 1.28 0.94 1.42 1.53 1.68 1.57 1.492880 1.43 1.10 0.82 1.43 1.34 1.12 1.493000 1.78 1.38 0.99 1.25 0.56 0.49 1.673240 0.56 1.27 1.11 0.80 0.61 0.69 1.33

Tabla 92: Eficiencia del algoritmo mul-sr en el Cluster de PCs.

� � ��� �� � � ��!� ����� ����� � ��� �

���������� ���� ��� � �!�"��� �����

)

)*$

)*$�$

)*$�$�$

) $�$�$�$

)*$�$�$�$�$

)*$�$�$�$�$!$

$ )*$�$�$ %�$�$�$ ��$�$�$

� ��� ���� � � ��!����� � � ��� � ��� �

����� ���� ���� ��� ��� �"��� �����

$

��$

)*$�$

)���$

%�$�$

% ��$

$ )*$�$�$ %�$�$�$ ��$�$�$

� ������� ����� � �� ����� ����� ��� � � �� � ��� � � ��� � ��� �

���������� ���� ��� � �!�"��� �����

$

)*$

)��

%�$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ��� ������ � � � ��!����� � � ��� � ��� �

�������������� �������!����� �����

$

$�- �

)

) - �

%

%�- �

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 113, 114, 115 y 116: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo mul-sr en el Cluster de PCs.

Introducimos ahora la computación de vectores singulares. Las tablas 93, 94, 95 y 96 y lasfiguras 117, 118, 119 y 120 muestran los resultados obtenidos con el esquema alt-sr-v. La presenciade más matrices (el triple de datos) hace que se sature la memoria central de 128 MBytes de cadaprocesador y comience a usarse el disco (el swap de la memoria virtual). Las prestaciones decaen deforma considerable, por lo que no podemos considerarlas en las tablas de resultados, donde se han

143

Computación de la PSVD

indicado estos casos mediante la anotación: "--". En esta situación el incremento de velocidad y laseficiencias se han calculado respecto a los resultados obtenidos en la ejecución del algoritmo paraleloen el menor número de procesadores en que ha sido posible, y se han indicado en las tablas medianteun "*". Así, por ejemplo, para n = 2880 y p = 5, el menor número de procesadores donde se ha podidoejecutar el algortimo paralelo es 3, y el incremento de velocidad lo hemos calculado dividiendo eltiempo de ejecución en 3 procesadores por el tiempo en 5 procesadores y multiplicando el resultadopor 3.

La tabla 94 nos muestra como el algoritmo secuencial se comporta algo mejor que cuando nocalculábamos los vectores singulares. La mayor matriz que ha sido posible clacular ha sido n = 2160,por el motivo explicado. El algoritmo tiene un comportamiento en lo general pobre, pues aunque paraun numero pequeño de procesadores la tabla 95 nos muestra buenos incrementos de velocidad, paramás procesadores la eficiencia disminuye bastante, excepto el caso peculiar de p = 6, en que secomporta extrañamente bien. Las bajas eficiencias se aprecian muy bien observando la gráfica 120.

Tamaño 1 2 3 4 5 6 8 10120 7.31 6.24 6.72 8.88 10.32 12.24 17.28 24.24240 60.92 34.56 29.76 30.72 34.08 36.96 48.48 63.36360 222.07 97.20 77.04 105.84 77.04 108.72 120.96 146.16480 529.11 252.48 205.44 190.08 185.28 186.24 218.88 237.12600 1057.76 462.00 358.80 319.20 309.60 313.20 334.80 1026.00720 1984.50 820.80 574.56 515.52 475.20 465.12 564.48 924.48

1080 6401.31 3996.00 3579.12 1896.48 1483.92 1408.32 4240.08 11856.241440 17745.98 10068.48 6690.24 5834.88 6831.36 2880.00 8804.16 14886.721800 39907.26 18666.00 12196.80 12153.60 14756.40 14094.00 14734.80 23972.402160 77264.85 29769.12 24792.48 17478.72 20459.52 20990.88 25112.16 30425.762400 -- 43454.40 34833.60 25286.40 24206.40 26942.40 31756.80 37411.202880 -- -- 54760.32 49259.52 39116.16 35112.96 40245.12 48268.803000 -- -- 59016.00 50136.00 37470.00 38646.00 36492.00 46170.003240 -- -- -- 65149.92 49960.80 49857.12 50835.60 55818.72

Tabla 93: Tiempos de ejecución del algoritmo seq-sr-v en el Cluster de PCs.

Tamaño 1 2 3 4 5 6 8 10120 22.96 26.90 24.98 18.90 16.26 13.71 9.71 6.92240 21.91 38.63 44.86 43.46 39.17 36.12 27.53 21.07360 20.25 46.26 58.37 42.48 58.37 41.36 37.17 30.76480 20.12 42.17 51.83 56.02 57.47 57.17 48.65 44.90600 19.65 44.99 57.93 65.12 67.13 66.36 62.08 20.25720 18.09 43.74 62.49 69.64 75.55 77.19 63.60 38.83

1080 18.91 30.30 33.83 63.85 81.60 85.98 28.55 10.211440 16.16 28.49 42.89 49.17 42.00 99.63 32.59 19.271800 14.04 30.01 45.94 46.10 37.97 39.75 38.02 23.372160 12.52 32.52 39.04 55.38 47.31 46.12 38.55 31.812400 -- 30.55 38.12 52.51 54.85 49.28 41.81 35.492880 -- -- 41.89 46.57 58.65 65.34 57.01 47.533000 -- -- 43.94 51.72 69.20 67.10 71.06 56.163240 -- -- -- 50.14 65.38 65.52 64.25 58.52

Tabla 94: Prestaciones del algoritmo seq-sr-v en el Cluster de PCs.

144

Método de Kogbetliantz con Paso de Mensajes

Tamaño 2 3 4 5 6 8 10120 1.17 1.08 0.82 0.70 0.59 0.42 0.30240 1.76 2.04 1.98 1.78 1.64 1.25 0.96360 2.28 2.88 2.09 2.88 2.04 1.83 1.51480 2.09 2.57 2.78 2.85 2.84 2.41 2.23600 2.28 2.94 3.31 3.41 3.37 3.15 1.03720 2.41 3.45 3.84 4.17 4.26 3.51 2.14

1080 1.60 1.78 3.37 4.31 4.54 1.50 0.531440 1.76 2.65 3.04 2.59 6.16 2.01 1.191800 2.13 3.27 3.28 2.70 2.83 2.70 1.662160 2.59 3.11 4.42 3.77 3.68 3.07 2.532400 -- *2.49 *3.43 *3.59 *3.22 *2.73 *2.322880 -- -- *3.33 *4.19 *4.67 *4.08 *3.403000 -- -- *3.53 *4.72 *4.58 *4.85 *3.833240 -- -- -- *5.21 *5.22 *5.12 *4.66

Tabla 95: Incremento de velocidad del algoritmo seq-sr-v en el Cluster de PCs.

Tamaño 2 3 4 5 6 8 10120 0.58 0.36 0.20 0.14 0.09 0.05 0.03240 0.88 0.68 0.49 0.35 0.27 0.15 0.09360 1.14 0.96 0.52 0.57 0.34 0.22 0.15480 1.04 0.85 0.69 0.57 0.47 0.30 0.22600 1.14 0.98 0.82 0.68 0.56 0.39 0.10720 1.20 1.15 0.96 0.83 0.71 0.43 0.21

1080 0.80 0.59 0.84 0.86 0.75 0.18 0.051440 0.88 0.88 0.76 0.51 1.02 0.25 0.111800 1.06 1.09 0.82 0.54 0.47 0.33 0.162160 1.29 1.03 1.10 0.75 0.61 0.38 0.252400 -- *0.83 *0.85 *0.71 *0.53 *0.34 *0.232880 -- -- *0.83 *0.83 *0.77 *0.51 *0.343000 -- -- *0.88 *0.94 *0.76 *0.60 *0.383240 -- -- -- *1.04 *0.87 *0.64 *0.46

Tabla 96: Eficiencia del algoritmo seq-sr-v en el Cluster de PCs.� � ��� �� � � �� � ����� �!��0 � ��� � � �

����� ��������� ��� � �!����� �����

)

)*$

)*$�$

) $�$�$

)*$�$�$�$

)*$�$�$�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ���� � � �� � ����� ����0 � ��� � � �

����� ���� ���� ��� ��� �"��� �����

$

%�$

&$

'�$

(�$

)*$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

145

Computación de la PSVD

� �������� ���������� � ��� ����� ��� � � ��!� �� � ����0 � ��� � ���

����� ���� �� � ��� ���!����� �����

$)%�

&�

'�

$ )*$�$�$ %�$�$�$ ��$�$�$

��� � ��� ������ � � � ��!� ��� � ���!0 � ��� � � �

����� ��������� ������� �"��� �����

$$- %$- &$- '$- ())!- %)!- &

$ )*$�$�$ %�$�$�$ ��$�$�$

%�

&�

'()*$

Figuras 117, 118, 119 y 120: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo seq-sr-v en el Cluster de PCs.

Los resultados de la experimentación del esquema mul-sr-v aparecen en las tablas 97, 98, 99 y100 y en las gráficas 121, 122, 123 y 124. Este esquema se presenta claramente superior al seq-sr-v.La gráfica 122 comparada con la 118, muestra cómo las prestaciones aumentan con el número deprocesadores hasta un punto en el que un exceso de datos provoca un mal comportamiento en generaldel algoritmo, relacionado con el mal aprovechamiento de las antememorias.

Los incrementos de velocidad son ahora mas sustanciales, y las eficiencias superan la unidad enlos casos más favorables, como puede apreciarse en las gráficas 123 y 124. Aun así, todo ello debeinterpretarse como relativo al algoritmo secuencial, cuyo comportamiento en términos relativos esejemplar, pero dista del pico de la capacidad computacional de estos procesadores.

Tamaño 1 2 3 4 5 6 8 10120 7.31 6.48 7.92 8.88 10.08 11.76 20.88 24.72240 60.92 30.72 27.36 30.24 40.80 41.28 53.76 63.84360 222.07 97.20 77.76 78.48 104.40 89.28 129.60 129.60480 529.11 255.36 208.32 196.80 194.88 199.68 225.60 236.16600 1057.76 462.00 362.40 358.80 313.20 314.40 334.80 379.20720 1984.50 770.40 574.56 508.32 489.60 465.12 478.08 521.28

1080 6401.31 2810.16 2458.08 1458.00 1339.20 1233.36 1192.32 1229.041440 17745.98 9619.20 4674.24 4256.64 3453.12 2520.00 2448.00 2286.721800 39907.26 16322.40 15325.20 16534.80 14806.80 6678.00 4212.00 3952.802160 77264.85 28136.16 25073.28 23362.56 24360.48 27224.64 27596.16 9594.722400 -- 40406.40 29025.60 28876.80 26524.80 31315.20 38217.60 32932.802880 -- -- 50636.16 46275.84 42255.36 42318.72 48032.64 56851.203000 -- -- 58542.00 46602.00 44202.00 44346.00 49968.00 55188.003240 -- -- -- 56201.04 53025.84 53939.52 58838.40 65357.28

Tabla 97: Tiempo de ejecución del algoritmo mul-sr-v en el Cluster de PCs.

146

Método de Kogbetliantz con Paso de Mensajes

Tamaño 1 2 3 4 5 6 8 10120 22.96 25.90 21.19 18.90 16.65 14.27 8.04 6.79240 21.91 43.46 48.79 44.15 32.72 32.34 24.83 20.91360 20.25 46.26 57.83 57.30 43.07 50.37 34.69 34.69480 20.12 41.70 51.11 54.11 54.64 53.33 47.20 45.09600 19.65 44.99 57.35 57.93 66.36 66.11 62.08 54.81720 18.09 46.60 62.49 70.63 73.33 77.19 75.10 68.87

1080 18.91 43.09 49.26 83.05 90.42 98.18 101.56 98.521440 16.16 29.83 61.38 67.41 83.09 113.86 117.21 125.481800 14.04 34.32 36.56 33.88 37.84 83.90 133.03 141.752160 12.52 34.40 38.61 41.43 39.74 35.56 35.08 100.902400 -- 32.86 45.74 45.98 50.06 42.40 34.74 40.322880 -- -- 45.31 49.58 54.29 54.21 47.76 40.353000 -- -- 44.29 55.64 58.66 58.47 51.89 46.983240 -- -- -- 58.12 61.60 60.56 55.51 49.98

Tabla 98: Prestaciones del algoritmo mul-sr-v en el Cluster de PCs.

Tamaño 2 3 4 5 6 8 10120 1.12 0.92 0.82 0.72 0.62 0.35 0.29240 1.98 2.22 2.01 1.49 1.47 1.13 0.95360 2.28 2.85 2.82 2.12 2.48 1.71 1.71480 2.07 2.53 2.68 2.71 2.64 2.34 2.24600 2.28 2.91 2.94 3.37 3.36 3.15 2.78720 2.57 3.45 3.90 4.05 4.26 4.15 3.80

1080 2.27 2.60 4.39 4.77 5.19 5.36 5.201440 1.84 3.79 4.16 5.13 7.04 7.24 7.761800 2.44 2.60 2.41 2.69 5.97 9.47 10.092160 2.74 3.08 3.30 3.17 2.83 2.79 8.052400 -- *2.78 *2.79 *3.04 *2.58 *2.11 *2.452880 -- -- *3.28 *3.59 *3.58 *3.16 *2.673000 -- -- *3.76 *3.97 *3.96 *3.51 *3.183240 -- -- -- *4.23 *4.16 *3.82 *3.43

Tabla 99: Incremento de velocidad del algoritmo mul-sr-v en el Cluster de PCs.

147

Computación de la PSVD

Tamaño 2 3 4 5 6 8 10120 0.56 0.30 0.20 0.14 0.10 0.04 0.02240 0.99 0.74 0.50 0.29 0.24 0.14 0.09360 1.14 0.95 0.70 0.42 0.41 0.21 0.17480 1.03 0.84 0.67 0.54 0.44 0.29 0.22600 1.14 0.97 0.73 0.67 0.56 0.39 0.27720 1.28 1.15 0.97 0.81 0.71 0.51 0.38

1080 1.13 0.86 1.09 0.95 0.86 0.67 0.521440 0.92 1.26 1.04 1.02 1.17 0.90 0.771800 1.22 0.86 0.60 0.53 0.99 1.18 1.002160 1.37 1.02 0.82 0.63 0.47 0.34 0.802400 -- *0.92 *0.69 *0.60 *0.43 *0.26 *0.242880 -- -- *0.82 *0.71 *0.59 *0.39 *0.263000 -- -- *0.94 *0.79 *0.66 *0.43 *0.313240 -- -- -- *0.84 *0.69 *0.47 *0.34

Tabla 100: Eficiencia del algoritmo mul-sr-v en el Cluster de PCs.

� � ��� �� � � ��!����� � ����� � �� � ���

����� ���� �� � ��� ���!����� �����

)

)*$

)*$�$

)*$�$�$

) $�$�$�$

)*$�$�$�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ���� � � ��!����� � � ��� � �� � ���

���������� ���� ��� � �!�"��� �����

$%�$&�$'�$(�$) $�$) %�$) &�$) '�$

$ )*$�$�$ %�$�$�$ ��$�$�$

� �������� ����� � �� ����� ����� ��� � � ��!� ��� � � ��� � ��� � ���

�������������� ��� � �!�"�#� �����

$

%

&

'

(

)*$

)*%

$ )*$�$�$ %�$�$�$ ��$�$�$

����� �� ����� � � � ��!����� � � ��� � ��� � � �

����� ��������� ������� �"��� �����

$$- %$- &$- '$- ())!- %)!- &

$ )*$�$�$ %�$�$�$ ��$�$�$

%�

&�

'()*$

Figuras 121, 122, 123 y 124: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo mul-sr-v en el Cluster de PCs.

6.1.3.8. Conclusiones.

En este capítulo hemos abordado la computación de la PSVD mediante el método deKogbetliantz con un algoritmo paralelo basado en el orden secuencial, sobre cuatro arquitecturas bien

148

Método de Kogbetliantz con Paso de Mensajes

diferentes. Hemos utilizado el modelo de programación para computadores con memoria distribuida,utilizando PVM en tres de ellas. Los programas se han escrito en lenguaje C, sin utilizar núcleoscomputacionales, sólo contando con las habilidades optimizadoras de los compiladores.

Nuestro algoritmo ha obtenido buenos resultados cuando sólo hemos calculado los valoressingulares. Centrando nuestras conclusiones en las dos arquitecturas mas actuales, en el PowerChallenge el algoritmo alcanza hasta 1GFlop en el caso más favorable, que se da cuando ladistribución de los datos entre los procesadores permite un buen uso de las antememorias. Dado que elalgoritmo es paralelo pero no por bloques, a partir de un determinado número de datos por procesadorlas prestaciones caen sensiblemente. En el cluster de PCs, el código C no consigue aproximarsesuficientemente al pico de la capacidad de los procesadores y los resultados absolutos son pobres. Noobstante, se aprecia menos la ausencia de una estructura algorítmica en bloques, de modo que paramatrices grandes los resultados siguen siendo razonables.

Cuando abordamos la computación de los vectores singulares, nuestro algoritmo maneja el triplede datos y se incrementan las comunicaciones. El resultado es un comportamiento más pobre que en elcaso anterior, especialmente en la arquitectura Power Challenge, donde las prestaciones caen de formaexcesiva. En nuestra opinión, la solución del problema requiere un replanteamiento del esquema decomunicaciones del algoritmo cuando se pretenden calcular los vectores singulares.

En general, podemos concluir que el modelo de programación mediante el paso de mensajes,aunque más complejo de programar que el modelo específico en memoria compartida, nos da buenosresultados con un diseño más cuidado de los algoritmos, donde hay que tener en cuenta principalmentelas comunicaciones. Pero hay que señalar que la confección de los algoritmos es también mucho máscostosa y los resultados difíciles de predecir.

6.1.4. Conclusiones.

Hemos implementado en diversas arquitecturas y modelos de programación la computación dela PSVD con el algortimo de Kogbetliantz. Este método se basa en el uso de rotaciones y no puedenemplearse núcleos computacionales optimizados. En general la programación sin ayuda de estasherramientas es una labor artesana bastante costosa.

El modelo de programación para arquitecturas con memoria compartida nos ha permitidodesarrollar con cierta facilidad un algoritmo basado en el orden par-impar. Se han obtenido buenosresultados con los algoritmos por bloques (páginas 86 y 89). Este modelo de programación presentauna fuerte dependencia de optimización que el compilador realice y del comportamiento en variosprocesadores del código generado.

El modelo de programación con paso de mensajes nos da un mayor control sobre el programa, acambio de un mayor esfuerzo de programación. Hemos obtenido buenos resultados al cacular sólovalores singulares.

����������� �����������������������φφ����� �"!�����#$���&%'�(�)�

Este método de reciente aparición supone en cierta forma la generalización del método delGolub y Reinsch para la computación de la SVD presentado en la página 44. Como en el método deKogbetliantz implícito, se trata de evitar la realización del producto explícito de las matrices. Losautores [44], optan por realizar una bidiagonalización implícita del producto de las matrices ydespués calcular la SVD de la matriz diagonal con cualquiera de los buenos métodos conocidos, comoel de Golub y Kahan [42], el de Demmel [18] o el de Fernando y Parlett [33].

149

Computación de la PSVD

6.2.1. Algoritmo secuencial.

Para llevar a cabo la bidiagonalización implícita del producto de las matrices, realizamos unasecuencia de actualizaciones de las matrices mediante la aplicación de una serie de transformacionesde Householder [43]. Para ilustrar este proceso, mostremos su evolución operando sobre el productode dos matrices de tamaño 4x4. Representaremos los elementos nulos con un "0" y los no nulos conuna x.

En primer lugar, realizamos una transformación de Householder Q0 sebre las filas de B y lascolumnas de A, considerando que AB = AQ0

TQ0B. Elegimos Q0 tal que todos los elementos de laprimera columna de B son anulados excepto el primero, de modo que A y B quedan actualizadassegún: A ← AQ0

T y B ← Q0 B . Es decir, gráficamente

A

x x x xx x x xx x x xx x x x

=

���

���

, B

x x x xx x xx x xx x x

=

���

���

000

.

A continuación aplicamos otra transformación de Householder QA a las filas de A, elegida paraigualmente anular todos los elementos de la primera columna de A excepto el primero

Q A

x x x xx x xx x xx x x

A =

���

���

000

.

Nótese que el la matriz resultante del producto QA AB tiene la misma estructura

x x x xx x xx x xx x x

x x x xx x xx x xx x x

x x xx x xx x x

000

000

000

���

���

���

���=

���

���

x x x x

.

Estamos ahora interesados en la primera fila del producto, que hemos indicado en negrita en laexpresión anterior. Esta fila puede construirse como el producto de la primera fila de A y la matriz B.Una vez construida, buscamos una transformación de Householder que anule todos los elementos de lamisma excepto las dos primeras componentes de la misma

A BQ x xB( ,:)1 0 0= .

Entonces, cuando esta transformación es aplicada a la actual matriz B, el primer paso delproceso de bidiagonalización se ha completado, pues

150

Método de Golub, Sφlna y Van Dooren con ScaLAPACK

Q ABQ

x xx x xx x xx x x

A B =

���

���

0 0000

.

A continuación, consideramos A(2:n, 2:n) y B(2:n, 2:n) y utilizando el mismo procedimiento,podemos bidiagonalizar la segunda fila/columna del producto de las matrices. Podemos, así, procedersucesivamente hasta que el producto esté completamente bidiagonalizado.

Hemos realizado un programa que implementa el método empleando la librería Lapack, queincorpora todas los procedimientos implicados en el método. El algoritmo nº 17 representa labidiagonalización implícita del producto AB. Hemos incluído en la parte derecha la correspondienterutina LAPACK empleada en cada paso:

para i = 1, 2, ..., n-1Calcular el reflector de Householder que anule B(i+1:n,i) DLARFGAplicar el reflector a B por la izquierda DLARFAplicar el reflector a A por la derecha DLARFCalcular el reflector que anule A(i+1:n,i) DLARFGAplicar el reflector a A por la izquierda DLARFCalcular el producto implícito AB ( A(i,i:n)B(i:n,i:n) ) DGEMVCalcular el reflector que anule AB(i,min(i+2,n):n) DLARFGAlmacenar el elemento diagonal y el subdiagonalAplicar el reflector a B por la derecha DLARF

fin paraEl último elemento de la diagonal del producto de matrices es A(n,n)B(n,n)

Algoritmo 17: Bidiagonalización implícita, LAPACK.

Obsérvese que empleamos rutinas de nivel BLAS-2 y la rutina resultante es adecuada para serutilizada en el mismo nivel.

El resultado de esta rutina son dos vectores que contienen la diagonal y la diagonal inferior de lamatriz producto implícitamente bidiagonalizada. Esta forma de almacenamiento es la adecuada paraser empleada en rutinas LAPACK del tipo xLASQ o XDBSQR que implementan, respectivamente, losmétodos de Fernando y Parlett [33] y de Demmel [18].

6.2.2. Algoritmo paralelo con ScaLAPACK.

La realización paralela pasa por una observación del algoritmo secuencial. El algoritmo nº 17 espor naturaleza secuencial, pero cada uno de los pasos es paralelizable. La paralelización de dichospasos se realiza de forma relativamente directa usando la librería paralela ScaLAPACK, considerandoque a nivel de implementación, los parámetros de las rutinas difieren y que no se puede acceder deforma inmediata a elementos sueltos de las matrices sin pérdida de prestaciones.

Con estas consideraciones, el algoritmo nº 18 representa la paralelización a nivel BLAS-2 delalgoritmo nº 17, donde hemos indicado de la misma forma que antes las rutinas ScaLAPACKempleadas. Las matrices A y B son matrices distribuidas al estilo ScaLAPACK. Los vectores D y Eson vectores locales (no distribuidos) donde se almacenan los fragmentos de la matriz bidiagonal

151

Computación de la PSVD

resultante. Esta forma paramétrica se ha empleado por compatibilidad con las rutinas ScaLAPACK debidiagonalización de una matriz o de factorización QR de una matriz.

Crear descriptores ScaLAPACK para los vectores D y Epara i = 1, 2, ..., n-1

Calcular el reflector de Householder que anule B(i+1:n,i) PDLARFGAplicar el reflector a B por la izquierda PDLARFAplicar el reflector a A por la derecha PDLARFCalcular el reflector que anule A(i+1:n,i) PDLARFGAplicar el reflector a A por la izquierda PDLARFAlmacenar el elemento diagonal ( D(i) ← B(i,i) ) PDELSETCalcular el producto implícito AB ( A(i,i:n)B(i:n,i:n) ) PDGEMVAlmacenar el elemento subdiagonal PDELSETCalcular el reflector que anule AB(i,min(i+2,n):n) PDLARFGAplicar el reflector a B por la derecha PDLARF

fin paraEl último elemento de la diagonal del producto de matrices es A(n,n)B(n,n)

Algoritmo 18; : Bidiagonalización implícita, ScaLAPACK.

Es interesante observar, como detalles de implementación, que no es necesario usar PDELGETpara obtener los elemntos sueltos como B(i,i), pues precisamente son devueltos en un escalar apartepor la rutina PDLARFG. También observar que la rutina PDGEMV requiere para almacenar elresultado de la multiplicación, el uso de un vector distribuido. Para evitar la construcción de tal vector,algo complicada de parametrizar, hemos utilizado la parte sin utilizar del vector D, que coincidejustamente en tamaño y distribución con el espacio requerido.

Una vez realizado el algoritmo de la bidiagonalización, la rutina para calcular la PSVD puederealizarse con cierta facilidad modificando la rutina estándar del ScaLAPACK que se emplea para elcáculo de la SVD, empleando el método de Demmel. Esta rutina modificada se expone como algoritmo19.

Verificar los parámetros relativos a las 4 matrices.Calcular el espacio de trabajo requerido.Escalar las matrices si es necesario.Llamar a la rutina de bidiagonalización implícita.Distribuir las diagonales a los procesadores.Calcular los valores singulares.Redistribuir U y V.Calcular U y V definitivas.Copiar los valores singulares.Deshacer el escalado si corresponde.

Algoritmo 19: PSVD con bidiagonalización implícita.

6.2.3. Resultados experimentales.

6.2.3.1. Resultados experimentales en el Power Challenge y conclusiones.

Las tablas 101, 102, 103 y 104 y las figuras 125, 126, 127 y 128 muestran los resultados de laexperimentación del algoritmo de Golub, Sφlna y Van Dooren en el Power Challenge. Para un

152

Método de Golub, Sφlna y Van Dooren con ScaLAPACK

procesador, los resultados expuestos no son los del algoritmo secuencial utilizado en los apartadosanteriores, sino los obtenidos de la ejecución sobre un procesador del algoritmo paralelo, por razonesque pasamos a comentar.

Tamaño 1 2 3 4 5 6 8 10120 0.64 0.27 0.28 0.31 0.31 0.31 0.33 0.41

240 2.25 1.20 1.01 1.01 0.97 0.96 0.97 1.03

360 7.35 3.37 2.38 2.23 2.17 2.03 1.96 2.08

480 29.34 8.62 5.33 4.37 3.96 3.65 3.55 3.48

600 65.63 16.40 8.91 7.29 7.29 6.47 5.77 5.54

720 134.00 36.60 16.62 12.79 10.51 9.49 9.12 8.67

1080 480.00 179.70 87.50 55.49 46.12 36.09 27.43 22.65

1440 1230.00 550.40 271.80 221.40 181.10 148.90 97.23 76.62

1800 2440.00 1040.00 519.30 423.10 386.80 336.10 289.60 207.20

2160 4654.00 1914.00 984.00 751.60 702.70 657.50 571.70 527.10

2400 8015.00 2758.00 1246.00 1082.00 1028.00 947.80 897.30 806.70

2880 19770.00 4377.00 2338.00 1892.00 1702.00 1780.00 1531.00 1497.00

3000 12880.00 4801.00 2697.00 2118.00 1927.00 1910.00 1725.00 1662.00

3240 19830.00 6343.00 3271.00 2602.00 2357.00 2239.00 2129.00 2114.00

Tabla 101: Tiempo de ejecución del algoritmo de Golub en el Power Challenge.

La tabla 102 muestra las prestaciones de esta implementación. En los resultados de la ejecuciónen un procesador, observamos que se alcanzan elevadas prestaciones para matrices de tamaño medio.Las prestaciones decaen a medida que crece el tamaño de la matriz pero no de forma espectacular.Estamos ante un algoritmo ejecutado secuencialmente con operaciones que son en gran parte de nivelBLAS-2. Para un solo procesador, esto produce una pérdida de prestaciones a medida que el tamañode las matrices aumenta.

Para más de un procesador, la distribución de la computación entre los diversos procesadorespermite un buen aprovechamiento de las antememorias, de modo que los mejores resultados seobtienen para un determinado tamaño de los datos manejados por cada procesador. En la tablapodemos apreciar la presencia de una "diagonal" inicada en p = 1 y n = 360 y acabada en p = 10 yn = 1080. Sobre ella se obtienen las mejores prestaciones del algoritmo. Por debajo de ella el exceso dedatos por procesador hace disminuir gradualmente las prestaciones, aunque de un modo moderado. Porencima de ella el desequilibrio entre comunicación y computación mantiene las prestaciones acotadas,como era de esperar. La gráfica 126 muestra este efecto de forma visual, apreciándose las elevadasprestaciones que alcanza esta implementación.

153

Computación de la PSVD

Tamaño 1 2 3 4 5 6 8 10120 68.00 165.00 155.00 142.00 142.00 141.00 133.00 107.00240 141.00 265.00 315.00 315.00 327.00 331.00 328.00 308.00360 145.00 318.00 450.00 480.00 494.00 529.00 546.00 517.00480 86.00 294.00 477.00 581.00 642.00 696.00 717.00 731.00600 75.00 302.00 557.00 681.00 681.00 767.00 861.00 896.00720 64.00 234.00 516.00 671.00 816.00 904.00 941.00 990.00

1080 60.00 161.00 331.00 522.00 628.00 802.00 1056.00 1279.001440 55.00 124.00 252.00 310.00 379.00 461.00 706.00 896.001800 54.00 128.00 258.00 317.00 346.00 399.00 463.00 647.002160 49.00 121.00 235.00 308.00 329.00 352.00 405.00 439.002400 39.00 115.00 255.00 293.00 309.00 335.00 354.00 394.002880 27.00 125.00 234.00 290.00 322.00 308.00 358.00 367.003000 48.00 129.00 230.00 293.00 322.00 325.00 360.00 373.003240 39.00 123.00 239.00 300.00 331.00 349.00 367.00 370.00

Tabla 102: Prestaciones del algoritmo de Golub en el Power Challenge.

La presencia de esta "diagonal" en la tabla 102 produce que para matrices de cierto tamaño sealcancen incrementos de velocidad notablemente elevados, como se aprecia en la tabla , 103 y en lafigura 127.

Tamaño 2 3 4 5 6 8 10120 2.40 2.27 2.07 2.08 2.06 1.94 1.56240 1.87 2.23 2.23 2.31 2.34 2.32 2.18360 2.18 3.08 3.29 3.38 3.62 3.74 3.54480 3.40 5.50 6.70 7.41 8.03 8.27 8.43600 4.00 7.36 9.00 9.00 10.13 11.37 11.84720 3.66 8.06 10.47 12.74 14.11 14.69 15.46

1080 2.67 5.48 8.65 10.40 13.30 17.49 21.191440 2.23 4.52 5.55 6.79 8.26 12.65 16.051800 2.34 4.69 5.76 6.30 7.25 8.42 11.772160 2.43 4.72 6.19 6.62 7.07 8.14 8.822400 2.90 6.43 7.40 7.79 8.45 8.93 9.932880 4.51 8.45 10.44 11.61 11.10 12.91 13.203000 2.68 4.77 6.08 6.68 6.74 7.46 7.743240 3.12 6.06 7.62 8.41 8.85 9.31 9.38

Tabla 103: Incremento de velocidad algoritmo de Golub en el Power Challenge.

154

Método de Golub, Sφlna y Van Dooren con ScaLAPACK

Tamaño 2 3 4 5 6 8 10120 1.20 0.75 0.51 0.41 0.34 0.24 0.15240 0.93 0.74 0.55 0.46 0.39 0.29 0.21360 1.09 1.02 0.82 0.67 0.60 0.46 0.35480 1.70 1.83 1.67 1.48 1.33 1.03 0.84600 2.00 2.45 2.25 1.80 1.68 1.42 1.18720 1.83 2.68 2.61 2.54 2.35 1.83 1.54

1080 1.33 1.82 2.16 2.08 2.21 2.18 2.111440 1.11 1.50 1.38 1.35 1.37 1.58 1.601800 1.17 1.56 1.44 1.26 1.20 1.05 1.172160 1.21 1.57 1.54 1.32 1.17 1.01 0.882400 1.45 2.14 1.85 1.55 1.40 1.11 0.992880 2.25 2.81 2.61 2.32 1.85 1.61 1.323000 1.34 1.59 1.52 1.33 1.12 0.93 0.773240 1.56 2.02 1.90 1.68 1.47 1.16 0.93

Tabla 104: Eficiencia del algoritmo de Golub en el Power Challenge.

� � ��� �� ����� �� � ���� � ���������� ��� � ���

����� ��������� ��� � �!����� �����

$�- )

)

)*$

)*$�$

) $�$�$

)*$�$�$�$

)*$�$�$�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

� ��� ���� ����� ����� �� � � ���������� ��� � ���

����� ��������� ��� � �!����� �����

$%�$�$&$�$'�$�$(�$�$)*$�$�$)*%�$�$) &$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

� �������� ���������� � ��� ����� ��� ����� ����� ���� � ��������� ��� � ���

���������� ���� ��� � �!�"��� �����

$

)*$

)��

%�$

% �

$ )*$�$�$ %�$�$�$ ��$�$�$

����� �� ����� � ����� �� � ���� � ����� ��� ��� � ���

�������������� �������!����� �����

$

$�- �

)

) - �

%

%�- �

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 125, 126, 127 y 128: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo de Golub en el Power Challenge.

6.2.3.2. Resultados experimentales en el Cluster de PCs y conclusiones.

También en esta arquitectura se han obtenido buenos resultados, como muestran las tablas 105,106, 107 y 108, y las figuras 129, 130, 131 y 132. La gran cantidad de datos que se manejan cuando

155

Computación de la PSVD

el tamaño de las matrices crece satura la memoria de los procesadores, invalidando los resultadostemporales obtenidos (los tiempos de ejecución crecen desmesuradamente). En las tablas hemosindicado con "--" aquellos valores que no han podido determinarse por esta razón.

Tamaño 1 2 3 4 5 6 8 10120 0.59 0.55 0.54 0.58 0.58 0.52 0.54 6.83

240 4.50 1.91 1.58 1.56 1.59 1.60 1.77 1.72

360 17.96 6.15 4.17 3.75 3.64 3.47 3.36 8.53

480 42.72 19.68 11.32 8.73 7.82 7.16 6.39 6.20

600 92.23 40.88 21.04 16.56 15.39 12.09 10.75 10.54

720 168.80 73.55 40.64 35.64 26.04 20.81 17.58 16.47

1080 523.20 221.70 129.30 92.75 80.43 72.23 56.92 47.48

1440 -- 561.20 285.20 243.60 195.10 167.90 139.40 116.20

1800 -- -- -- 400.10 348.90 295.10 229.40 199.60

2160 -- -- -- 687.40 569.90 493.60 383.50 337.60

2400 -- -- -- -- 832.70 706.90 575.70 496.00

2880 -- -- -- -- -- -- 915.80 748.00

3000 -- -- -- -- -- -- 988.30 843.90

3240 -- -- -- -- -- -- -- 1024.00

Tabla 105: Tiempo de ejecución del algoritmo de Golub en el Cluster de PCs.

La observación de la tabla 106 nos permite apreciar que el notable grado de optimización de laslibrerías del ScaLAPACK lleva, a la ejecución en un procesador, a alcanzar 74 MFlops, cifra muypróxima al pico computacional del procesador. La comparación con la tabla 94 (página 144), donde seexponen las prestaciones del algoritmo secuencial escrito en C, nos muestra la excelencia de laiplementación del ScaLAPACK en esta arquitectura. Frente al caso del Power Challenge, aquí elincremento del tamaño de las matrices no hace disminuir las prestaciones del algoritmo, alcanzándoselas mejores prestaciones para las matrices mayores en mayor número de procesadores.

Tamaño 1 2 3 4 5 6 8 10120 74.00 79.00 80.00 75.00 75.00 83.00 80.00 6.00240 70.00 166.00 201.00 203.00 199.00 198.00 179.00 184.00360 59.00 174.00 257.00 286.00 294.00 308.00 319.00 125.00480 59.00 129.00 224.00 291.00 325.00 355.00 397.00 410.00600 53.00 121.00 236.00 300.00 322.00 410.00 462.00 471.00720 50.00 116.00 211.00 240.00 329.00 412.00 488.00 521.00

1080 55.00 130.00 224.00 312.00 360.00 401.00 509.00 610.001440 -- 122.00 240.00 281.00 352.00 409.00 492.00 591.001800 -- -- -- 335.00 384.00 454.00 584.00 672.002160 -- -- -- 337.00 406.00 469.00 604.00 686.002400 -- -- -- -- 381.00 449.00 552.00 641.002880 -- -- -- -- -- -- 599.00 734.003000 -- -- -- -- -- -- 628.00 735.003240 -- -- -- -- -- -- -- 763.00

Tabla 106: Prestaciones del algoritmo de Golub en el Cluster de PCs.

En las tablas 107 y 108 se han representado con un "*" aquellos valores calculados sobre unnúmero de procesadores distinto de uno, como se explicó en la página 144.

156

Método de Golub, Sφlna y Van Dooren con ScaLAPACK

Tamaño 2 3 4 5 6 8 10120 1.06 1.08 1.01 1.01 1.12 1.08 0.08240 2.35 2.85 2.88 2.82 2.81 2.54 2.61360 2.92 4.31 4.79 4.93 5.16 5.35 2.10480 2.17 3.77 4.89 5.46 5.96 6.68 6.89600 2.25 4.38 5.56 5.99 7.62 8.57 8.75720 2.29 4.15 4.73 6.48 8.11 9.60 10.24

1080 2.35 4.04 5.64 6.50 7.24 9.19 11.011440 -- *3.93 *4.60 *5.75 *6.68 *8.05 *9.651800 -- -- -- *4.58 *5.42 *6.97 *8.012160 -- -- -- *4.82 *5.57 *7.16 *8.142400 -- -- -- -- *5.88 *7.23 *8.392880 -- -- -- -- -- -- *9.793000 -- -- -- -- -- -- *9.363240 -- -- -- -- -- -- --

Tabla 107: Incremento de velocidad del algoritmo de Golub en el Cluster de PCs.

Tamaño 2 3 4 5 6 8 10120 0.53 0.36 0.25 0.20 0.18 0.13 0.00240 1.17 0.95 0.72 0.56 0.46 0.31 0.26360 1.46 1.43 1.19 0.98 0.86 0.66 0.21480 1.08 1.25 1.22 1.09 0.99 0.83 0.68600 1.12 1.46 1.39 1.19 1.27 1.07 0.87720 1.14 1.38 1.18 1.29 1.35 1.20 1.02

1080 1.17 1.34 1.41 1.30 1.20 1.14 1.101440 -- *1.31 *1.15 *1.15 *1.11 *1.00 *0.961800 -- -- -- *0.91 *0.90 *0.87 *0.802160 -- -- -- *0.96 *0.92 *0.89 *0.812400 -- -- -- -- *0.98 *0.90 *0.832880 -- -- -- -- -- -- *0.973000 -- -- -- -- -- -- *0.933240 -- -- -- -- -- -- --

Tabla 108: Eficiencia del algoritmo de Golub en el Cluster de PCs.

� � ��� �� � � ��!����� ��� ��� � ���

����� ���� ���� ��� ��� �"��� �����

$�- )

)

)*$

) $�$

)*$�$�$

)*$�$�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ���� � � ��!����� ������� � ���

����� ���� ���� ��� ��� �"��� �����

$)*$�$%�$�$��$�$&�$�$��$�$'�$�$��$�$(�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

157

Computación de la PSVD

� ������� ����� � �� ����� ����� ��� � � �� � ��� ��� ��� � ���

�������������� ��� � �!�"�#� �����

$

%

&

'

(

)*$

)*%

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ��� ������ � � � ��!����� ��� ��� � ���

����� ��������� ������� �"��� �����

$$- %$- &$- '$- ())!- %)!- &)!- '

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 129, 130, 131 y 132: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo de Golub en el Cluster de PCs.

Dado que las prestaciones no cesan de aumentar a medida que lo hace el número deprocesadores y el tamaño de las matrices, es interesante estudiar cómo se escala el algoritmo para untamaño de datos constante. En las tablas 109, 110 y 111 se muestran los resultados obtenidos cuandoel número de elementos por procesador se ha mantenido constante, para fragmentos de 500x500 y1000x1000 elementos.

Tamaño 1 2 4 8 16 32500 47.53 48.44 80.53 120.20 191.00 367.40

1000 407.40 543.80 537.10 863.70 1187.00 2019.00

Tabla 109: Escalabilidad del algoritmo de Golub: Tiempos de ejecución.

Tamaño 1 2 4 8 16 32500 60.00 83.00 71.00 67.00 60.00 44.00

1000 56.00 59.00 85.00 75.00 77.00 64.00

Tabla 110: Escalabilidad del algoritmo de Golub: Prestaciones.

Tamaño 2 4 8 16 32500 1.38 1.18 1.11 0.99 0.73

1000 1.05 1.51 1.33 1.37 1.14

Tabla 111: Escalabilidad del algoritmo de Golub: Eficiencia.

Las figuras 133 y 134 muestran gráficamente la escalabilidad del algortimo en esta arquitectura.Es de destacar notable linealidad obtenida.

158

Método de Golub, Sφlna y Van Dooren con ScaLAPACK

� ��� ���� � � ��!����� ��� ��� � ���

��������������������!�

$)*$%�$��$&�$��$'�$��$(�$��$

$ )*$ %�$ ��$ &$

����� �� ����� � � � ��!����� ��� ��� � ���

����������������������

$$�- %$�- &$�- '$�- ()) - %) - &) - '

$ )*$ %�$ ��$ &$

��$�$)*$�$�$

Figuras 133, y 134: Escalabilidad del algoritmo de Golub en el Cluster de PCs.

6.2.4. Conclusiones.

Hemos realizado una implementación paralela del algoritmo de Golub, Sφlna y Van Doorenutilizando ScaLAPACK en dos arquitecturas, el Power Challenge y un cluster de PCs.

Los resultados experimentales obtenidos en ambas arquitecturas, muestran el gran interés deeste algoritmo. En ambas arquitecturas se han obtenido prestaciones elevadas y un buencomportamiento al aumentar el tamaño del problema y el número de procesadores. Esto se pone demanifiesto especialmente en el Cluster de PCs donde la escalabilidad es excelente y para grandesmatrices se alcanzan unas prestaciones más elevadas que en el Power Challenge, a lo que contribuye,sin duda, el buen comportamiento de la red de comunicaciones Myrinet.

Es de destacar el menor coste algorítmico de este algoritmo frente al método de Kogbetliantz ylos buenos resultados obtenidos gracias al ScaLAPACK. Ello convierte a este método en una mejoralternativa cuando la compleja librería ScaLAPACK está disponible, pese a que el algoritmo deKogbetliantz suele retornar mayor precisión en los cálculos. El método es, como el de Kogbetliantz,fácilmente extensible a más de dos matrices.

����� �(��� ����������# %�� �����

6.3.1. Algoritmo secuencial.

En [27] Drmac propone un método completamente diferente para calcular la PSVD. Se trata de

transformar el par de matrices A,B en un par equivalente �,�

A B , realizar explícitamente el producto delas nuevas matrices y calcular medainte un método tipo Jacobi la SVD del producto. La forma en quese genera el par equivalente garantiza la estabilidad numérica del proceso, de modo que el método nosólo es numéricamente estable, sino que en muchos casos es superior al método de Kogbetliantzimplícito expuesto en la página 65. Los detalles de la estabilidad numérica del método puedenencontrarse en [27].

159

Computación de la PSVD

Calcular∆A = diag(||AT

ei ||2 ), es decir ∆A = norma(A(:,1:n)),Ar = ∆A

-1A,B1 = ∆AB.

Calcular la factorización QR con pivotamiento de columna de B1T

B QR

n p p1 0T ∏ =

���

�� �

− ,,

con R triangular superior, Q ortogonal y Π la matriz de permutación del pivotamiento.Calcular la matriz F = Ar

T ΠR T, usando el algoritmo estandard de multiplicación dematrices.

Calcular la SVD de F:

Σ0m p p

U FV−

���

�� � =

,

T .

La SVD de A TB es

Σ ⊕���

�� � = ⊕ −

00 U A B Q V In p

T T( )( ( )).

Algoritmo 20: PSVD con el método de Drmac.

6.3.2. Algoritmo paralelo con ScaLAPACK.

Como en el caso del algoritmo de Golub, Sφlna y Van Dooren (pág 149), la implementaciónparalela puede realizarse de forma eficiente mediante el uso de ScaLAPACK, por las característicasdel método, puesto que realiza mayoritariamente llamadas a funciones de las que ya disponemos unarealización mediante ScaLAPACK.

Crear descriptor para M1 y M2 (es el mismo descriptor)M1←A (PDLACPY)M2←B (PDLACPY)para j= 1, ..., n

norma ← PDNRM2(M1,1,j) ∆A = norm(A(:,1:n))M2 ← PDSCAL(M2,norma,1,j) M2 = ∆ABsi norma > 0 M1 = ∆A

-1AM1 ← PDSCAL(M1,1/norma,1,j)

[ Q,,R,Π ] ← PDGEQPF(M2) M QR

n p p2 0T ∏ =

���

�� �

− ,,

M1 ← PDQPP**(Π,M1 ) M1 ← ΠM1

M1 ← PDTRMM( 'Right', 'Upper', 'Transpose',) M1 T ← M1

TR T

[ U, Σ, V T] ← PDGESVD(M1)Σ

0 1m p p

U M V−

���

�� � =

,

T

V ← PDORMQR(V,Q) V T ← V TQ

Algoritmo 21: Implementación ScaLAPACK del método de Drmac.

160

Método de Drmac con ScaLAPACK

El algoritmo 21 hace uso de la rutina PDQPP que no forma parte del ScaLAPACK. Ha sidodesarrollada como parte de la libreria Parallel Library for Control (PLIC) [82], y se muestra comoalgoritmo 22.

w(1:n)=1:n (índices reales)para j=1, ..., n

si el pivotamiento es necesarioip ← posición global del pivote (obtenida de w)lo distribuyeintercambia los elementos j e ip de wintercambia las columnas j e ip de la matriz

Algoritmo 22: : Rutina PDQPP.

6.3.3. Resultados experimentales.

6.3.3.1. Resultados experimentales en el Power Challenge y conclusiones.

Las tablas 112, 113, 114 y 115 y las figuras 135, 136, 137 y 138 muestran los resultadosobtenidos en la ejecución del algoritmo de Drmac en el Power Challenge. El comportamiento de estealgoritmo en esta arquitectura es idéntico al del algoritmo de Golub.

Tamaño 1 2 3 4 5 6 8 10120 0.39 0.37 0.39 0.39 0.43 0.43 0.46 0.50240 2.05 1.47 1.34 1.22 1.29 1.28 1.23 1.34360 6.10 3.82 3.14 2.80 2.81 2.60 2.54 2.65480 23.41 9.32 7.00 5.36 5.16 4.76 4.35 4.48600 52.73 18.00 11.24 9.42 8.56 7.91 7.02 6.91720 107.90 43.51 22.97 14.83 13.56 12.21 10.52 10.37

1080 392.40 184.80 123.30 86.21 55.94 45.20 30.81 27.041440 1116.00 519.20 365.60 301.00 203.90 162.80 120.10 92.661800 2276.00 1056.00 736.70 592.20 418.50 357.40 293.20 232.102160 4224.00 1869.00 1273.00 963.60 814.30 710.40 568.80 518.602400 5106.00 2713.00 1895.00 1357.00 1154.00 998.80 837.70 747.602880 9932.00 4611.00 3157.00 2459.00 2086.00 1802.00 1507.00 1364.003000 10980.00 5427.00 3728.00 2840.00 2324.00 2234.00 1697.00 1530.003240 19190.00 8526.00 5270.00 3801.00 3029.00 2619.00 2154.00 1934.00

Tabla 112: Tiempos de ejecución del algoritmo de Drmac.

161

Computación de la PSVD

Tamaño 1 2 3 4 5 6 8 10120 105.00 112.00 107.00 106.00 95.00 95.00 90.00 82.00240 161.00 226.00 247.00 271.00 257.00 259.00 269.00 247.00360 183.00 293.00 356.00 400.00 397.00 430.00 440.00 422.00480 113.00 284.00 379.00 494.00 514.00 558.00 609.00 592.00600 98.00 288.00 461.00 550.00 605.00 655.00 738.00 750.00720 83.00 205.00 389.00 604.00 660.00 733.00 851.00 863.00

1080 77.00 163.00 245.00 350.00 540.00 668.00 981.00 1118.001440 64.00 138.00 196.00 238.00 351.00 440.00 596.00 773.001800 61.00 132.00 189.00 236.00 334.00 391.00 477.00 603.002160 57.00 129.00 189.00 251.00 297.00 340.00 425.00 466.002400 64.00 122.00 175.00 244.00 287.00 332.00 396.00 443.002880 57.00 124.00 181.00 233.00 274.00 318.00 380.00 420.003000 59.00 119.00 173.00 228.00 278.00 290.00 381.00 423.003240 42.00 95.00 154.00 214.00 269.00 311.00 378.00 422.00

Tabla 113: Prestaciones del algoritmo de Drmac.

Tamaño 2 3 4 5 6 8 10120 1.06 1.01 1.01 0.90 0.91 0.86 0.78240 1.39 1.52 1.67 1.59 1.60 1.66 1.52360 1.59 1.94 2.18 2.16 2.34 2.40 2.30480 2.51 3.34 4.36 4.53 4.92 5.37 5.22600 2.92 4.69 5.59 6.15 6.66 7.50 7.62720 2.47 4.69 7.27 7.95 8.83 10.25 10.40

1080 2.12 3.18 4.55 7.01 8.68 12.73 14.511440 2.14 3.05 3.70 5.47 6.85 9.29 12.041800 2.15 3.08 3.84 5.43 6.36 7.76 9.802160 2.26 3.31 4.38 5.18 5.94 7.42 8.142400 1.88 2.69 3.76 4.42 5.11 6.09 6.822880 2.15 3.14 4.03 4.76 5.51 6.59 7.283000 2.02 2.94 3.86 4.72 4.91 6.47 7.173240 2.25 3.64 5.04 6.33 7.32 8.90 9.92

Tabla 114: Incremento de velocidad del algoritmo de Drmac.

162

Método de Drmac con ScaLAPACK

Tamaño 2 3 4 5 6 8 10120 0.53 0.33 0.25 0.18 0.15 0.10 0.07240 0.69 0.50 0.41 0.31 0.26 0.20 0.15360 0.79 0.64 0.54 0.43 0.39 0.30 0.23480 1.25 1.11 1.09 0.90 0.82 0.67 0.52600 1.46 1.56 1.39 1.23 1.11 0.93 0.76720 1.23 1.56 1.81 1.59 1.47 1.28 1.04

1080 1.06 1.06 1.13 1.40 1.44 1.59 1.451440 1.07 1.01 0.92 1.09 1.14 1.16 1.201800 1.07 1.02 0.96 1.08 1.06 0.97 0.982160 1.13 1.10 1.09 1.03 0.99 0.92 0.812400 0.94 0.89 0.94 0.88 0.85 0.76 0.682880 1.07 1.04 1.00 0.95 0.91 0.82 0.723000 1.01 0.98 0.96 0.94 0.81 0.80 0.713240 1.12 1.21 1.26 1.26 1.22 1.11 0.99

Tabla 115: Eficiencia del algoritmo de Drmac.

�,� ��� �� ����� ����� ���� � ����������/�"����� �

����� ��������� ��� � �!����� �����

$�- )

)

)*$

)*$�$

) $�$�$

)*$�$�$�$

)*$�$�$�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ���� � ��� ���������� � ��������/��� ��� �

����� ��������� ��� � �!����� �����

$

%�$�$

&$�$

'�$�$

(�$�$

)*$�$�$

)*%�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

� �������� ���������� � ��� ����� ��� ����� ����� ���� � ���������/��� ��� �

���������� ���� ��� � �!�"��� �����

$

)*$

)��

$ )*$�$�$ %�$�$�$ ��$�$�$

����� ��� ������ � ����� ����� ���� � ������ ��� �"����� �

�������������� �������!����� �����

$

$�- �

)

) - �

%

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 135, 136, 137 y 138: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo de Drmac en el Power Challenge.

6.3.3.2. Resultados experimentales en el Cluster de PCs y conclusiones.

Las tablas 116, 117, 118 y 119 y las figuras 139, 140, 141 y 142 muestran los resultadosobtenidos en la ejecución del algoritmo de Drmac en el cluster de PCs. Se repite de nuevo el problema

163

Computación de la PSVD

de la insuficiente memoria por procesador. Cuando no se ha podido ejecutar correctamente elprograma se ha indicado con "--" y los incrementos de velocidad y las eficiencias correspondientes sehan indicado con "*" y calculado como se explicó en la página 144.

Tamaño 1 2 3 4 5 6 8 10120 0.52 0.54 0.49 0.50 0.50 0.56 0.59 0.66240 4.42 2.33 2.14 1.99 2.19 2.10 2.05 2.26360 16.26 7.65 5.88 5.07 5.02 4.70 4.49 4.75480 38.15 20.48 15.27 12.16 10.88 10.14 8.20 8.32600 85.62 44.49 26.35 20.78 18.06 16.29 14.10 13.39720 147.10 79.80 55.80 44.48 34.54 27.45 22.47 21.47

1080 452.60 223.80 162.80 115.70 96.79 82.63 66.48 61.091440 -- -- -- 286.60 242.10 207.90 168.40 141.601800 -- -- -- 526.30 432.10 376.10 282.70 231.502160 -- -- -- 910.30 746.70 637.70 490.90 432.602400 -- -- -- 1216.00 1006.00 853.50 664.80 558.302880 -- -- -- -- -- 1421.00 1097.00 943.103000 -- -- -- -- -- -- 1256.00 1057.003240 -- -- -- -- -- -- 1577.00 1301.00

Tabla 116: Tiempos de ejecución del algoritmo de Drmac.

Al igual que en el caso del algoritmo de Golub estamos ante unos resultados excelentesatribuibles a la excelente implementación del ScaLAPACK.

Tamaño 1 2 3 4 5 6 8 10120 80.00 77.00 84.00 82.00 82.00 73.00 70.00 63.00240 75.00 142.00 155.00 167.00 151.00 157.00 161.00 146.00360 68.00 146.00 190.00 220.00 223.00 238.00 249.00 235.00480 69.00 129.00 173.00 218.00 243.00 261.00 323.00 318.00600 60.00 116.00 196.00 249.00 287.00 318.00 367.00 387.00720 60.00 112.00 160.00 201.00 259.00 326.00 398.00 417.00

1080 66.00 135.00 185.00 261.00 312.00 365.00 454.00 494.001440 -- -- -- 250.00 296.00 344.00 425.00 506.001800 -- -- -- 265.00 323.00 372.00 495.00 604.002160 -- -- -- 265.00 323.00 379.00 492.00 559.002400 -- -- -- 272.00 329.00 388.00 499.00 594.002880 -- -- -- -- -- 403.00 522.00 607.003000 -- -- -- -- -- -- 515.00 613.003240 -- -- -- -- -- -- 517.00 627.00

Tabla 117: Prestaciones del algoritmo de Drmac.

164

Método de Drmac con ScaLAPACK

Tamaño 2 3 4 5 6 8 10120 0.96 1.05 1.03 1.03 0.91 0.88 0.78240 1.89 2.06 2.22 2.01 2.10 2.15 1.95360 2.12 2.76 3.20 3.23 3.46 3.62 3.42480 1.86 2.49 3.13 3.50 3.76 4.65 4.58600 1.92 3.24 4.12 4.74 5.25 6.07 6.39720 1.84 2.63 3.30 4.25 5.35 6.54 6.85

1080 2.02 2.78 3.91 4.67 5.47 6.80 7.401440 -- -- -- *4.73 *5.51 *6.80 *8.091800 -- -- -- *4.87 *5.59 *7.44 *9.092160 -- -- -- *4.87 *5.70 *7.41 *8.412400 -- -- -- *4.83 *5.69 *7.31 *8.712880 -- -- -- -- -- *7.77 *9.043000 -- -- -- -- -- -- *9.503240 -- -- -- -- -- -- *9.69

Tabla 118: Incremento de velocidad del algoritmo de Drmac.

Tamaño 2 3 4 5 6 8 10120 0.48 0.35 0.25 0.20 0.15 0.11 0.07240 0.94 0.68 0.55 0.40 0.35 0.26 0.19360 1.06 0.92 0.80 0.64 0.57 0.45 0.34480 0.93 0.83 0.78 0.70 0.62 0.58 0.45600 0.96 1.08 1.03 0.94 0.87 0.75 0.63720 0.92 0.87 0.82 0.85 0.89 0.81 0.68

1080 1.01 0.92 0.97 0.93 0.91 0.85 0.741440 -- -- -- *0.94 *0.91 *0.85 *0.801800 -- -- -- *0.97 *0.93 *0.93 *0.902160 -- -- -- *0.97 *0.95 *0.92 *0.842400 -- -- -- *0.96 *0.94 *0.91 *0.872880 -- -- -- -- -- *0.97 *0.903000 -- -- -- -- -- -- *0.953240 -- -- -- -- -- -- *0.96

Tabla 119: Eficiencia del algoritmo de Drmac.

�,� ��� �� � � ��!����� ���,��� ��� �

����� ���� ���� ��� ��� �"��� �����

$�- )

)

)*$

) $�$

)*$�$�$

)*$�$�$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

� ��� ���� � � ��!����� ���/��� ��� �

����� ���� ���� ��� ��� �"��� �����

$)*$�$%�$�$��$�$&�$�$��$�$'�$�$��$�$

$ )*$�$�$ %�$�$�$ ��$�$�$

165

Computación de la PSVD

� ����"�������� � �� ����� ���� ��� � � ��!����� ���/�"���!� �

�������������� ��� � �!�"�#� �����

$

%

&

'

(

)*$

$ )*$�$�$ %�$�$�$ ��$�$�$

��� � ��� ������ � � � ��!� �� ���/� ����� �

����� ��������� ������� �"��� �����

$

$- %

$- &

$- '

$- (

)

)!- %

$ )*$�$�$ %�$�$�$ ��$�$�$

)%�

&�

'()*$

Figuras 139, 140, 141 y 142: Tiempo de ejecución, Prestaciones, Incremento de velocidad yEficiencia del algoritmo de Drmac en el Cluster de PCs.

También en esta arquitectura la linealidad que muestra la figura 140 nos invita a calcular laescalabilidad del algoritmo, ejecutándolo en distintos procesadores con una cantidad de datos fija porprocesador. Las tablas 120, 121 y 122 y las figuras 143 y 144 muestran los tiempos de ejecución, lasprestaciones y la eficiencia cuando el tamaño de los datos permanece constante por procesador, paralos casos 500x500 y 1000x1000. Los resultados tienen una gran linealidad.

Tamaño 1 2 4 8 16 32500 41.45 60.83 92.47 145.20 237.70 389.60

1000 370.30 489.90 733.60 1057.00 1603.00 2433.00

Tabla 120: Escalabilidad del algoritmo de Drmac: Tiempos de ejecución.

Tamaño 1 2 4 8 16 32500 72.00 69.00 64.00 58.00 50.00 43.00

1000 64.00 69.00 65.00 64.00 59.00 55.00

Tabla 121: Escalabilidad del algoritmo de Drmac: Prestaciones.

Tamaño 2 4 8 16 32500 0.96 0.89 0.80 0.69 0.60

1000 1.06 1.00 0.99 0.92 0.86

Tabla 122: Escalabilidad del algoritmo de Drmac: Eficiencia.

� ��� ���� � � ��!����� ���/��� ��� �

��������������������!�

$)*$%�$��$&�$��$'�$��$(�$

$ ) $ %�$ ��$ &�$

����� �� ����� � � � ��!����� ���/� � ��� �

���"��������������"���

$

$- %

$- &

$- '

$- (

)

)!- %

$ )*$ %�$ ��$ &�$

��$�$) $�$�$

166

Método de Drmac con ScaLAPACK

Figuras 143, y 144: Escalabilidad del algoritmo de Drmac en el Cluster de PCs.

6.3.4. Conclusiones.

Hemos realizado una implementación paralela del algoritmo de Drmac utilizando ScaLAPACKen dos arquitecturas, el Power Challenge y un cluster de PCs.

Los resultados obtenidos son muy similares a los ofrecidos por el algoritmo de Golub (página159). En ambas arquitecturas se ha observado un buen comportamiento al aumentar el número deprocesadores y el tamaño de las matrices, siempre con prestaciones elevadas. Como en aquel caso, estacarácterística es relevente en el caso del cluster de PCs, que alcanza, para matrices grandes, mayoresprestaciones que el Power Challenge.

Este método es una alternativa al de Golub y requiere un esfuerzo de programaciónconsiderablemente menor, pues casi todas las rutinas empleadas están realizadas ya en ScaLAPACKal basarse en la SVD de una matriz. No obstante, el método está desarrollado sólo para dos matrices yrequeriría un considerable trabajo matemático su extensión a tres o más matrices.

��������� � ���)��% ������&� ��� � �� � �� ��������

Hemos desarrollado diversos algoritmos para la computación de la PSVD basados en diferentesmétodos. Una comparación de los mismos no es fácil de hacer de modo general. Se han empleadoarquitecturas diversas que responden de forma diferente a los métodos y herramientas de programaciónque son los verdaderamente distintos.

Para la comparación sólo podernos ceñirnos a los resultados experimentales obtenidos. Lafigura 145 nos muestra el tiempo de ejecución de cuatro métodos: Kogbetiliantz par impar por bloquesimplementado mediante el paradigma de programación para memoria compartida, Kogbetiliantzimplementado en memoria distribuida mediante paso de mensajes usando PVM y los métodos deGolub y Drmac implementados mediante ScaLAPACK. La figura presenta los tiempos del cálculo delos valores singulares, sin vectores singulares. La arquitectura elegida es el Power Challenge, pues esla máquina en la que se han podido ensayar todas las implementaciones.

� ��� ����"����� �������� ����� � ��� ��� ����� ����� ������)*$������������!������"���

++��� � ����� ����������� ������ �������

����� ��������� ��� � �!����� �����

$

%�$�$�$

&$�$�$

'�$�$�$

(�$�$�$

)*$�$�$�$

)*%�$�$�$

) &$�$�$

$ ��$�$ )*$�$�$ )��$�$ %�$�$�$ %���$�$ ��$�$�$

� ��� ��!�"� � ���� � ��� � � �� ����� ��� ��0������ ��� ��!�"� � ���� � ���������� ������������ � � �� ��� � ��/��� ���

167

Computación de la PSVD

Figura 145: Comparación de los distintos métodos e implementaciones (sólo valores singulares).

La figura 146 muestra los tiempos de ejecuión de los mismos métodos pero cuando se computantambién los vectores singulares.

� ��� ��������� �������� ��� � � ��� ��� ����������� ������)*$������������ ����������

����� ���� �� � ��� ���!����� �����

$

��$�$�$

) $�$�$�$

)��$�$�$

%�$�$�$�$

%���$�$�$

��$�$�$�$

$ ��$�$ )*$�$�$ )���$�$ %�$�$�$ % ��$�$ ��$�$�$

� ��� ��!�"� � ����� ������,� � �������� ��� ��0������ ��� ��!�"� � ����� �������� ��� ������������ � � �� ��� � ��/�"�����

Figura 146: Comparación de los distintos métodos e implementaciones.

En ambos casos el comportamiento es similar. Los métodos de Golub y Drmac son claramentemejores, lo que se evidencia especialmente a medida que crece el tamaño de las matrices. Además enambos métodos se parte de una matriz completa, no triangular, mientras que en Kogbetliantz partimosde unas matrices previamente triangulares.

Para el caso de sólo valores singulares, la implementación con PVM muestra un mejorcomportamiento que la implementación sobre memoria compartida, alcanzando unas prestaciones tanelevadas como las conseguidas por ScaLAPACK. Pero aún así el mayor coste del algoritmo deKogbetliantz hace que no se pueda comparar con los otros dos.

7. Conclusiones y líneas futuras.

Hemos realizado el diseño y la programación de diversos algoritmos paralelos para lacomputación de la PSVD en arquitecturas paralelas con memoria compartida y en arquitecturas conmemoria distribuida. Hemos ensayado diversos paradigmas de programación, concretamente laprogramación específica para memoria compartida, el paso de mensajes explícito y la libreríaScaLAPACK. Las conclusiones parciales de los distintos métodos han sido expuestas en los distintoscapítulos, páginas 72, 75, 86, 89, 126, 127, 127, 138, 152, 155, 161 y 163 e intentaremos resumirlasahora desde un punto de vista global.

Henos experimentado tres algoritmos para realizar la descomposición en Valores Singulares delproducto de dos matrices. El primero de ellos, el método de Kogbetliantz es una variante del método deJacobi, basado en la aplicación de rotaciones. Su realización secuencial partiendo de cero no escostosa, aunque suponemos que las matrices están en forma triangular. Pero al mismo tiempo el uso derotaciones implica necesariamente operaciones escasamente optimizables y más si tenemos en cuenta

168

Conclusiones

que no podemos emplear ninguna librería. La realización paralela del método ya no es tan sencilla yaquí se nota más el hecho de no poder utilizar las librerías. El método en sí proporciona una buenaprecisión en los resultados, aunque su velocidad de convergencia es relativamente pobre.

Frente al método de Kogbetliantz, el método de Golub es matemática y algorítmicamente máscomplejo y más costoso de implementar. No obstante la posibilidad de usar BLAS 2 en el proceso debidiagonalización implícita convierte las implementaciones en más eficientes y no tan complejas comolo serían a priori, al disponer de librerías que realizan gran parte de las operaciones implicadas. Unavez realizada la bidiagonalización, realizamos la SVD de la bidiagonal mediante cualquiera de loscomplejos métodos disponibles (Golub, Demel, Fernando) que también están implementados enlibrerías, debido a su gran rendimiento. Como conclusión, si se dispone de LAPACK, o en el casoparalelo de ScaLAPACK, la implementación es mucho menos costosa y los rendimientos que seobtienen son excelentes. En la misma línea, el algoritmo de Drmac es sencillo de realizar empleandolas librerías estándar y ofrece unos resultados excelentes. La única particularidad es su difícilextensión al caso de más de dos matrices.

El resultado es pues un tanto paradójico. Los algoritmos complejos (Golub y Drmac) tienengran parte de su código implementado en ScaLAPACK, de modo que su implementación final ha sidomás sencilla y elegante que la de Kogbetliantz. Ofrecen, además, mejor rendimiento algorítmico apriori que este último, hecho reforzado por la calidad de la implementación de las subrutinas básicasdel ScaLAPACK y que produce diferencias substanciales en los tiempos de ejecución reflejadas en lasfiguras 145 y 146.

No obstante, la implementación del método de Kogbetliantz nos ha permitido ensayar diferentesmetodologías de programación y poder compararlas, no tanto en cuanto a resultados, sino desde elpunto de vista del desarrollador. Como explicabamos en la página 149, la programación en memoriacompartida está fuertemente ligada al nivel de paralelización y optimización que el compilador seacapaz de realizar. Normalmente requiere un control manual por parte del programador, pues losmétodos automáticos son excesivamente conservadores. Este modelo de programación ha dado buenosresultados en el Alliant, pero ha fracasado en el Power Challenge, donde las prestaciones con más deun procesador no son comparables a las alcanzadas en un solo procesador, gracias a la optimización,para matrices de menos de 1000x1000 elementos.

Frente a este modo de programar, la programación mediante paso de mensajes, que hemosrealizado usando la librería PVM, nos proporciona un mayor control sobre el código generado. Elinconveniente es un mayor esfuerzo en la programación. La penalización en el rendimiento introducidapor las comunicaciones, la dificultad para disponer de los diferentes datos en los distintos procesadoresy la sincronización de tareas son elementos que deben ser tenidos en cuenta en este paradigma deprogramación. Los buenos resultados obtenidos en la computación de los valores singulares en lasdistintas arquitecturas muestran que el esfuerzo de programación se ve recompensado por losresultados. No obstante cuando hemos introducido la computación de los vectores singulares siguiendolos mismos esquemas, los resultados nos indican que nuestros algoritmos requieren una revisión.

La librería ScaLAPACK no contiene rutinas paralelas para calcular rotaciones, puesto que setrata de una librería orientada al trabajo paralelo buscando la actuación por bloques. Estacaracterística hace que no sea directamente implementable el método de Kogbetliantz medianteScaLAPACK. Hemos desarrollado la implementación de una subrutina de aplicación de rotacionescompatible con ScaLAPACK, pero su directa aplicación no ha dado unos resultados mínimamentesatisfactorios, por lo que no ha sido incluida en este trabajo.

En cambio ScaLAPACK da un buen soporte para la implementación de los métodos de Golub yDrmac, donde el proceso de bidiagonalización (implícita en el caso del método de Golub) se realiza

169

Conclusiones

mediante reflexiones de Householder que sí encajan en el diseño de ScaLAPACK. Y los resultadosson, como hemos comentado, doblemente efectivos, tanto por la rápida convergencia de los métodos,como por la buena implementación de la librería en las diversas arquitecturas ensayadas.

La metodología de programación mediante ScaLAPACK está a medio camino entre las dosmetodologías expuestas. La programación se realiza de forma próxima a la programación secuencialcon LAPACK, pero requiere una preparación en el que hay que tener en cuenta aspectos de lascomunicaciones que se realizan mayormente de forma implícita, aunque siempre hay que tener encuenta la disponibilidad de los datos en los distintos procesadores. En general la programaciónmediante ScaLAPACK permite un desarrollo rápido de las realizaciones, pero requiere unconocimiento suficiente de la librería, que no se adquiere de forma inmediata.

Tras realizar los distintos métodos, hemos apreciado que algunos aspectos pueden requerir untrabajo posterior. Entre ellos ponemos especial atención en algunos ya mencionados:

- El estudio de un algoritmo tipo Kogbeliantz que consiga buenos resultados en el cálculo de losVectores Singulares en la implementación mediante paso de mensajes con PVM.

- La posibilidad de implementar el método de Kogbetliantz mediante ScaLAPACK.

El interés de estos desarrollos sólo existe en la medida en que haya un interés en seguirdesarrollando implementaciones del método de Kogbetliantz. A la vista de la mejor convergencia de losmétodos basados en la SVD de una bidiagonal, el interés de estos estudios no es excesivamenterelevante.

Más interesante nos parece la posibilidad de mejorar la implementación del método Golub.Hemos realizado una implementación a nivel BLAS 2. Una realización a nivel BLAS 3 puede serinteresante en tanto que en ScaLAPACK existen rutinas para bidiagonalizar una matriz tanto enBLAS 3 como en BLAS 2, estas últimas empleadas por las primeras. El desarrollo del algoritmoBLAS 3 es considerablemente más complejo que el realizado para BLAS 2 y es muy interesante.

Otra vía importante de desarrollo de esta tesis es la extensión de los algoritmos a lacomputación de la Descomposición en Valores Singulares de más de dos matrices. En este sentido, yaexpusimos en la página 6 un modelo general para enunciar dicha descomposición. Para el caso de tresmatrices, Zha ha propone en [94] una extensión del algoritmo de Kogbetliantz para calcular la RSVD.En [44] Golub, Sφlna y Van Dooren desarrollan la bidiagonalización implícita para tres matrices y sedesprende claramente cómo extender el método para más matrices. Disponemos, pues, de dosalgoritmos extensibles sobre los que extender el trabajo desarrollado en la presente tesis.

8. Bibliografía.

[1] Alliant Computer System Corp. FXI Series architecture manual. Alliant Computer SystemCorp. Documentation, Littleton, EEUU, 1987.

[2] Alliant Computer System Corp. FXI Series common library. Alliant Computer System Corp.Documentation, Littleton, EEUU, 1988.

[3] Alliant Computer Systems Corporation: FX/Fortran Language Manual. Alliant ComputerSystems Corporation (1989)

170

Conclusiones

[4] Amestoy, P., Berger, P. y Daydé, M.: Programming shared memory computers. CERFACS(1992).

[5] E. Anderson et al. LAPACK users’ guide. SIAM, 1992.

[6] S. Barnett. Matrices in control theory. Van Nostrand Reinhold, Londres, Reino Unido, 1975.

[7] P. Benner, R. Byers. Step size control for Newton’s method applied to algebraic Riccatiequations. 5th SIAM Conference on Applied Linear Algebra, 1994.

[8] Bojanczyk, A., Ewerbring, L., Luk, F. y van Dooren, P.: An accurate product SVD algorithm.Signal Processing, Vol. 25, pp. 189-201 (1991).

[9] Brent, R. y Luk, F.: The solution of singular value and symmetric eigenvalue problems onmutiprocessor arrays. SIAM J. Sci. Stat. Comput., Vol. 6, pp. 69-84 (1985).

[10] Brent, R., Luk, F. y van Loan, C. Computation of the singular value decomposition usingmesh connected processors. J. VLSI. Comput. Systems, Vol 1 (1985).

[11] Brent, R., Luk, F. y van Loan, C.: Computation of the generalized singular valuedecomposition using mesh connected processors. Proc. SPIE, Vol. 431, Real time signalprocessing VI, pp. 66-71 (1983).

[12] Chan, T.F.: An Improved Algorithm for Computing the Singular Value Decomposition. ACMTrans. Math. Soft. 8, pp. 72-83 (1982).

[13] Claver, J: Tesis Doctoral. Depto. SIC, Univ. Politécnica de Valencia (1998).

[14] Claver, J., Mollar, M., Hernández, V.: Parallel Computation of the SVD of a Matrix Product.Lecture Notes on CS, 1697, Springer-Verlag, pp. 388-395 (1999).

[15] W. J. Dally, C. L. Seitz. Deadlock-free message routing in multiprocessor interconnectionnetworks. IEEE Trans. on Computers, 36, pp. 547-553 (1987).

[16] W. J. Dally. Virtual-channel flow control. IEEE Trans. on Parallel and Distributed Systems, 3,pp. 194-205 (1992).

[17] Datta, B.: Numerical Linear Algebra and Applications. Brooks/Cole Publishing Company(1995).

[18] Demmel, J. y Kahan, W.: Accurate Singular Values of Bidiagonal Matrices. SIAM J. Sci. Stat.Comp., Vol 11 nº 5 (1990).

[19] J. J. Dongarra et al. A set of level 3 BLAS basic linear algebra subprograms. Tech. ReportANL-MCS-TM-SS, Dept. of Computer Science, Argonne National Laboratory, 1988.

[20] J. J. Dongarra et al. An extended set of Fortran basic linear algebra subprograms. ACMTrans. on Mathematical Software, 14, pp. 1-17, 1988.

[21] J. J. Dongarra, R. van de Gein, R. Whaley. Two dimensional basic linear algebracommunication subprograms. Computer Science Dept. Technical Report CS91-138,University of Tennessee, 1991 (Lapack Working Note #37).

171

Conclusiones

[22] De Moor, B. y Golub, G. H.: Generalized Singular Value Decompositions: A proposal for astandardized nomenclature. Num. Anal. Proj. Report 89-04, Comput. Sci. Dept., StanfordUniversity (1989).

[23] De Moor, B. y Zha, H.: A tree of generalizations of the ordinary singular valuedecomposition. ESAT-SISTA report 1990-11, Department of Electrical Engineering,Katholieke Universiteit Leuven, Belgium (1990).

[24] De Moor, B.: Generalizations of the OSVD, structure, properties and applications. ESAT-SISTA Report 1990-13, Department of Electrical Engineering, Katholieke Universiteit Leuven,Belgium (1990).

[25] De Moor, B.: On the structure and geometry of the PSVD. Num. Anal. Project, NA-89-05,Comput. Sci. Dept., Stanford University (1989).

[26] K. Dowd. High performance computing. O'Reilly and Ass., Sebastopol, EEUU, 1993.

[27] Drmac, Z: Accurate Computation of the product-induced singular value decomposition withapplications. SIAM J. Numer. Anal., Vol 35, nº 5, pp. 1969-1994, (1998).

[28] Ewerbring, L. y Luk, F.: Canonical correlations and generalized SVD: Applications and newalgorithms. J. Comput. Appl. Math., Vol. 27, pp. 37-52 (1989).

[29] K. V. Fernando, H. Nicholson. On the Cross-Gramian symmetric MIMO systems. IEEE Trans.on Circ. & Syst., Vol. 32, Nº 5, pp. 487-489, 1975

[30] Fernando, K.: Global convergence of the cyclic Kogbetliantz method. NAG Technical Report,TR6/86, Oxford (1986).

[31] K. V. Fernando, S. J. Hammarling,. A product induced singular value decomposition (PSVD)for two matrices and balanced realization, in B.N. Datta, C.R. Johnson, M.A. Kaashoek, R.J.Plemmons, and E.D. Sontag, Eds., Linear Algebra in Signals, Systems, and Control (SIAM,PA, Philadelphia), pp. 128-140, 1988

[32] Fernando, K. y Hammarling, S.: A generalized singular value decomposition for a product oftwo matrices and balanced realization. NAG Technical Report TR1/87, Oxford (1987).

[33] Fernando, K. y Parlett, B.: Accurate Singular Value and Differential qd Algorithms. Numer.Math. 67 (1994).

[34] M. J. Flynn. Very high-speed computing systems. Proceedings IEEE, 54, pp. 19011909, 1966.

[35] L. Fortuna, A. Gallo, C. Guglielmino, G. Nunneri. On the solution of a non-linear matrixequation for MIMO symmetric realizations. Syst. Contr. Lett., Vol. 11, pp. 79-82, 1988.

[36] L Fortuna, G. Nunnari, A. Gallo. Model order reduction techniques with applications inelectrical engineering. (Springer-Verlag, 1992).

[37] Geist, A., Beguelin, A., et al.: PVM3 User's Guide and Reference Manual. ORNL/TM-12187,Oak Ridge National Laboratory, Oak Ridge, Tennesse 3781 (1994).

[38] K. Glover. All optimal Hankel-norm approximations of linear multivariable systems and their

L∞ -error bounds, International Journal of Control, Vol. 39, Nº 6, pp. 1115-1193, 1984.

172

Conclusiones

[39] Gautier, M. et all.: Identification of the minimum inertial parameters of robots, Proc. of IEEEInt. Conf. on Robotics and Aut (1989)..

[40] Gautier, M. et all.: Exciting Trajectories for the Identification of Base Inertial Parameters ofRobots, The International Journal of Robotics Research, Vol 11, No. 4, MIT, (1992).

[41] Gautier, M. et all.: Identification of Inertial and Drive Gain Parameters of Robots, Proc. 33rdConf. Decision and Control (1994).

[42] Golub, G. y Kahan, W.: Calculation of the singular values and the pseudoinverse of a matrix,SIAM J. Numer. Anal. nº 2, pp. 205-224 (1965).

[43] Golub, G. y van Loan, C.: Matrix computations. North Oxford Academic, Oxford (1989).

[44] Golub, G., Sφlna, K. y Van Dooren, P: Computing the SVD of a general matrixproduct/quotient. SIAM J. on Matrix Anal. and Appl. (1997).

[45] W. Gropp, E. Lusk, A. Skjellum. Using MPI. Portable parallel programming with themessage-passing interface. (The MIT Press, Cambridge, EEUU, 1994).

[46] S. J. Hammarling. Newton’s method for solving the algebraic Riccati equation. NPL ReportDITC 12/82, National Physical Laboratory, Division of Information Technology andComputing, 1982.

[47] Heath, M., Laub, A., Paige, C. y Ward, R.: Computing the SVD of a product of two matrices.SIAM J. Sci. Stat. Comput., 7, pp. 1147-1159 (1986).

[48] C.A.R. Hoare. Communicating sequential processes. CACM, 21, pp. 666-667, 1978.

[49] K. Hwang, F. A. Briggs. Computer architecture and parallel processing. (Mc Graw-Hill BookCompany, New York, EEUU, 1984).

[50] INMOS Limited: ANSI C toolset language reference (1990).

[51] INMOS Limited: ANSI C toolset user manual (1990).

[52] Jessup, E. R. y Sorensen, D. C.: A Parallel Algorithm for Computing the Singular ValueDecomposition of a Matrix. Argonne National Laboratory, Technical Memorandum No. 102(1987).

[53] E. A. Jonckheere, L. M. Silverman. A new set of invariants for linear systems - Applications toreduced-order compensator design. IEEE Trans. on Automatic Control, Vol. 28, pp.953-964,1983.

[54] P. T. Kabamba. Balanced gains and their significance for L2 model reduction. IEEE Trans. onAutomatic Control,Vol. 30, Nº 7, pp.690-693, 1985.

[55] T. Kailath. Linear systems. Prentice-Hall Int., Englewood Cliffs, NJ, 1980.

[56] Köckler, N. y Simon, M.: Parallel SVD with cyclic storing. Parallel Comput., Vol. 17, pp. 39-47 (1990).

173

Conclusiones

[57] Kogbetliantz, E.: Solution of linear equations by diagonalization of coefficients matrix. Quart.Appl. Math., 13, pp. 123-132 (1955).

[58] D. L. Kleinmann. On an iterative technique for Riccati equation computations. IEEE Trans.on Automatic Control, AC-13, pp. 114-115, 1968.

[59] V. Kumar. Introduction to parallel computing. (The Benjamin/Cumming PublishingCOMDany, Inc., Redwood City, EEUU, 1994).

[60] A. J. Laub. A Schur method for solving algebraic Riccati equations. IEEE Trans. onAutomatic Control, AC-24, pp. 913-921, 1979.

[61] A. J. Laub. Computation of balancing transformations. Proceedings of the Joint AutomateControl Conference, S. Francisco, Vol. II, 1980.

[62] Laub., A., Heath, M., Paige, C. y Ward, R.: Computation of system balancing transformationsand other applications of simultaneous diagonalization algorithms. IEEE Trans. Aut. Control,Vol. AC-32, No. 2 (1987)

[63] Luk , F.: A triangular processor array for computing singular values. Linear Algebra Appl.,77, pp. 259-273 (1986).

[64] Luk, F. y Park, H.: A proof of convergence for two parallel Jacobi SVD algorithms. IEEETrans. Comput., Vol. 38, pp. 806-811 (1989).

[65] Luk, F.: A parallel method for computing the generalized singular value decomposition.Journal of Parallel and Dist. Comput., Vol. 2, pp. 250-260 (1985).

[66] Megson, G.M. y O'Young, S.: Efficient computation of SVD's for multivariable frequencyresponse on transputer arrays. Rutherfort Appleton Laboratory, RAL-88-066 (1988).

[67] Message Passing Interface Forum: Document for a Standard Message-Passing Interface.Technical Report No. CS-93-214, University of Tennessee (1994).

[68] C. T. Mullis, R. A. Roberts. Synthesis of minimum roundoff noise fixed point digital filters.IEEE Trans. Circ. & Syst., Vol. 23, 1976.

[69] Mollar, M.: Simulador para programación paralela con Parallel C en Transputers. Depto deInformática, Univ. Jaume I (1993).

[70] Mollar, M.: Algoritmos Paralelos para la Computación de los Valores Singulares delProducto de dos Matrices. Trabajo de 6 créditos del programa de Doctorado, Depto. SIC, Univ.Politécnica de Valencia (1994).

[71] Mollar, M.: A Small Parallel C Simulator. Proc. 4th Euromicro Workshop on Par. and Dist.Comp., pp. 123-129 (1996).

[72] Mollar, M., Hernández, V.: Computing the Singular Values of the Product of two Matrices inDistributed Memory Multiprocessors. Proc. 4th Euromicro Workshop on Par. and Dist. Comp.,pp. 15-21 (1996).

[73] Mollar, M., Hernández, V.: A Parallel Implementation of the Singular Value Decomposition ofthe Product of Triangular Matrices. First NicoNet Workshop, Valencia (1998).

174

Conclusiones

[74] Moonen, M. y Vanderwalle, J.: QSVD approach to on- and off-line state-space identification.Int. J. Control, Vol. 5, pp. 1133-1146 (1990).

[75] Moore, B.: Principal component analysis in linear systems: controllability, observability, andmodel reduction. IEEE Trans. Aut. Control, Vol. AC-26, No. 1 (1981).

[76] Paige, C. y Sanders, M.: Towards a generalized singular value decomposition. SIAM J.Numer. Anal., 18 pp., 398-405, (1981).

[77] Paige, C.: Computing the generalized singular value decomposition. SIAM J. Sci. Stat.Comput. Vol. 7, No. 4, p. 1126-1146 (1986).

[78] Park, H. y Ewerbring, L.: An algorithm for the generalized singular value decomposition onmassively parallel computers. Journal of Parallel and Dist. Comput., Vol. 17, pp. 267-276(1993).

[79] Pernebo, L.: Model reduction via balanced state space representations. IEEE Trans. Aut.Control, Vol. AC-27, No. 2 (1982).

[80] R. H. Perrot. Software for paralel computers. Chapman & Hall (1992).

[81] Petkov, P, Christov, N.D. y Konstantinov, M.M: Computational Methods for Linear ControlSystems. Prentice Hall (1991).

[82] Quintana, E.S., Benner, P. y Quintana, G.: A portable subroutine Library for solving LinearControl problems on Distributed Memory Computers. Lecture Notes in Control andInformation Sciencies, 249, Springer Verlag, Berlin (1999).

[83] J. Roberts. Linear model reduction and solution of the algebraic Riccati equation by the use ofthe sign function. Int. Journal of Control, 32, pp. 677-687 (1980).

[84] M. G. Safonov, R. Y. Chiang. A Schur method for balanced-truncation model reduction. IEEETrans. on Automatic Control, Vol. 34, Nº 7, pp. 729-733 (1989).

[85] Silicon Graphics Computer Systems. PowerChallenge Technical Report. Silicon GraphicsComputer Systems Documentation, EEUU (1994).

[86] R. E. Skelton. Dynamic systems control, John Wiley, New York (1988).

[87] M. S. Tombs, I. Pstlehwaite. Truncated balanced realization of a stable non-minimal statespace system. Int. Journal of Control, Vol. 46, pp. 1319-1330 (1987).

[88] Transtech Parallel Sys. Ltd.: Transtech TMB08 PC TRAM motherboard, TMB08MAN0690(1991).

[89] Van Loan, C.: Generalizing the singular value decomposition. SIAM J. Numer. Anal. 13, p.76-83 (1976).

[90] A. Varga. A note on Hammarling’s algorithm for the discrete Lyapunov equation. Systems &Control Latters, North-Holland, Nº 15, pp. 273-275 (1990).

[91] A. Varga. Efficient minimal realization procedure based on balancing. IMACS SymposiumMCTS, Casablanca, pp. 42-47 (1991).

175

Conclusiones

[92] Vidal, A.: Algoritmos Matriciales Paralelos y Arq. Aso. para la Desc. de una Matriz enValores Singulares. Tesis Doctoral, Universidad Politécnica de Valencia (1990).

[93] D. A. Wilson, R. N. Mishra. Optimal reduction of multivariable systems. International Journalof Control, Vol. 29, Nº 2, pp. 267-278 (1979).

[94] Zha, H.: A numerical algorithm for computing the restricted singular value decomposition ofmatrix triplets. Preprint SC 89-1, Konrad-Zuse-Zentrum, Berlin (1989).

[95] Zha, H.: A restricted singular value decomposition of matrix triplets. Preprint SC 89-2,Konrad-Zuse-Zentrum, Berlin (1989).

176