PDF de programación - Programación de Plataformas Paralelas II - Curso de Computación Científica en Clusters

Imágen de pdf Programación de Plataformas Paralelas II - Curso de Computación Científica en Clusters

Programación de Plataformas Paralelas II - Curso de Computación Científica en Clustersgráfica de visualizaciones

Publicado el 22 de Diciembre del 2020
529 visualizaciones desde el 22 de Diciembre del 2020
2,1 MB
56 paginas
Creado hace 14a (17/03/2010)
Curso de Computación Científica en Clusters
Curso de Computación Científica en Clusters
Programación de Plataformas Paralelas II:
Programación de Plataformas Paralelas II:

MPIMPI

Javier Cuenca

Universidad de Murcia

Introducción
Introducción

Previamente PVM: Parallel Virtual Machine

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 MPI Forum. Participantes de unas 40 organizaciones

Acabado y publicado en mayo 1994. Actualizado en junio 1995

MPI2, HeteroMPI, FT-MPI

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

22

Introducción.
Introducción.
¿Qué ofrece?
¿Qué ofrece?

Estandarización

Portabilidad: multiprocesadores, multicomputadores, redes, heterogéneos, ...

Buenas prestaciones, ..., si están disponibles para el sistema

Amplia funcionalidad

Implementaciones libres (mpich, lam, ...)

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

33

Introducción.
Introducción.
Procesos
Procesos

Programa MPI: conjunto de procesos autónomos

Cada proceso puede ejecutar codigo diferente

Procesos comunican vía primitivas MPI

Proceso: secuencial o multithreads

MPI no proveé mecanismos para situar procesos en procesadores. Eso es misión de
cada implementación en cada plataforma

MPI 2.0:


Es posible la creación/borrado de procesos dinámicamente durante ejecución
Es posible el acceso a memoria remota
Es posible la entrada/salida paralela



Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

44

Introducción.
Introducción.
Ejemplo: hello.c
Ejemplo: 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);

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

55

Introducción.
Introducción.
Ejemplo: hello.c
Ejemplo: hello.c

#include <stdio.h>
if (name != 0)
#include <string.h>
{
#include "mpi.h"
main(int argc, char*argv[]) {

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,

int name, p, source, dest, tag = 0;
char message[100];
MPI_Status status;

MPI_COMM_WORLD);
}
else
{

MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&name)
;
MPI_Comm_size(MPI_COMM_WORLD,&p);

printf("processor 0, p = %d \n",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();

}

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

66

Introducción.
Introducción.
Ejemplo de uso
Ejemplo de uso

Compilación

mpicc -o ejemplo ejemplo.c -lm -lmpi

Ejecución

mpirun –np 4 ejemplo

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

77

Introducción.
Introducción.
Ejemplo de uso
Ejemplo de uso

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 , el mundo de los procesos MPI

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

88

Introducción.
Introducción.
Ejemplo de uso
Ejemplo de uso

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 ( )

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

99

Introducción.
Introducción.
Ejemplo de uso
Ejemplo de uso

MENSAJE: 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
unsigned
unsigned int
unsigned
float
double
long double

char
short int

long int

Tipos MPI Derivados: los construye el programador

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

1010

Introducción.
Introducción.
Ejemplo de uso
Ejemplo de uso

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)

MPI_ANY_TAG
MPI_ANY_SOURCE

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

1111

Tipos de comunicación
Tipos de comunicación

Envío:

Envío síncrono: MPI_Ssend
Acaba cuando la recepción empieza
Envío con buffer: MPI_Bsend
Acaba siempre, independiente del receptor
Envío estándar: MPI_Send
Síncrono o con buffer
Envío “ready”: MPI_Rsend
Acaba independiente de que acabe la recepción

Recepción: MPI_Recv
Acaba cuando se ha recibido un mensaje.

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

1212

Comunicación asíncrona (nonblocking)
Comunicación asíncrona (nonblocking)

MPI_Isend(buf, count, datatype, dest, tag, comm, request)
MPI_Irecv(buf, count, datatype, source, tag, comm, request)
Parámetro request 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

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

1313

Comunicación asíncrona (nonblocking).
Comunicación asíncrona (nonblocking).
Ejemplo: hello_nonblocking.c (1/2)
Ejemplo: hello_nonblocking.c (1/2)

MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&name);
MPI_Comm_size(MPI_COMM_WORLD,&p);

p_requests = (MPI_Request *) malloc ( p * sizeof(MPI_Request) );

if (name != 0)
{

sprintf(message,"greetings from process %d!",name);
dest = 0;
MPI_Isend(message, strlen(message)+1, MPI_CHAR, dest, tag,
MPI_COMM_WORLD, &request);
printf("Procesador %d ya ha hecho el ISEND al procesador
0\n",name);

/* …. Código por aquí enmedio …*/

MPI_Wait(&request,&status);
printf("Procesador
envio\n",name);

pasado

tras

%d

ya

ha

el

WAIT

}

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

1414

Comunicación asíncrona (nonblocking).
Comunicación asíncrona (nonblocking).
Ejemplo: hello_nonblocking.c (2/2)
Ejemplo: hello_nonblocking.c (2/2)

else
{

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

MPI_Irecv(messages[source],100,MPI_CHAR,MPI_ANY_SOURCE,tag,

MPI_COMM_WORLD, &p_requests[source]);

printf("Proc.

0 ya ha hecho IRECV para recibir de

source=%d\n\n",source);
}

/* …. Código por aquí enmedio …*/

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

MPI_Wait(&p_requests[source],&status);
printf("Tras el Wait del Receive: %s\n",messages[source]);

}

}
free(p_requests);
MPI_Finalize();
}

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010
  • Links de descarga
http://lwp-l.com/pdf18592

Comentarios de: Programación de Plataformas Paralelas II - Curso de Computación Científica en Clusters (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad