Title: Multiplicaci
1Multiplicación de matrices
- Manuel Sánchez Cuenca
- Manolo Pérez Hernández
2Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
3Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
4Nociones básicas sobre matrices
- Array bidimensional de números
- Matriz n x m ? n filas y m columnas
- Matriz 3 x 4
- 1 3 2 2
- 2 4 6 3
- 2 7 4 5
5Nociones básicas sobre matrices
- Suma de matrices
- Se suman los elementos de la misma posición en
ambas matrices - 1 3 2 3 2 3 4 5 5
- 3 4 1 4 1 2 7 5 3
- 1 1 2 1 2 2 2 3 4
6Nociones básicas sobre matrices
- Multiplicación de matrices
- Sean A (n x l) y B (l x m) dos matrices,
entonces cada elemento cij de la matriz
resultante se calcula como -
7Nociones básicas sobre matrices
- Ej
-
- También se puede multiplicar una matriz por una
constante multiplicando todos los elementos por
dicha constante
8Nociones básicas sobre matrices
- Multiplicación de una matriz por un vector
- Desde el momento que un vector es una matriz con
una solo fila o una columna, podemos usar el
algoritmo de multiplicación de matrices.
Entonces, si el vector B es de la forma n x 1
podemos multiplicarlo por la matriz A (m x n)
como A x B y si el vector A es de la forma 1 x n
podemos multiplicarlo por la matriz B (n x m)
como A x B. -
9Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
10Algoritmo secuencial
- Por simplicidad, todo el tiempo trabajaremos con
matrices cuadradas. - for (i 0 i lt n i)
- for (j 0 i lt n j)
- cij 0
- for (k 0 k lt n k)
- cij aik bkj
-
-
-
- n3 multiplicaciones y n3 sumas ? O (n3)
11Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
12Algoritmo paralelo
- Podemos basarnos en el código secuencial, ya que
los dos bucles externos son independientes en
cada iteración. - Con n procesadores podemos obtener O (n2)
- Con n2 procesadores O (n)
- Estas implementaciones son óptimas en coste, ya
que O (n3) n x O (n2) n2 x O (n) - Estas cálculos no incluyen el coste de las
comunicaciones. -
13Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
14Submatrices
- Si tenemos muchos menos de n procesadores, cada
procesador debe trabajar con un subconjunto de
cada una de las matrices ? submatrices. - Estas submatrices se utilizan como elementos
normales, pero teniendo en cuenta que
utilizaremos el algoritmo de multiplicación de
matrices y de suma de matrices en lugar de la
multiplicación y la suma de números ?
implementación recursiva.
15Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
16Implementación directa
- Con n2 procesadores, cada procesador calcula un
elemento de C, por lo que necesita una fila de A
y una columna de B. - Si usamos submatrices, cada procesador deberá
calcular una submatriz de C.
17Implementación directa
- Análisis de comunicaciones
- Cada uno de los n2 procesadores recibe una fila
de A y una columna de B, y devuelve un elemento - Mediante un broadcast de las dos matrices podemos
ahorrar tiempo, por ejemplo en un bus tenemos -
18Implementación directa
- Análisis de computación
- Cada procesador realiza n multiplicaciones y n
sumas, por lo que tenemos -
-
- Usando una estructura de árbol y n3 procesadores
podemos obtener un tiempo de computación de O
(log n)
19Implementación directa
- Cálculo de c00 para matrices de 4x4 y cálculos en
estructura de árbol - a00 b00 a01 b10 a02 b20 a03 b30
- x x x x
-
-
20Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
21Implementación con submatrices
- En cualquiera de los métodos se pueden sustituir
los elementos de la matriz por submatrices para
reducir el número de procesadores - Con submatrices de m x m y s n/m es como si
tuviésemos matrices de s x s con submatrices de m
x m en lugar de elementos simples.
22Implementación con submatrices
- Análisis de comunicaciones
- Cada uno de los s2 procesadores recibe una fila
de submatrices de A y una columna de submatrices
de B, y devuelve una submatriz
23Implementación con submatrices
- Al aumentar el tamaño de las submatrices (y
disminuir el número de procesadores) el tiempo de
transmitir un mensaje aumenta pero el número de
mensajes disminuye, por lo que es posible
encontrar un valor óptimo del tamaño de la
submatriz. - Además, también es posible hacer un broadcast de
las dos matrices completas.
24Implementación con submatrices
- Análisis de computación
- Cada procesador realiza s multiplicaciones y s
sumas de submatrices, una multiplicación de
submatrices necesita m3 multiplicaciones y m3
sumas y una suma m2 sumas, por lo que en resumen,
el tiempo de computación es
25Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
26Implementación recursiva
- La división en submatrices sugiere una estrategia
recursiva de divide y vencerás, que puede ser
especialmente ventajoso en sistemas de memoria
compartida. - El proceso de dividir una matriz en submatrices
para repartir el trabajo entre otros procesadores
debe parar cuando ya no queden procesadores
libres. - La ventaja de esta estrategia es que en cada paso
de recursión, los datos transmitidos son más
pequeños y están más localizados.
27Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
28Algoritmo de Cannon
- Este algoritmo y el siguiente son especialmente
apropiados para sistemas de paso de mensajes, y
la arquitectura de paso de mensajes que más se
ajusta a las matrices es una malla. Realmente,
aunque la arquitectura física no sea una malla,
lógicamente cualquier arquitectura puede
representarse como una malla.
29Algoritmo de Cannon
- Utiliza una malla con conexiones entre los
elementos de cada lado (toro) para desplazar los
elementos de A hacia la izquierda y los de B
hacia arriba. - El algoritmo sigue los siguientes pasos
- 1. El procesador Pij tiene los elementos aij y
bij.
30Algoritmo de Cannon
- 2. La fila i-ésima de A se desplaza i posiciones
a la izquierda, y la columna j-ésima de B se
desplaza j posiciones hacia arriba, y todo esto
teniendo en cuenta que el elemento que sale por
un extremo entra por el otro. Con este paso se
consigue que el procesador Pij contenga los
elementos aiji y bijj, que son necesarios para
calcular cij.
31Algoritmo de Cannon
- 3. Cada procesador multiplica su par de
elementos. - 4. Cada fila de A se desplaza una posición a la
izquierda, y cada columna de B una posición hacia
arriba. - 5. Cada procesador multiplica su nuevo par de
elementos, y suma el resultado al anterior. - 6. Se repiten los pasos 4 y 5 hasta terminar, es
decir n 1 desplazanientos
32Algoritmo de Cannon
33Algoritmo de Cannon
34Algoritmo de Cannon
35Algoritmo de Cannon
- Análisis de comunicaciones
- Los desplazamientos iniciales requieren un
máximo de n-1 desplazamientos, y después se
realizarán n-1 desplazamientos (uno en cada paso)
por lo que tenemos el siguiente tiempo de
comunicaciones - Esto nos da O (n)
36Algoritmo de Cannon
- En el caso de que estemos trabajando con
submatrices, tenemos s-1 desplazamientos
iniciales como máximo, y s-1 desplazamientos
después, cada uno de ellos de m2 elementos - Lo que nos da O (sm2) O (nm)
37Algoritmo de Cannon
- Análisis de computación
- Cada procesador realiza n multiplicaciones y n-1
sumas para calcular su elemento de C, lo que
implica O (n). - Usando submatrices, cada procesador realiza m3
multiplicaciones y m3 sumas por cada
multiplicación, y m2 sumas por cada suma, y
realiza s multiplicaciones y s-1 sumas - Lo que da O (sm3) O (nm2)
-
38Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
39Array sistólico
- La información es bombeada al array sistólico en
varias direcciones a intervalos regulares. - Concretamente, la información es bombeada desde
la izquierda hacia la derecha y desde arriba
hacia abajo. - Los datos se encuentran en los nodos, y entonces
se multiplican y suman al valor calculado
anteriormente.
40Array sistólico
41Array sistólico
42Array sistólico
43Array sistólico
44Array sistólico
45Array sistólico
- Análisis de comunicaciones
- Se realizan n desplazamientos para que la última
fila y ultima columna entren, n1 para que entre
el último elemento y n-1 para que llegue al
final, por lo que tenemos el siguiente tiempo de
comunicaciones - Esto nos da O (n)
46Array sistólico
- Análisis de computación
- Cada procesador realiza n multiplicaciones y n-1
sumas, lo que nos da un orden de complejidad O (n)
47Array sistólico
- Multiplicación de una matriz por un vector
- Esta técnica puede utilizarse directamente para
multiplicar una matriz por un vector usando
simplemente un array de 1xn o de nx1, según sea
el vector.
48Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
49Algoritmo de Fox
- Matrices de tamaño n x n
- Se particionan a través de p procesadores.
- Hace uso de un broadcast de uno a muchos de los
bloques de la matriz A en filas de procesadores,
y de un paso de bloques de la matriz B a través
de las columnas de los procesadores en forma
ascendente de procesador en procesador. - Inicialmente se selecciona cada bloque Ai,j de la
diagonal para un broadcast.
50Algoritmo de Fox
- Repetir veces
- Broadcast del bloque seleccionado de A a través
de los procesadores de la fila en
que está ubicado el bloque. - Multiplicar el bloque recibido de A como
resultado del broadcast por el bloque residente
de B (el procesador que inicia el broadcast ya
tiene el bloque requerido de A). - Enviar el bloque de B al procesador directamente
precedente en la columna del procesador (con
enrollamiento), y recibir un bloque de refresco
de B desde el procesador posterior. - Seleccionar el bloque de A para el broadcast de
la siguiente fila. Si se ha realizado un
broadcast de Ai,j en la etapa actual, entonces
seleccionar para el próximo broadcast A
i,(j1)mod .
51Algoritmo de Fox
- Pasos de Comunicación con 16 procesadores
52Algoritmo de Fox
- Tiempo de ejecución paralelo sobre un Hipercubo
- Cada procesador gasta un tiempo de n3/p en la
computación. - El tiempo para el broadcast de uno a todos los
bloques de A domina sobre el tiempo para el
cambio en pasos simples de los bloques de B.
53Algoritmo de Fox
- Si la malla original de procesadores encaja en un
hipercubo, cada broadcast puede ser ejecutado en
un tiempo
- Como esta operación se repite veces,
- el tiempo total de comunicación es
54Algoritmo de Fox
- Y el tiempo de ejecución paralelo
Aunque el tiempo de ejecución paralelo y la
escalabilidad de este algoritmo son inferiores a
los de los algoritmos simple y de Cannon, el
tiempo de ejecución de este algoritmo puede ser
mejorado intercalando computación y comunicación
por pipelines.
55Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
56Algoritmo DNS
- Debe su nombre a Dekel, Nassimi y Sahni.
- Algoritmo paralelo que puede consumir n3
procesadores y ejecuta la multiplicación de
matrices en un tiempo T(log n) usando O(n3/log n)
procesadores.
57Algoritmo DNS
- Algoritmo CREW PRAM sin concentrarse en una red
de interconexión particular. - n3 procesadores.
- Dos matrices n x n.
- Procesadores colocados en un array lógico
tridimensional n x n x n. - A cada procesador se le asigna una multiplicación
escalar. - Los procesadores se etiquetan de acuerdo a su
posición en el array. - La multiplicación Ai,k x Bk,j se asigna a
Pi,j,k.
58Algoritmo DNS
- Después de que cada procesador ejecute una
multiplicación simple se suman los contenidos de
Pi,j,0, Pi,j,1,,Pi,j,n-1 para obtener Ci,j. -
- La suma de todos los Ci,j se puede llevar a
cabo simultáneamente a lo largo de los n pasos.
59Algoritmo DNS
- Tiempo de ejecución
- Toma un paso para multiplicar y los n pasos para
sumar, por tanto, emplea un tiempo T(log n)
60Algoritmo DNS
- Algoritmo paralelo usando un Hipercubo
- El array lógico tridimensional se mapea en un
hipercubo con n3 w3d procesadores. - Los procesadores se pueden visualizar como n
planos de n x n procesadores cada uno. - Cada plano corresponde a un valor diferente de k.
- Inicialmente, las matrices se distribuyen a lo
largo de los n2 procesadores del plano
correspondiente a k0 en la base del array
tridimensional de procesadores. - Inicialmente, el procesador Pi,j,0 almacena
Ai,j y Bi,j.
61Algoritmo DNS
- Cada columna de A se mueve a diferentes planos,
de tal forma que la columna j ocupa la misma
posición en el plano correspondiente a k j
(igual que se hizo inicialmente con k 0) - Todas las columnas de A se replican n veces en
sus respectivos planos por medio de un broadcast
a lo largo del eje j. Como resultado, cada uno de
los n procesadores, Pi,0,j, Pi,1,j,,Pi,n-1,j
recibe una copia de Ai,j desde Pi,j,j.
62Algoritmo DNS
- Después de esto, cada columna vertical de
procesadores Pi,j, tiene la fila Ai,. En
concreto, el procesador Pi,j,k tiene Ai,k. - Para la matriz B, los pasos de comunicación son
similares, pero las reglas de i y j en los
procesadores descritos se permutan.
63Algoritmo DNS
- Después de estos pasos de comunicación, se
multiplican Ai,k y Bk,j en Pi,j,k. - Cada elemento Ci,j de la matriz producto se
obtiene por acumulación de nodos simples a través
del eje k. - Durante este paso, el procesador Pi,j,0 acumula
el resultado de las multiplicaciones de los
procesadores Pi,j,1, Pi,j,2,,Pi,j,n-1.
64Algoritmo DNS
- Pasos de comunicación principales
- Mover las columnas de A y las filas de B a sus
respectivos planos. - Ejecutar un broadcast a lo largo del eje j para A
y a lo largo del eje i para B. - Acumular los nodos simples a lo largo del eje k.
-
- Todas estas operaciones se ejecutan en subcubos
del hipercubo de n procesadores.
65Algoritmo DNS
- Patrón de comunicación para distribuir los
elementos de A a lo largo de los procesadores.
66Algoritmo DNS
67Algoritmo DNS
- Tiempo de ejecución
- El tiempo de ejecución paralelo usando el
algoritmo DNS sobre un Hipercubo con n3
procesadores es de T(log n).
68Algoritmo DNS
- CREW PRAM Vs. Hipercubo
- En CREW PRAM la columna vertical de procesadores,
Pi,j,, computa el producto puntual de la fila
Ai, y la columna B,j. - No se necesita ningún paso de movimiento de datos
porque en CREW PRAM cada procesador puede acceder
a cualquier localización en tiempo constante.
69Algoritmo DNS
- CREW PRAM Vs. Hipercubo
- En un Hipercubo, las filas de A y las columnas de
B deben ser movidas apropiadamente para que cada
columna vertical del procesador Pi,j, tenga la
fila Ai, y la columna B,j. - El procesador Pi,j,k debería tener Ai,k y
Bk,j.
70Algoritmo DNS
- Algoritmo DNS con menos de n3 procesadores
- El algoritmo DNS no es de coste optimo para n3
procesadores, su tiempo de procesador es
T(n3 log n) que excede de la complejidad
secuencial, T(n3).
71Algoritmo DNS
- Número de procesadores p q3 para algún q lt n.
- Las dos matrices se particionan en bloques de
tamaño (n/q) x (n/q). Es decir, cada matriz se
considera un array cuadrado de bloques de tamaño
q x q. - La diferencia es que ahora operamos sobre bloques
en vez de sobre elementos individuales. - Como 1 q n, el número de procesadores puede
variar entre 1 y n3.
72Algoritmo DNS
- Tiempo de ejecución en un Hipercubo con
enrutamiento de corte completo - El primer paso de comunicación uno a uno se
ejecuta en A y en B y toma un tiempo para cada
matriz de ts tw (n/q)2 th log q. - El segundo paso es un broadcast de uno a todos
que se ejecuta en A y en B y toma un tiempo para
cada matriz de ts log q tw (n/q)2 log q.
73Algoritmo DNS
- La acumulación de nodo simple final se ejecuta
una sola vez (para la matriz C) y toma un tiempo
- ts log q tw (n/q)2 log q.
74Algoritmo DNS
- Asumiendo que cada par multiplicación-suma toma
una unidad de tiempo, la multiplicación de
submatrices de tamaño (n/q) x (n/q) toma un
tiempo de (n/q)3. - Se puede ignorar el tiempo de comunicación para
el primer paso de comunicación uno a uno y el
tiempo de computación para la suma en la fase de
acumulación final.
75Algoritmo DNS
- Las expresiones aproximadas para el tiempo de
ejecución paralelo es
El sistema paralelo es de coste óptimo para
n3 O(p log p) ó para p ?(n3 / log n)
76Algoritmo DNS
- Tiempo de ejecución sobre una malla 3D con
enrutamiento de corte completo - El algoritmo DNS no es adecuado para una malla
bidimensional, ya que el algoritmo mapea
naturalmente sobre una malla tridimensional de
procesadores y una malla tridimensional no se
puede ajustar a una malla bidimensional sin
congestión ni dilatación excesivas.
77Algoritmo DNS
- Sobre una malla tridimensional, el algoritmo de
hipercubo se puede implementar sin
modificaciones. - Solo hay un cambio en la ecuación de la expresión
del tiempo de ejecución paralelo, que es la suma
del termino 3thp1/3. - Es decir, el tiempo de ejecución paralelo es
78Multiplicación de matrices
- Nociones básicas sobre matrices
- Algoritmo secuencial
- Algoritmo paralelo
- Submatrices
- Implementación directa
- Implementación con submatrices
- Implementación recursiva
- Algoritmo de Cannon
- Array sistólico
- Algoritmo de Fox
- Algoritmo DNS
- Mapeo de matrices en procesadores
79Mapeo de matrices en procesadores
- Particionamiento rayado
- Particionamiento de tablero de damas
80Mapeo de matrices en procesadores
- Particionamiento rayado
- Particionamiento de tablero de damas
81Particionamiento rayado
- Se divide la matriz en grupos de filas o columnas
completas y a cada procesador se le asigna un
grupo. - Se llama uniforme si cada grupo contiene el mismo
número de filas o columnas. - Se llama rayado de bloque si a cada procesador se
le asignan filas o columnas contiguas.
82Particionamiento rayado
- Se llama rayado cíclico si las filas o columnas
se distribuyen secuencialmente a través de los
procesadores de forma cíclica. - Se llama rayado cíclico de bloque si la matriz se
divide en bloques de q filas (q lt n/p) y los
bloques se distribuyen en los procesadores de
forma cíclica.
83Mapeo de matrices en procesadores
- Particionamiento rayado
- Particionamiento de tablero de damas
84Particionamiento de tablero de damas
- La matriz se divide en bloques o submatrices
cuadradas o rectangulares más pequeñas y se
distribuyen a través de los procesadores. - Divide las filas y columnas de la matriz para que
a ningún procesador se le asigne una fila o
columna completa.
85Particionamiento de tablero de damas
- Se llama particionamiento de tablero de damas
uniforme si todas las submatrices son de igual
tamaño. - Puede ser de bloque, cíclico o cíclico de bloque.
- En el particionamiento cíclico mapeamos las filas
en los procesadores de forma cíclica y después
las columnas o viceversa.
86Particionamiento de tablero de damas
- En el particionamiento cíclico de bloque
dividimos la matriz en q2p bloques y mapeamos
esos bloques de tamaño q x q de forma cíclica. - Una matriz cuadrada paticionada por tablero de
damas se mapea naturalmente en una malla
bidimensional de procesadores.
87Particionamiento rayado Vs. de tablero de damas
- El nivel más bajo de granularidad en el de
tablero de damas es un elemento de matriz por
procesador. - El de tablero de damas puede explotar más la
concurrencia (siempre que el algoritmo paralelo
lo permita) porque la computación se puede
dividir en más procesadores que el de rayado.