PDF de programación - Programación por Paso de Mensajes - MPI - Metodología de la Programación Paralela

Imágen de pdf Programación por Paso de Mensajes - MPI - Metodología de la Programación Paralela

Programación por Paso de Mensajes - MPI - Metodología de la Programación Paralelagráfica de visualizaciones

Actualizado el 29 de Julio del 2018 (Publicado el 27 de Mayo del 2018)
379 visualizaciones desde el 27 de Mayo del 2018
328,9 KB
40 paginas
Creado hace 4a (30/09/2015)
Metodología de la Programación Paralela

2015-2016

Facultad Informática, Universidad de Murcia

Programación por Paso de

Mensajes - MPI

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

1 / 40

Contenido

1 Nociones generales de MPI

2 Comunicaciones

3 Ejemplo: integral definida

4 Comunicaciones colectivas

5 Tipos derivados

6 Empaquetamiento

7 Comunicadores

8 Topologías

9

... y más

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

2 / 40

Contenido

1 Nociones generales de MPI

2 Comunicaciones

3 Ejemplo: integral definida

4 Comunicaciones colectivas

5 Tipos derivados

6 Empaquetamiento

7 Comunicadores

8 Topologías

9

... y más

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

3 / 40

¿Qué es MPI?

Previamente PVM: Parallel Virtual Machine (aprox. 1993).
MPI: Message Passing Interface.
Una especificación para paso de mensajes.
La primera librería de paso de mensajes estándar y portable.
Por consenso del MPI Forum. Participantes de unas 40
organizaciones.
Acabado y publicado en mayo 1994. Actualizado en junio 1995.
Versiones y variantes: MPI2, HMPI, FT-MPI...

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

4 / 40

¿Qué ofrece MPI?

Estandarización.
Portabilidad: multiprocesadores de memoria compartida,
multicomputadores de paso de mensajes, clusters, sistemas
heterogéneos, ...
Buenas prestaciones si está disponible para el sistema con una
implementación eficiente.
Amplia funcionalidad. Del orden de 140 funciones para las
operaciones más comunes de paso de mensajes.
Implementaciones de empresas y libres (mpich, lam/mpi, OpenMPI...)

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

5 / 40

Ejemplo básico: hello.c

#include <stdio.h>
#include <string.h>
#include <mpi.h>
main(int argc, char*argv[]) {

int name, p, source, dest, tag = 0;
char message[100];
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&name);
MPI_Comm_size(MPI_COMM_WORLD,&p);
if (name != 0) {

printf("Processor %d of %d\n",name, p);
sprintf(message,"greetings from process %d!",name);
dest = 0;
MPI_Send(message, strlen(message)+1,MPI_CHAR, dest, tag,MPI_COMM_WORLD);

} else {

printf("processor 0, p = %d ",p);
for(source=1; source < p; source++) {

MPI_Recv(message,100, MPI_CHAR, source,tag, MPI_COMM_WORLD, &status);
printf("%s\n",message);

}

}
MPI_Finalize();

}

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

6 / 40

Compilación y Ejecución
Depende de la versión de MPI instalada en el sistema.
En el cluster del laboratorio de CCPP la versión instalada cambia de vez
en cuando (ahora está la OpenMPI), pero los programas deben funcionar
en las distintas versiones, y la única diferencia está en cómo lanzarlos a
ejecución.

Compilación:
mpicc programa.c
Y las opciones de C que se considere.
Si se usa el compilador de Intel puede ser mpiicc, y el de C++ con
mpic++.
Ejecución:
mpirun -np numpro -machinefile fichmaq programa
pone en marcha numpro procesos con el mismo código.
Por defecto se ponen en marcha en el nodo donde se está
ejecutando.
Con la opción -machinefile fichmaq se indica los nodos donde
asignar los procesos dentro del cluster donde se está trabajando.

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

7 / 40

Funciones básicas

Incluir librería con fichero cabecera:
#include <mpi.h>
Formato de las funciones:
error=MPI nombre(parámetros ...)
Inicialización:
int MPI Init ( int *argc , char ***argv )
Comunicador: Conjunto de procesos en que se hacen
comunicaciones.
MPI COMM WORD es el mundo de todos los procesos MPI.
Identificación de procesos:
MPI Comm rank ( MPI Comm comm , int *rank)
Procesos en el comunicador:
MPI Comm size ( MPI Comm comm , int *size)
Finalización:
int MPI Finalize ( )

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

8 / 40

Contenido

1 Nociones generales de MPI

2 Comunicaciones

3 Ejemplo: integral definida

4 Comunicaciones colectivas

5 Tipos derivados

6 Empaquetamiento

7 Comunicadores

8 Topologías

9

... y más

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

9 / 40

Mensajes en comunicaciones
Un MENSAJE está formado por un cierto número de elementos de un tipo MPI.
Tipos MPI:

Básicos:

MPI CHAR
MPI SHORT
MPI INT
MPI LONG
MPI UNSIGNED CHAR
MPI UNSIGNED SHOT
MPI UNSIGNED
MPI UNSIGNED LONG
MPI FLOAT
MPI DOUBLE
MPI LONG DOUBLE
MPI BYTE
MPI PACKED

signed char
signed short int
signed int
signed long int
unsigned char
unsigned short int
unsigned int
unsigned long int
float
double
long double

Derivados: los construye el programador.

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

10 / 40

Punto a punto

Envío:

int MPI_Send ( void *buffer , int contador ,

MPI_Datatype tipo , int destino , int tag ,
MPI_Comm comunicador )

Recepción:

int MPI_Recv ( void *buffer , int contador ,

MPI_Datatype tipo , int origen , int tag ,
MPI_Comm comunicador , MPI_Status *estado)

Para valores generales MPI ANY TAG, MPI ANY SOURCE

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

