Multiplicación de matrices Manuel Sánchez Cuenca Manolo Pérez Hernández
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Nociones básicas sobre matrices <ul><li>Array bidimensional de números </li></ul><ul><li>Matriz n x m    n filas y m colu...
Nociones básicas sobre matrices <ul><li>Suma de matrices </li></ul><ul><li>Se suman los elementos de la misma posición en ...
Nociones básicas sobre matrices <ul><li>Multiplicación de matrices </li></ul><ul><li>Sean A (n x l) y B (l x m) dos matric...
Nociones básicas sobre matrices <ul><li>Ej: </li></ul><ul><li>También se puede multiplicar una matriz por una constante mu...
Nociones básicas sobre matrices <ul><li>Multiplicación de una matriz por un vector </li></ul><ul><li>Desde el momento que ...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Algoritmo secuencial <ul><li>Por simplicidad, todo el tiempo trabajaremos con matrices cuadradas. </li></ul><ul><li>for (i...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Algoritmo paralelo <ul><li>Podemos basarnos en el código secuencial, ya que los dos bucles externos son independientes en ...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Submatrices <ul><li>Si tenemos muchos menos de n procesadores, cada procesador debe trabajar con un subconjunto de cada un...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Implementación directa <ul><li>Con n 2  procesadores, cada procesador calcula un elemento de C, por lo que necesita una fi...
Implementación directa <ul><li>Análisis de comunicaciones </li></ul><ul><li>Cada uno de los n 2  procesadores recibe una f...
Implementación directa <ul><li>Análisis de computación </li></ul><ul><li>Cada procesador realiza n multiplicaciones y n su...
Implementación directa <ul><li>Cálculo de c 00  para matrices de 4x4 y cálculos en estructura de árbol: </li></ul><ul><ul>...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Implementación con submatrices <ul><li>En cualquiera de los métodos se pueden sustituir los elementos de la matriz por sub...
Implementación con submatrices <ul><li>Análisis de comunicaciones </li></ul><ul><li>Cada uno de los s 2  procesadores reci...
Implementación con submatrices <ul><li>Al aumentar el tamaño de las submatrices (y disminuir el número de procesadores) el...
Implementación con submatrices <ul><li>Análisis de computación </li></ul><ul><li>Cada procesador realiza s multiplicacione...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Implementación recursiva <ul><li>La división en submatrices sugiere una estrategia recursiva de divide y vencerás, que pue...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Algoritmo de Cannon <ul><li>Este algoritmo y el siguiente son especialmente apropiados para sistemas de paso de mensajes, ...
Algoritmo de Cannon <ul><li>Utiliza una malla con conexiones entre los elementos de cada lado (toro) para desplazar los el...
Algoritmo de Cannon <ul><li>2. La fila i-ésima de A se desplaza i posiciones a la izquierda, y la columna j-ésima de B se ...
Algoritmo de Cannon <ul><li>3. Cada procesador multiplica su par de elementos. </li></ul><ul><li>4. Cada fila de A se desp...
Algoritmo de Cannon <ul><li>Ej: </li></ul>
Algoritmo de Cannon
Algoritmo de Cannon
Algoritmo de Cannon <ul><li>Análisis de comunicaciones </li></ul><ul><li>Los desplazamientos iniciales requieren un máximo...
Algoritmo de Cannon <ul><li>En el caso de que estemos trabajando con submatrices, tenemos s-1 desplazamientos iniciales co...
Algoritmo de Cannon <ul><li>Análisis de computación </li></ul><ul><li>Cada procesador realiza n multiplicaciones y n-1 sum...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Array sistólico <ul><li>La información es bombeada al array sistólico en varias direcciones a intervalos regulares. </li><...
Array sistólico
Array sistólico <ul><li>Ej: </li></ul>
Array sistólico
Array sistólico
Array sistólico
Array sistólico <ul><li>Análisis de comunicaciones </li></ul><ul><li>Se realizan n desplazamientos para que la última fila...
Array sistólico <ul><li>Análisis de computación </li></ul><ul><li>Cada procesador realiza n multiplicaciones y n-1 sumas, ...
Array sistólico <ul><li>Multiplicación de una matriz por un vector: </li></ul><ul><li>Esta técnica puede utilizarse direct...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Algoritmo de Fox <ul><li>Matrices de tamaño n x n </li></ul><ul><li>Se particionan a través de p procesadores. </li></ul><...
Algoritmo de Fox <ul><li>Repetir veces </li></ul><ul><ul><ul><li>Broadcast del bloque seleccionado de A a través de los  p...
Algoritmo de Fox <ul><li>Pasos de Comunicación con 16 procesadores </li></ul>
Algoritmo de Fox <ul><li>Tiempo de ejecución paralelo sobre un Hipercubo </li></ul><ul><ul><li>Cada procesador gasta un ti...
Algoritmo de Fox <ul><ul><li>Si la malla original de procesadores encaja en un hipercubo, cada broadcast puede ser ejecuta...
Algoritmo de Fox <ul><ul><li>Y el tiempo de ejecución paralelo </li></ul></ul>Aunque el tiempo de ejecución paralelo y la ...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Algoritmo DNS <ul><li>Debe su nombre a Dekel, Nassimi y Sahni. </li></ul><ul><li>Algoritmo paralelo que puede consumir n 3...
Algoritmo DNS <ul><li>Algoritmo CREW PRAM sin concentrarse en una red de interconexión particular. </li></ul><ul><ul><li>n...
Algoritmo DNS <ul><ul><li>Después de que cada procesador ejecute una multiplicación simple se suman los contenidos de P i,...
Algoritmo DNS <ul><li>Tiempo de ejecución </li></ul><ul><ul><li>Toma un paso para multiplicar y los n pasos para sumar, po...
Algoritmo DNS <ul><li>Algoritmo paralelo usando un Hipercubo </li></ul><ul><ul><li>El array lógico tridimensional se mapea...
Algoritmo DNS <ul><ul><li>Cada columna de A se mueve a diferentes planos, de tal forma que la columna j ocupa la misma pos...
Algoritmo DNS <ul><ul><li>Después de esto, cada columna vertical de procesadores P i,j,*  tiene la fila A[i,*]. En concret...
Algoritmo DNS <ul><ul><li>Después de estos pasos de comunicación, se multiplican A[i,k] y B[k,j] en P i,j,k . </li></ul></...
Algoritmo DNS <ul><li>Pasos de comunicación principales </li></ul><ul><ul><li>Mover las columnas de A y las filas de B a s...
Algoritmo DNS <ul><li>Patrón de comunicación para distribuir los elementos de A a lo largo de los procesadores. </li></ul>
Algoritmo DNS
Algoritmo DNS <ul><li>Tiempo de ejecución </li></ul><ul><ul><li>El tiempo de ejecución paralelo usando el algoritmo DNS so...
Algoritmo DNS <ul><li>CREW PRAM Vs. Hipercubo </li></ul><ul><ul><li>En CREW PRAM la columna vertical de procesadores, P i,...
Algoritmo DNS <ul><li>CREW PRAM Vs. Hipercubo </li></ul><ul><ul><li>En un Hipercubo, las filas de A y las columnas de B de...
Algoritmo DNS <ul><li>Algoritmo DNS con menos de n 3  procesadores </li></ul><ul><ul><li>El algoritmo DNS no es de coste o...
Algoritmo DNS <ul><ul><li>Número de procesadores p = q 3  para algún q < n. </li></ul></ul><ul><ul><li>Las dos matrices se...
Algoritmo DNS <ul><li>Tiempo de ejecución en un Hipercubo con enrutamiento de corte completo </li></ul><ul><ul><li>El prim...
Algoritmo DNS <ul><ul><li>La acumulación de nodo simple final se ejecuta una sola vez (para la matriz C) y toma un tiempo ...
Algoritmo DNS <ul><ul><li>Asumiendo que cada par multiplicación-suma toma una unidad de tiempo, la multiplicación de subma...
Algoritmo DNS <ul><li>Las expresiones aproximadas para el tiempo de ejecución paralelo es </li></ul>El sistema paralelo es...
Algoritmo DNS <ul><li>Tiempo de ejecución sobre una malla 3D con enrutamiento de corte completo </li></ul><ul><ul><li>El a...
Algoritmo DNS <ul><ul><li>Sobre una malla tridimensional, el algoritmo de hipercubo se puede implementar sin modificacione...
Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><l...
Mapeo de matrices en procesadores <ul><li>Particionamiento rayado </li></ul><ul><li>Particionamiento de tablero de damas <...
Mapeo de matrices en procesadores <ul><li>Particionamiento rayado </li></ul><ul><li>Particionamiento de tablero de damas <...
Particionamiento rayado <ul><li>Se divide la matriz en grupos de filas o columnas completas y a cada procesador se le asig...
Particionamiento rayado <ul><li>Se llama  rayado cíclico  si las filas o columnas se distribuyen secuencialmente a través ...
Mapeo de matrices en procesadores <ul><li>Particionamiento rayado </li></ul><ul><li>Particionamiento de tablero de damas <...
Particionamiento  de tablero de damas <ul><li>La matriz se divide en bloques o submatrices cuadradas o rectangulares más p...
Particionamiento  de tablero de damas <ul><li>Se llama  particionamiento de tablero de damas uniforme  si todas las submat...
Particionamiento  de tablero de damas <ul><li>En el  particionamiento cíclico de bloque  dividimos la matriz en q 2 p bloq...
Particionamiento rayado  Vs.  de tablero de damas <ul><li>El nivel más bajo de granularidad en el de tablero de damas es u...
Próxima SlideShare
Cargando en…5
×

T7 Alg Mult Matr

1.072 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
1.072
En SlideShare
0
De insertados
0
Número de insertados
1
Acciones
Compartido
0
Descargas
21
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

T7 Alg Mult Matr

  1. 1. Multiplicación de matrices Manuel Sánchez Cuenca Manolo Pérez Hernández
  2. 2. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  3. 3. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  4. 4. Nociones básicas sobre matrices <ul><li>Array bidimensional de números </li></ul><ul><li>Matriz n x m  n filas y m columnas </li></ul><ul><li>Matriz 3 x 4: </li></ul><ul><li>1 3 2 2 </li></ul><ul><li>2 4 6 3 </li></ul><ul><li>2 7 4 5 </li></ul>
  5. 5. Nociones básicas sobre matrices <ul><li>Suma de matrices </li></ul><ul><li>Se suman los elementos de la misma posición en ambas matrices: </li></ul><ul><li>1 3 2 3 2 3 4 5 5 </li></ul><ul><li>3 4 1 + 4 1 2 = 7 5 3 </li></ul><ul><li>1 1 2 1 2 2 2 3 4 </li></ul>
  6. 6. Nociones básicas sobre matrices <ul><li>Multiplicación de matrices </li></ul><ul><li>Sean A (n x l) y B (l x m) dos matrices, entonces cada elemento c ij de la matriz resultante se calcula como: </li></ul>
  7. 7. Nociones básicas sobre matrices <ul><li>Ej: </li></ul><ul><li>También se puede multiplicar una matriz por una constante multiplicando todos los elementos por dicha constante </li></ul>
  8. 8. Nociones básicas sobre matrices <ul><li>Multiplicación de una matriz por un vector </li></ul><ul><li>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. </li></ul>
  9. 9. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  10. 10. Algoritmo secuencial <ul><li>Por simplicidad, todo el tiempo trabajaremos con matrices cuadradas. </li></ul><ul><li>for (i = 0; i < n; i++) { </li></ul><ul><li>for (j = 0; i < n; j++) { </li></ul><ul><li>c[i][j] = 0; </li></ul><ul><li>for (k = 0; k < n; k++) { </li></ul><ul><li>c[i][j] += a[i][k] * b[k][j] </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>n 3 multiplicaciones y n 3 sumas  O (n 3 ) </li></ul>
  11. 11. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  12. 12. Algoritmo paralelo <ul><li>Podemos basarnos en el código secuencial, ya que los dos bucles externos son independientes en cada iteración. </li></ul><ul><li>Con n procesadores podemos obtener O (n 2 ) </li></ul><ul><li>Con n 2 procesadores O (n) </li></ul><ul><li>Estas implementaciones son óptimas en coste, ya que O (n 3 ) = n x O (n 2 ) = n 2 x O (n) </li></ul><ul><li>Estas cálculos no incluyen el coste de las comunicaciones. </li></ul>
  13. 13. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  14. 14. Submatrices <ul><li>Si tenemos muchos menos de n procesadores, cada procesador debe trabajar con un subconjunto de cada una de las matrices  submatrices. </li></ul><ul><li>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. </li></ul>
  15. 15. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  16. 16. Implementación directa <ul><li>Con n 2 procesadores, cada procesador calcula un elemento de C, por lo que necesita una fila de A y una columna de B. </li></ul><ul><li>Si usamos submatrices, cada procesador deberá calcular una submatriz de C. </li></ul>
  17. 17. Implementación directa <ul><li>Análisis de comunicaciones </li></ul><ul><li>Cada uno de los n 2 procesadores recibe una fila de A y una columna de B, y devuelve un elemento: </li></ul><ul><li>Mediante un broadcast de las dos matrices podemos ahorrar tiempo, por ejemplo en un bus tenemos: </li></ul>
  18. 18. Implementación directa <ul><li>Análisis de computación </li></ul><ul><li>Cada procesador realiza n multiplicaciones y n sumas, por lo que tenemos: </li></ul><ul><li>Usando una estructura de árbol y n 3 procesadores podemos obtener un tiempo de computación de O (log n) </li></ul>
  19. 19. Implementación directa <ul><li>Cálculo de c 00 para matrices de 4x4 y cálculos en estructura de árbol: </li></ul><ul><ul><li>a 00 b 00 a 01 b 10 a 02 b 20 a 03 b 30 </li></ul></ul><ul><li>x x x x </li></ul><ul><li> + + </li></ul><ul><li> + </li></ul>
  20. 20. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  21. 21. Implementación con submatrices <ul><li>En cualquiera de los métodos se pueden sustituir los elementos de la matriz por submatrices para reducir el número de procesadores </li></ul><ul><li>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. </li></ul>
  22. 22. Implementación con submatrices <ul><li>Análisis de comunicaciones </li></ul><ul><li>Cada uno de los s 2 procesadores recibe una fila de submatrices de A y una columna de submatrices de B, y devuelve una submatriz: </li></ul>
  23. 23. Implementación con submatrices <ul><li>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. </li></ul><ul><li>Además, también es posible hacer un broadcast de las dos matrices completas. </li></ul>
  24. 24. Implementación con submatrices <ul><li>Análisis de computación </li></ul><ul><li>Cada procesador realiza s multiplicaciones y s sumas de submatrices, una multiplicación de submatrices necesita m 3 multiplicaciones y m 3 sumas y una suma m 2 sumas, por lo que en resumen, el tiempo de computación es: </li></ul>
  25. 25. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  26. 26. Implementación recursiva <ul><li>La división en submatrices sugiere una estrategia recursiva de divide y vencerás, que puede ser especialmente ventajoso en sistemas de memoria compartida. </li></ul><ul><li>El proceso de dividir una matriz en submatrices para repartir el trabajo entre otros procesadores debe parar cuando ya no queden procesadores libres. </li></ul><ul><li>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. </li></ul>
  27. 27. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  28. 28. Algoritmo de Cannon <ul><li>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. </li></ul>
  29. 29. Algoritmo de Cannon <ul><li>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. </li></ul><ul><li>El algoritmo sigue los siguientes pasos: </li></ul><ul><li>1. El procesador P ij tiene los elementos a ij y b ij . </li></ul>
  30. 30. Algoritmo de Cannon <ul><li>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 P ij contenga los elementos a ij+i y b i+jj , que son necesarios para calcular c ij . </li></ul>
  31. 31. Algoritmo de Cannon <ul><li>3. Cada procesador multiplica su par de elementos. </li></ul><ul><li>4. Cada fila de A se desplaza una posición a la izquierda, y cada columna de B una posición hacia arriba. </li></ul><ul><li>5. Cada procesador multiplica su nuevo par de elementos, y suma el resultado al anterior. </li></ul><ul><li>6. Se repiten los pasos 4 y 5 hasta terminar, es decir n – 1 desplazanientos </li></ul>
  32. 32. Algoritmo de Cannon <ul><li>Ej: </li></ul>
  33. 33. Algoritmo de Cannon
  34. 34. Algoritmo de Cannon
  35. 35. Algoritmo de Cannon <ul><li>Análisis de comunicaciones </li></ul><ul><li>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: </li></ul><ul><li>Esto nos da O (n) </li></ul>
  36. 36. Algoritmo de Cannon <ul><li>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 m 2 elementos: </li></ul><ul><li>Lo que nos da O (sm 2 ) = O (nm) </li></ul>
  37. 37. Algoritmo de Cannon <ul><li>Análisis de computación </li></ul><ul><li>Cada procesador realiza n multiplicaciones y n-1 sumas para calcular su elemento de C, lo que implica O (n). </li></ul><ul><li>Usando submatrices, cada procesador realiza m 3 multiplicaciones y m 3 sumas por cada multiplicación, y m 2 sumas por cada suma, y realiza s multiplicaciones y s-1 sumas: </li></ul><ul><li>Lo que da O (sm 3 ) = O (nm 2 ) </li></ul>
  38. 38. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  39. 39. Array sistólico <ul><li>La información es bombeada al array sistólico en varias direcciones a intervalos regulares. </li></ul><ul><li>Concretamente, la información es bombeada desde la izquierda hacia la derecha y desde arriba hacia abajo. </li></ul><ul><li>Los datos se encuentran en los nodos, y entonces se multiplican y suman al valor calculado anteriormente. </li></ul>
  40. 40. Array sistólico
  41. 41. Array sistólico <ul><li>Ej: </li></ul>
  42. 42. Array sistólico
  43. 43. Array sistólico
  44. 44. Array sistólico
  45. 45. Array sistólico <ul><li>Análisis de comunicaciones </li></ul><ul><li>Se realizan n desplazamientos para que la última fila y ultima columna entren, n–1 para que entre el último elemento y n-1 para que llegue al final, por lo que tenemos el siguiente tiempo de comunicaciones: </li></ul><ul><li>Esto nos da O (n) </li></ul>
  46. 46. Array sistólico <ul><li>Análisis de computación </li></ul><ul><li>Cada procesador realiza n multiplicaciones y n-1 sumas, lo que nos da un orden de complejidad O (n) </li></ul>
  47. 47. Array sistólico <ul><li>Multiplicación de una matriz por un vector: </li></ul><ul><li>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. </li></ul>
  48. 48. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  49. 49. Algoritmo de Fox <ul><li>Matrices de tamaño n x n </li></ul><ul><li>Se particionan a través de p procesadores. </li></ul><ul><li>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. </li></ul><ul><li>Inicialmente se selecciona cada bloque A i,j de la diagonal para un broadcast. </li></ul>
  50. 50. Algoritmo de Fox <ul><li>Repetir veces </li></ul><ul><ul><ul><li>Broadcast del bloque seleccionado de A a través de los procesadores de la fila en que está ubicado el bloque. </li></ul></ul></ul><ul><ul><ul><li>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). </li></ul></ul></ul><ul><ul><ul><li>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. </li></ul></ul></ul><ul><ul><ul><li>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,(j+1)mod ]. </li></ul></ul></ul>
  51. 51. Algoritmo de Fox <ul><li>Pasos de Comunicación con 16 procesadores </li></ul>
  52. 52. Algoritmo de Fox <ul><li>Tiempo de ejecución paralelo sobre un Hipercubo </li></ul><ul><ul><li>Cada procesador gasta un tiempo de n 3 /p en la computación. </li></ul></ul><ul><ul><li>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. </li></ul></ul>
  53. 53. Algoritmo de Fox <ul><ul><li>Si la malla original de procesadores encaja en un hipercubo, cada broadcast puede ser ejecutado en un tiempo </li></ul></ul><ul><ul><li>Como esta operación se repite veces, </li></ul></ul><ul><ul><li>el tiempo total de comunicación es </li></ul></ul>
  54. 54. Algoritmo de Fox <ul><ul><li>Y el tiempo de ejecución paralelo </li></ul></ul>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.
  55. 55. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  56. 56. Algoritmo DNS <ul><li>Debe su nombre a Dekel, Nassimi y Sahni. </li></ul><ul><li>Algoritmo paralelo que puede consumir n 3 procesadores y ejecuta la multiplicación de matrices en un tiempo Θ (log n) usando Ω (n 3 /log n) procesadores. </li></ul>
  57. 57. Algoritmo DNS <ul><li>Algoritmo CREW PRAM sin concentrarse en una red de interconexión particular. </li></ul><ul><ul><li>n 3 procesadores. </li></ul></ul><ul><ul><li>Dos matrices n x n. </li></ul></ul><ul><ul><li>Procesadores colocados en un array lógico tridimensional n x n x n. </li></ul></ul><ul><ul><li>A cada procesador se le asigna una multiplicación escalar. </li></ul></ul><ul><ul><li>Los procesadores se etiquetan de acuerdo a su posición en el array. </li></ul></ul><ul><ul><li>La multiplicación A[i,k] x B[k,j] se asigna a P i,j,k . </li></ul></ul>
  58. 58. Algoritmo DNS <ul><ul><li>Después de que cada procesador ejecute una multiplicación simple se suman los contenidos de P i,j,0 , P i,j,1 ,…,P i,j,n-1 para obtener C[i,j]. </li></ul></ul><ul><ul><li>La suma de todos los C[i,j] se puede llevar a cabo simultáneamente a lo largo de los n pasos. </li></ul></ul>
  59. 59. Algoritmo DNS <ul><li>Tiempo de ejecución </li></ul><ul><ul><li>Toma un paso para multiplicar y los n pasos para sumar, por tanto, emplea un tiempo Θ (log n) </li></ul></ul>
  60. 60. Algoritmo DNS <ul><li>Algoritmo paralelo usando un Hipercubo </li></ul><ul><ul><li>El array lógico tridimensional se mapea en un hipercubo con n 3 = w 3d procesadores. </li></ul></ul><ul><ul><li>Los procesadores se pueden visualizar como n planos de n x n procesadores cada uno. </li></ul></ul><ul><ul><li>Cada plano corresponde a un valor diferente de k. </li></ul></ul><ul><ul><li>Inicialmente, las matrices se distribuyen a lo largo de los n 2 procesadores del plano correspondiente a k=0 en la base del array tridimensional de procesadores. </li></ul></ul><ul><ul><li>Inicialmente, el procesador P i,j,0 almacena A[i,j] y B[i,j]. </li></ul></ul>
  61. 61. Algoritmo DNS <ul><ul><li>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) </li></ul></ul><ul><ul><li>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, P i,0,j , P i,1,j ,…,P i,n-1,j recibe una copia de A[i,j] desde P i,j,j . </li></ul></ul>
  62. 62. Algoritmo DNS <ul><ul><li>Después de esto, cada columna vertical de procesadores P i,j,* tiene la fila A[i,*]. En concreto, el procesador P i,j,k tiene A[i,k]. </li></ul></ul><ul><ul><li>Para la matriz B, los pasos de comunicación son similares, pero las reglas de i y j en los procesadores descritos se permutan. </li></ul></ul>
  63. 63. Algoritmo DNS <ul><ul><li>Después de estos pasos de comunicación, se multiplican A[i,k] y B[k,j] en P i,j,k . </li></ul></ul><ul><ul><li>Cada elemento C[i,j] de la matriz producto se obtiene por acumulación de nodos simples a través del eje k. </li></ul></ul><ul><ul><li>Durante este paso, el procesador P i,j,0 acumula el resultado de las multiplicaciones de los procesadores P i,j,1 , P i,j,2 ,…,P i,j,n-1 . </li></ul></ul>
  64. 64. Algoritmo DNS <ul><li>Pasos de comunicación principales </li></ul><ul><ul><li>Mover las columnas de A y las filas de B a sus respectivos planos. </li></ul></ul><ul><ul><li>Ejecutar un broadcast a lo largo del eje j para A y a lo largo del eje i para B. </li></ul></ul><ul><ul><li>Acumular los nodos simples a lo largo del eje k. </li></ul></ul><ul><ul><li>Todas estas operaciones se ejecutan en subcubos del hipercubo de n procesadores. </li></ul></ul>
  65. 65. Algoritmo DNS <ul><li>Patrón de comunicación para distribuir los elementos de A a lo largo de los procesadores. </li></ul>
  66. 66. Algoritmo DNS
  67. 67. Algoritmo DNS <ul><li>Tiempo de ejecución </li></ul><ul><ul><li>El tiempo de ejecución paralelo usando el algoritmo DNS sobre un Hipercubo con n 3 procesadores es de Θ (log n). </li></ul></ul>
  68. 68. Algoritmo DNS <ul><li>CREW PRAM Vs. Hipercubo </li></ul><ul><ul><li>En CREW PRAM la columna vertical de procesadores, P i,j,* , computa el producto puntual de la fila A[i,*] y la columna B[*,j]. </li></ul></ul><ul><ul><li>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. </li></ul></ul>
  69. 69. Algoritmo DNS <ul><li>CREW PRAM Vs. Hipercubo </li></ul><ul><ul><li>En un Hipercubo, las filas de A y las columnas de B deben ser movidas apropiadamente para que cada columna vertical del procesador P i,j,* tenga la fila A[i,*] y la columna B[*,j]. </li></ul></ul><ul><ul><li>El procesador P i,j,k debería tener A[i,k] y B[k,j]. </li></ul></ul>
  70. 70. Algoritmo DNS <ul><li>Algoritmo DNS con menos de n 3 procesadores </li></ul><ul><ul><li>El algoritmo DNS no es de coste optimo para n 3 procesadores, su tiempo de procesador es Θ (n 3 log n) que excede de la complejidad secuencial, Θ (n 3 ). </li></ul></ul>
  71. 71. Algoritmo DNS <ul><ul><li>Número de procesadores p = q 3 para algún q < n. </li></ul></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>La diferencia es que ahora operamos sobre bloques en vez de sobre elementos individuales. </li></ul></ul><ul><ul><li>Como 1 ≤ q ≤ n, el número de procesadores puede variar entre 1 y n 3 . </li></ul></ul>
  72. 72. Algoritmo DNS <ul><li>Tiempo de ejecución en un Hipercubo con enrutamiento de corte completo </li></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>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. </li></ul></ul>
  73. 73. Algoritmo DNS <ul><ul><li>La acumulación de nodo simple final se ejecuta una sola vez (para la matriz C) y toma un tiempo </li></ul></ul><ul><ul><li>ts + log q + tw (n/q) 2 log q. </li></ul></ul>
  74. 74. Algoritmo DNS <ul><ul><li>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. </li></ul></ul><ul><ul><li>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. </li></ul></ul>
  75. 75. Algoritmo DNS <ul><li>Las expresiones aproximadas para el tiempo de ejecución paralelo es </li></ul>El sistema paralelo es de coste óptimo para n 3 = Ω (p log p) ó para p = Ο (n 3 / log n)
  76. 76. Algoritmo DNS <ul><li>Tiempo de ejecución sobre una malla 3D con enrutamiento de corte completo </li></ul><ul><ul><li>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. </li></ul></ul>
  77. 77. Algoritmo DNS <ul><ul><li>Sobre una malla tridimensional, el algoritmo de hipercubo se puede implementar sin modificaciones. </li></ul></ul><ul><ul><li>Solo hay un cambio en la ecuación de la expresión del tiempo de ejecución paralelo, que es la suma del termino 3*th*p 1/3 . </li></ul></ul><ul><ul><li>Es decir, el tiempo de ejecución paralelo es </li></ul></ul>
  78. 78. Multiplicación de matrices <ul><li>Nociones básicas sobre matrices </li></ul><ul><li>Algoritmo secuencial </li></ul><ul><li>Algoritmo paralelo </li></ul><ul><li>Submatrices </li></ul><ul><li>Implementación directa </li></ul><ul><li>Implementación con submatrices </li></ul><ul><li>Implementación recursiva </li></ul><ul><li>Algoritmo de Cannon </li></ul><ul><li>Array sistólico </li></ul><ul><li>Algoritmo de Fox </li></ul><ul><li>Algoritmo DNS </li></ul><ul><li>Mapeo de matrices en procesadores </li></ul>
  79. 79. Mapeo de matrices en procesadores <ul><li>Particionamiento rayado </li></ul><ul><li>Particionamiento de tablero de damas </li></ul>
  80. 80. Mapeo de matrices en procesadores <ul><li>Particionamiento rayado </li></ul><ul><li>Particionamiento de tablero de damas </li></ul>
  81. 81. Particionamiento rayado <ul><li>Se divide la matriz en grupos de filas o columnas completas y a cada procesador se le asigna un grupo. </li></ul><ul><li>Se llama uniforme si cada grupo contiene el mismo número de filas o columnas. </li></ul><ul><li>Se llama rayado de bloque si a cada procesador se le asignan filas o columnas contiguas. </li></ul>
  82. 82. Particionamiento rayado <ul><li>Se llama rayado cíclico si las filas o columnas se distribuyen secuencialmente a través de los procesadores de forma cíclica. </li></ul><ul><li>Se llama rayado cíclico de bloque si la matriz se divide en bloques de q filas (q < n/p) y los bloques se distribuyen en los procesadores de forma cíclica. </li></ul>
  83. 83. Mapeo de matrices en procesadores <ul><li>Particionamiento rayado </li></ul><ul><li>Particionamiento de tablero de damas </li></ul>
  84. 84. Particionamiento de tablero de damas <ul><li>La matriz se divide en bloques o submatrices cuadradas o rectangulares más pequeñas y se distribuyen a través de los procesadores. </li></ul><ul><li>Divide las filas y columnas de la matriz para que a ningún procesador se le asigne una fila o columna completa. </li></ul>
  85. 85. Particionamiento de tablero de damas <ul><li>Se llama particionamiento de tablero de damas uniforme si todas las submatrices son de igual tamaño. </li></ul><ul><li>Puede ser de bloque , cíclico o cíclico de bloque . </li></ul><ul><li>En el particionamiento cíclico mapeamos las filas en los procesadores de forma cíclica y después las columnas o viceversa. </li></ul>
  86. 86. Particionamiento de tablero de damas <ul><li>En el particionamiento cíclico de bloque dividimos la matriz en q 2 p bloques y mapeamos esos bloques de tamaño q x q de forma cíclica. </li></ul><ul><li>Una matriz cuadrada paticionada por tablero de damas se mapea naturalmente en una malla bidimensional de procesadores. </li></ul>
  87. 87. Particionamiento rayado Vs. de tablero de damas <ul><li>El nivel más bajo de granularidad en el de tablero de damas es un elemento de matriz por procesador. </li></ul><ul><li>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. </li></ul>

×