E N D
1. La Multiplicación de Matrices Capítulo 11
3. Multiplicación Ingenua en openMP #include <stdio.h>
int main (void)
{/*Declararciones
Entradas */
…..
/*Computar el producto de una matríz a l X m por una matríz b m X n: c=a*b */
#pragma omp parallel for private(j,k)
for (i=0; i<l; i++)
for (j=0; j<n; j++)
{ c[i][j]=0; La complexidad es ?(lmn)
for (k=0; k<m; k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
return 0
}
4. Algoritmos Secuenciales
5. Algoritmos orientados hacia filas
6. Rendimiento para n creciente
7. La Razón:La Matriz B puede ser muy grande para el Cache
8. Multiplicación mediante Bloques
9. Particionar recursivemente
10. Comparación de Rendimiento Secuencial
11. Algoritmos en MPI
12. Un Algoritmo Paralelo Basado en Bloques de Filas Particionar filas
Cada tarea primitiva tiene las filas correspondientes de tres matrices
Comunicaciones
Cada tarea tiene que ver eventualmente cada fila de B
Organizar tareas en un anillo.
13. Communication of B
14. Communication of B
15. Communication of B
16. Communication of B
17. La Complexidad Hay p iteraciones
En cada iteración un proceso multiplicaun bloque de tamaño (n/p) ? (n / p) de A por un bloque (n / p) ? n de B: ?(n3 / p2)
Tiempo de computación total: ?(n3 / p)
Cada proceso envia (p-1)n2/p = ?(n2) elementos de B
18. Isoeficiencia El algoritmo secuencial: ?(n3)
Los gastos paralelos generales: ?(pn2)Isoefficiency relation: n3 ? Cpn2 ? n ? Cp
Este sistema no tiene buena escabilidad.
19. Una Versión Secuencial del Algoritmo de Cannon
Presumir que A y B son n X n, p es un cuadrado, y que n es un multiplo de vp
Particionar A y B en bloques de tamaño
(n/vp) X (n/vp)
20. El Algoritmo de Cannon Inicialmente:
-trasladar todo Aij i posiciones a la izquierda y todo Bij j posiciones hacia arriba
Llevar a cabo la multiplicación de bloques
Rotar:
-trasladar todo Aij una posición a la izquierda y todo Bij una posición hacia arriba
Llevar a cabo la multiplicación de bloques
Sumar al resultado parcial
Repetir hasta que todos los vp bloques se han multiplicados
21. Hay que Alinear los Bloques
22. Paso 1
23. Paso 2
24. Paso 3
25. Paso 4
26. La Implantación de Cannon en MPI Crear una cuadr?cula de procesos
Cada proceso Pij tiene un bloque de A y un bloque de B y es responsible por computar el bloque Cij
Inicialmente, cada Pij contiene Aij y Bij
Luego cada Pij envia su bloque de A i procesos hacia la izquierda y su bloque de B j procesos hacia arriba
27. La Implantación de Cannon en MPI (cont) Después del paso inicial, hay vp iteraciones
En cada iteración cada proceso multiplica sus dos bloques, suma el resultado a una suma parcial, y luego envia su bloque de A al proceso a la izquierda y du bloque de B al proceso arriba, y recibe un bloque de A del proceso a la derecha y un bloque de B del proceso abajo.
28. Complexidad El algoritmo tiene ?p iterations
En cada iteración cada proceso multiplica dos
matrices (n / ?p ) ? (n / ?p ):
?(n3 / p 3/2)
Complexidad computacional: ?(n3 / p)
En cada iteración cada proceso envia y recibe dos bloques de tamaño
(n / ?p ) ? (n / ?p )
La complexidad de comunicación: ?(n2/ ?p)
29. Isoeficiencia Algoritmo secuencial: ?(n3)
Gastos paralelos generales: ?(?pn2)
La relación de isoeficiencia:
n3 ? C ? pn2 ? n ? C ? p
La función escalable es M(f(p))/p=C2
Este sistema es muy escalable.