11 / 40

Comunicación Síncrona

Envío:
Es no bloqueante.

Ready: MPI Rsend

Acaba independiente de que acabe la recepción.

Síncrono: MPI Ssend

Acaba cuando la recepción empieza.

Estándar: MPI Send

Ready o síncrono.

Con buffer: MPI Bsend

Copia mensaje en buffer y lo manda.

Recepción: MPI Recv
Acaba cuando se ha recibido un mensaje: es bloqueante.

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

12 / 40

Comunicación Asíncrona

Envío:
MPI Isend(buf, count, datatype, dest, tag, comm,
request)
Recepción:
MPI Irecv(buf, count, datatype, source, tag, comm,
request)
request se usa para saber si la operación ha acabado:

MPI Wait( )

vuelve si la operación se ha completado, espera hasta que se
completa.

MPI Test( )

devuelve un flag diciendo si la operación se ha completado.

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

13 / 40

Contenido

1 Nociones generales de MPI

2 Comunicaciones

3 Ejemplo: integral definida

4 Comunicaciones colectivas

5 Tipos derivados

6 Empaquetamiento

7 Comunicadores

8 Topologías

9

... y más

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

14 / 40

Condiciones de ejecución

p procesos
se divide el intervalo [a, b] en n subintervalos
cada proceso debe saber:

número total de procesos (MPI Comm size)
identificador de proceso (MPI Comm rank)
intervalo de integración
número de subintervalos

I/0 por el proceso 0

lee datos
los envía al resto de procesos
recibe resultados parciales de los procesos
combina los resultados y produce la salida

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

15 / 40

Código principal

main(int argc,char **argv) {

int my_rank , p , n , local_n , source , dest=0 , tag=50;
float a , b , h , local_a , local_b, integral , total;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
MPI_Comm_size(MPI_COMM_WORLD,&p);
Get_data(my_rank,p,&a,&b,&n);
h=(b-a)/n ; local_n=n/p;
local_a=a+my_rank*local_n*h ; local_b=local_a+local_n*h;
integral=Trap(local_a,local_b,local_n,h);
if(my_rank==0) {

total=integral;
for(source=1;source<p;source++) {

MPI_Recv(&integral,1,MPI_FLOAT,source,tag,MPI_COMM_WORLD,&status);
total+=integral;

};
printf("With n= %d trapezoides\n la estimacion",n);
printf("de la integral entre %f y %f\n es= %f \n",a,b,total);

} else {

MPI_Send(&integral,1,MPI_FLOAT,dest,tag,MPI_COMM_WORLD);

};
MPI_Finalize();

}

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

16 / 40

Funciones de cálculo de la integral

float f(float x)
{

float return_val;
...
return return_val;

}

float Trap(float local_a,float local_b,int local_n,float h)
{

float integral;
float x;
int i;
integral=(f(local_a)+f(local_b))/2.0;
x=local_a;
for(i=1;i<=local_n-1;i++)
{

x+=h;
integral+=f(x);

};
integral*=h;
return integral;

}

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

17 / 40

Envío de datos

void Get_data(int my_rank,int p,float *a_ptr,float *b_ptr,int *n_ptr) {

int source=0 , dest , tag;
MPI_Status status;
if(my_rank==0)
{

printf("Enter a, b, and n\n");
scanf("%f %f %d",a_ptr,b_ptr,n_ptr);
for(dest=1;dest<p;dest++) {

tag=30;
MPI_Send(a_ptr,1,MPI_FLOAT,dest,tag,MPI_COMM_WORLD);
tag=31;
MPI_Send(b_ptr,1,MPI_FLOAT,dest,tag,MPI_COMM_WORLD);
tag=32;
MPI_Send(n_ptr,1,MPI_INT,dest,tag,MPI_COMM_WORLD);

Coste envíos
3(p − 1)(ts + tw )

};

} else {

tag=30;
MPI_Recv(a_ptr,1,MPI_FLOAT,source,tag,MPI_COMM_WORLD,&status);
tag=31;
MPI_Recv(b_ptr,1,MPI_FLOAT,source,tag,MPI_COMM_WORLD,&status);
tag=32;
MPI_Recv(n_ptr,1,MPI_INT,source,tag,MPI_COMM_WORLD,&status);

};

}

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

18 / 40

Contenido

1 Nociones generales de MPI

2 Comunicaciones

3 Ejemplo: integral definida

4 Comunicaciones colectivas

5 Tipos derivados

6 Empaquetamiento

7 Comunicadores

8 Topologías

9

... y más

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

19 / 40

Funciones

MPI Barrier( )
bloquea los procesos hasta que la llaman todos

MPI Bcast( )
broadcast del proceso raíz a todos los demás

MPI Gather( )
recibe valores de un grupo de procesos

MPI Scatter( )
distribuye un buffer en partes a un grupo de procesos

MPI Alltoall( )
envía datos de todos los procesos a todos

MPI Reduce( )
combina valores de todos los procesos

MPI Reduce scatter( )
combina valores de todos los procesos y distribuye

MPI Scan( )

reducción prefija: valor acumulado de posiciones 0, . . . , i − 1 se pone en posición i
... y más

Domingo Giménez (Universidad de Murcia)

Curso 2015-2016

20 / 40

Operaciones en comunicaciones colectivas

MPI Operator Operation
maximum
MPI MAX
minimum
MPI MIN
sum
MPI SUM
product
MPI PROD
logical and
MPI LAND
bitwise and
MPI BAND
logical or
MPI LOR
bitwise or
MPI BOR
logical exclusive or
MPI LXOR
bitwise exclusive or
MP
  • Links de descarga
http://lwp-l.com/pdf11350

Comentarios de: Programación por Paso de Mensajes - MPI - Metodología de la Programación Paralela (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad