1 / 15

Mezclando MPI y OpenMP

Mezclando MPI y OpenMP. Multicore Clusters. El diagrama siguiente (que se podria considerar de un diagrama de aquellos 4 procesadores de mathcluster que tienen 4 cores cada uno) ilustra dos maneras mediante lo cual se puede ejecutar programas paralelos en clusters con multicores:

kevlyn
Download Presentation

Mezclando MPI y OpenMP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mezclando MPI y OpenMP

  2. Multicore Clusters El diagrama siguiente (que se podria considerar de un diagrama de aquellos 4 procesadores de mathcluster que tienen 4 cores cada uno) ilustra dos maneras mediante lo cual se puede ejecutar programas paralelos en clusters con multicores: • Crear un proceso MPI (P) para todo CPU (b) Crear un proceso MPI para todo multiprocesador y crear hilos (t) para ocupar los CPUs

  3. C+MPI vs. C+MPI+OpenMP C + MPI C + MPI + OpenMP

  4. C + MPI + OpenMPpueden ejecutarse mas rápidamente • Los gastos de comunicación pueden ser menor • Mas porciones del programa se podrían ser paralelizar • Podría hacer posible que se le traslapen mejor las comunicaciones y las computaciones

  5. Ejemplo - El Problema de Todos Pares Distancias mas Cortas • Dado un grafo dirigido con pesos, ¿cuales son las trayectorias de largos mínimos (es decir “distancias mas cortas”) entre todos los pares de vértices?

  6. A B C D E A 0 6 3 ∞ ∞ B 4 0 ∞ 1 ∞ C ∞ ∞ 0 5 1 D ∞ 3 ∞ 0 ∞ E ∞ ∞ ∞ 2 0 Ejemplo 4 A B 3 6 1 3 5 C 1 D 2 E Matríz de Adyacencias

  7. El Algoritmo de Floyd for k 0 to n-1 for i  0 to n-1 for j  0 to n-1 a[i,j]  min (a[i,j], a[i,k] + a[k,j]) endfor endfor endfor (donde a es la nXn matríz de adjacencias)

  8. Computed in previous iterations La Idea del Algoritmo La trayectoria mas corta de i a k que pasa por 0, 1, …, k-1 i k La trayectoria mas corta de i a j que pasa por 0, 1, …, k-1 La trayectoria mas corta de k a j que pasa por 0, 1, …, k-1 j

  9. Comunicaciones Poner al dia a[3,4] Cuando k=1 Primitive tasks Iteraciónk: Toda tarea en la fila k emite su valor a los procesos en la misma columna Iteración k: Toda tarea en la columna k emite su valor a los procesos en la misma fila

  10. La implementación MPI de Floyd • Aglomerar tareas en filas. • Durante toda iteración k del bucle exterior, el dueño de k emiterá los n elementos de la fila k

  11. La parte principal de la implementación • tmp = (dtype *) malloc (n * sizeof(dtype)); • for (k = 0; k < n; k++) • { root = BLOCK_OWNER(k, p, n); • if (root == id) • { offset = k - BLOCK_LOW(id, p, n); • for (j = 0; j < n; j++) • tmp[j] = a[offset][j]; • } • MPI_Bcast (tmp, n, MPI_TYPE, root, MPI_COMM_WORLD); • for (i = 0; i < BLOCK_SIZE(id, p, n); i++) • for (j = 0; j < n; j++) • a[i][j] = MIN(a[i][j], a[i][k] + tmp[j]); • } • free (tmp);

  12. La introducción de OpenMP en el programa • Se puede paralelizar el segundo bucle for insertando #pragma omp parallel for private(j) antes del segundo for • Para asignar la cantidad de hilos al momento de ejecutar, insertamos omp_set_num_threads(atoi(argv[2])) • También, hay que incluir #include <omp.h>

  13. Para compilar y link el nuevo programa MPI-OpenMP mpicc –fopenmp –c mixedfloyd.c (donde mixedfloyd.c es el archivo que contiene elnuevo programa). mpicc –c MyMPI.c Mpicc –fopenmp mixedfloyd.o MyMPI.o –o mixedf

  14. Para ejecutarlo mpirun –hostfile hosts –np p ./mixedf arch h donde hosts es un hostfile, p es cualquier entero positivo, arch es un archivo que contiene la matriz de ajacencias del grafo (que se puede preparar usando el programa gen4Floyd.c), y h es el número de hilos.

  15. ¿Cual es el rendimiento mejor que se puede esperar? • Debido a la arquitectura de mathcluster, es interesante experimentar con el archivo hosts como sigue mathcluster slots=1 max_slots=4 compute-0-0 slots=1 max_slots=4 compute-0-1 slots=1 max_slots=4 compute-0-2 slots=1 max_slots=4 • Si usamos este hostfile, cuales son los valores optimos de p y h?

More Related