Algoritmos paralelos para la Multiplicación de
Matrices
Ginés David Guerrero Hernández
Universidad de Murcia - UM
Introducción Paralelizar Conclusiones Trabajo Bibliografía
Índice
1 Introducción Importancia Consideraciones Características Secuencial 2 Paralelizar Tipos Secuencial Bloques Cannon Fox DNS 3 Conclusiones 4 Trabajo 5 BibliografíaImportancia de la Multiplicación de Matrices (MM)
Aparece en un gran número de algoritmos en el álgebra lineal (sistemas de ecuaciones, calculo de estructuras,
determinantes...).
Las ideas de optimización pueden ser usadas para otros problemas.
Los algoritmos de la MM son los más estudiados en la computación de altas prestaciones.
Introducción Paralelizar Conclusiones Trabajo Bibliografía Importancia Consideraciones Características Secuencial
Consideraciones iniciales a tener en cuenta
Por simplicidad, todo el tiempo trabajaremos con matrices cuadradas de tamaño n x n.
Consideramos que el número de procesadores de los que disponen las másquinas paralelas es p.
Las matrices a multiplicar serán AyB, ambas tratadas como matrices densas (con pocos 0’s), el resultado lo
almacenaremos en la matrizC.
Tp se corresponde con el tiempo que empleanp para resolver el problema.
En el coste de las comunicaciones el tiempo para transmitir n datos entre dos procesadores conectados es dada por ts+ntw donde ts el el tiempo empleado para establecer la
comunicación y tw es el tiempo que tarda para transmitir un dato.
Características de la MM
Hay diversas características por las que la MM es apropiada para máquinas paralelas:
Cada elemento que se calcula de la matriz resultadoC (C(i,j)) es independiente de todos los demás elementos.
Siguen el modelo SPMD (Single Progam - Multiple Data). La cantidad y el tipo de operaciones a realizar es independiente de los datos mismos.
Regularidad de la organización de los datos y de las operaciones que se realizan sobre los datos.
Introducción Paralelizar Conclusiones Trabajo Bibliografía Importancia Consideraciones Características Secuencial
Algoritmo secuencial
Básicamente está formado por tres bucles for.
Código for (i = 0; i < n; i++) { for (j = 0; i < n; j++) { C[i][j] = 0; for (k = 0; k < n; k++) { C[i][j] += A[i][k] * B[k][j] } } } O(n3).
Tipos de Algoritmos Paralelos
Según en el tipo de máquinas donde vaya a ser ejecutado podemos encontrar:
Algoritmos Paralelos para Multiprocesadores. Simple basado en el secuencial.
Divide y Vencerás recursivo.
Paralelización del método de Strassen. Algoritmos Paralelos para Multicomputadores.
Simple basado en el secuencial. Con particionamiento en bloques. Cannon.
Fox. DNS.
Los algoritmos nuevos que se presentan son los pertenecientes al segundo bloque, por lo que centraremos nuestro estudio en estos.
Introducción Paralelizar Conclusiones Trabajo Bibliografía Tipos Secuencial Bloques Cannon Fox DNS
Algoritmo simple basado en el secuencial
Podemos basarnos en el código secuencial. Es fácilmente paralelizable.
Cada procesador tendrá en memoria un conjunto de filas de la matriz Ay la matriz B por completo.
El uso de memoria es muy ineficiente.
P1 P1 P1 P1 P1 P1 P1 P1 P2 P2 P2 P2 P2 P2 P2 P2 A ∗ P1 P2 B = P1 P1 P1 P1 P1 P1 P1 P1 P2 P2 P2 P2 P2 P2 P2 P2 C
División en Bloques I
Estamos ante una topología lógica en malla de dos
dimensiones, donde p(i,j) el procesador de la filai y columnaj
y que la matrices están dividas en bloques.
Las matrices serán dividas en bloques de tamaño √n p x
n √ p. Cada procesador calculará un bloque de C.
Cada procesador tendrá√p submatrices correspondientes a la fila de bloques de la matriz Ay otras tantas correspondientes a la columna de bloques de la matrizB para así poder calcular un bloque deC.
El uso de memoria, aunque mejor que el algoritmo anterior, sigue siendo ineficiente.
Introducción Paralelizar Conclusiones Trabajo Bibliografía Tipos Secuencial Bloques Cannon Fox DNS
División en Bloques II
Los pasos que sigue el algoritmo son:
1 Inicialmente cada procesador tiene los bloquesA(i,j) yB(i,j) 2 El procesador que está situado en la fila(i,j)envía su bloque
deAa todos los elementos de la filai de la malla, y el bloque deB a todos los elementos de la columnaj.
3 Finalmente se realiza la multiplicación con los bloques de la
fila de bloquesi deAy los bloques de la columnaj de B, para así obtener el bloqueC(i,j).
Tp = n 3 p +logpts +2 n2 √ ptw P1 P1 P2 P2 P3 P3 P4 P4 A ∗ P1 P2 P3 P4 P1 P2 P3 P4 B = P1 P2 P3 P4 C
Algoritmo de Cannon I
Es una versión del anterior algoritmo que hace un uso más eficiente de la memoria.
Nuevamente estamos ante una topología lógica de malla de 2 dimensiones.
Se basa en ir desplazando bloques de la matriz Ahacia el procesador de la izquierda y los de la matrizB hacia el de arriba.
En cada paso un procesador sólo tiene un bloque de Ay otro deB en memoria.
Introducción Paralelizar Conclusiones Trabajo Bibliografía Tipos Secuencial Bloques Cannon Fox DNS
Algoritmo de Cannon II
1 El procesadorp(i,j) tiene los bloquesA(i,j) yB(i,j). 2 El bloque correspondiente a la fila i-ésima deAse envía
cíclicamente al procesador que estái filas a la izquierda en la malla, y la columna j-ésima deBse envía cíclicamente j
columnas hacia arriba. Así pues el bloqueA(i,j) será enviado al
procesador(i,(j+i)mod√p).
3 Cada procesador multiplica su par de bloques.
Repetir √p−1 veces:
4 De igual modo que en el punto 2, cada bloque deAse envía al
procesador que se encuentra a la izquierda en la malla, y cada bloque deBal de arriba.
5 Cada procesador multiplica su nuevo par de bloques, y suma el
resultado al anterior. Tp = n 3 p +2 √ pts+2n 2 √ ptw
Ejemplo I
3 2 0 2 1 4 3 2 1 A ∗ 2 0 2 1 4 1 3 2 4 B = 8 8 8 17 12 21 11 10 12 C Paso 1 Paso 2 3 2 0 2 1 4 3 2 1 A 2 0 2 1 4 1 3 2 4 B 3 2 0 1 4 2 1 3 2 A 2 4 4 1 2 2 3 0 1 B Paso 3 3 2 0 1 4 2 1 3 2 A 2 4 4 1 2 2 3 0 1 B 6 8 0 1 8 4 3 0 2 CIntroducción Paralelizar Conclusiones Trabajo Bibliografía Tipos Secuencial Bloques Cannon Fox DNS
Ejemplo II
Paso 4 2 0 3 4 2 1 3 2 1 A 1 2 2 3 0 1 2 4 4 B 6 8 0 1 8 4 3 0 2 C Paso 5 2 0 3 4 2 1 3 2 1 A 1 2 2 3 0 1 2 4 4 B 8 8 6 13 6 5 9 8 6 CEjemplo III
Paso 4 0 3 2 2 1 4 2 1 3 A 3 0 1 2 4 4 1 2 2 B 8 8 6 13 8 5 9 8 6 C Paso 5 0 3 2 2 1 4 2 1 3 A 3 0 1 2 4 4 1 2 2 B 8 8 8 17 12 21 11 10 12 CIntroducción Paralelizar Conclusiones Trabajo Bibliografía Tipos Secuencial Bloques Cannon Fox DNS
Algoritmo de Fox
En este algoritmo mantiene la filosofía del algoritmo anterior. El algoritmo consiste en los siguientes pasos:
1 El procesadorp(i,j) tiene los bloquesA(i,j) yB(i,j).
Repetir √p:
2 La fila i-ésima de la malla de procesadores recibe el bloque A(i,(i+j)mod√p) en la j-ésima iteración.
3 Multiplicar el bloque recibido deApor el bloque residente de B.
4 Enviar el bloque deB al procesador directamente precedente
en la fila del procesador, y recibir un bloque deB desde el procesador de la fila posterior.
Tp = n 3 p +pts+2 n2 √ ptw
Ejemplo I
3 2 0 2 1 4 3 2 1 A ∗ 2 0 2 1 4 1 3 2 4 B = 8 8 8 17 12 21 11 10 12 C Paso 1 Paso 2 3 2 0 2 1 4 3 2 1 A 2 0 2 1 4 1 3 2 4 B 3 3 3 1 1 1 1 1 1 A 2 0 2 1 4 2 3 2 4 B Paso 3 3 3 3 1 1 1 1 1 1 A 2 0 2 1 4 1 3 2 4 B 6 0 6 1 4 1 3 2 4 CIntroducción Paralelizar Conclusiones Trabajo Bibliografía Tipos Secuencial Bloques Cannon Fox DNS
Ejemplo II
Paso 4 3 3 3 2 2 2 3 3 3 A 1 4 1 3 2 4 2 0 2 B 6 0 6 1 4 1 3 2 4 C Pasos 2 y 3 2 2 2 4 4 4 3 3 3 A 1 4 1 3 2 4 2 0 2 B 8 8 8 13 12 17 9 2 10 CEjemplo III
Paso 4 2 2 2 4 4 4 3 3 3 A 3 2 4 2 0 2 1 4 1 B 8 8 8 13 12 17 9 2 10 C Pasos 2 y 3 0 0 0 2 2 2 2 2 2 A 3 2 4 2 0 2 1 4 1 B 8 8 8 17 12 21 11 10 12 CIntroducción Paralelizar Conclusiones Trabajo Bibliografía Tipos Secuencial Bloques Cannon Fox DNS
Algoritmo DNS I
Usa un particionamiento 3D.
Visualiza el algoritmo de multiplicación de matrices como un cubo, las matrices AyB están en dos caras ortogonales y la matriz C resultante la almacena en otra cara.
Cada nodo en el cubo representa una operación de suma-multiplicación.
Originalmente necesita n x n x n procesadores.
Hay variaciones del algoritmo que permiten llevar a cabo el algoritmo con un menor número de procesadores.
La variación más común usan2≤p≤n3 procesadores. La variación GK usa 1≤p≤n3procesadores.
Algoritmo DNS II
El algoritmo, que puede ser observado gráficamente en las siguientes transparencias, está divido en las siguientes etapas:
1 Los elementos de las matricesAyBson distribuidos en losp
procesadores.
2 Se multiplican los elementos que contiene cada procesador. 3 Se suman todos los resultados parciales (situados a lo largo de
la dimensión k en la posterior figura).
En la versión original realiza el cómputo en un O(logn). En la versión que permite más de un elemento por procesador: Tp = n 3 p + 5 lognp2 +2np3(ts +tw) En la versión GK: Tp = n 3 p + 5 3logpts+ 5 3 n2 p23 ts
Introducción Paralelizar Conclusiones Trabajo Bibliografía Tipos Secuencial Bloques Cannon Fox DNS
Algoritmo DNS III
Algoritmo DNS IV
Introducción Paralelizar Conclusiones Trabajo Bibliografía
Conclusiones
Se puede comprobar que hay gran cantidad de algoritmos creados para realizar de manera lo más óptima posible la multiplicación de matrices.
Además de los algoritmos presentados hay muchos otros (Arreglo Sistólico, Berntsen...).
Muchos de los algoritmos que nos podemos encontrar son variaciones de los estudiados para adaptarlos a un tipo de máquina paralela concreta.
Todos los algoritmos paralelos comparten características comunes:
Adoptan el modelo de procesamiento SPMD.
Asumen que los nodos de procesamiento son homogéneos y aprovechan esta homogeneidad para obtener balance de carga.
Trabajo a realizar
Una vez adquiridos los conocimientos básicos sobre la paralelización de la MM el trabajo que se va a realizar será:
Implementación en MPI: Algoritmo de Cannon. Algoritmo de Fox.
Implementación en OpenMP:
Algoritmo simple a partir del Algoritmo Secuencial. Estudio Teórico-Práctico comparando:
1 Cannon vs Fox. 2 Simple vs Cannon. 3 Simple vs Fox.
Introducción Paralelizar Conclusiones Trabajo Bibliografía
Bibliografía
Ananth Grama, Anshul Gupta, Vipin Kumar, George Karypis.
Introduction to Parallel Computing: Design and Analysis of Algorithms
Ranshul Gupta, Vipin Kumar.
Scalability of Parallel Algorithms for Matrix Multiplication
Zhiao Shi.
Parallel Matrix Multiplication
Karen Walters.