Publicado el 18 de Agosto del 2020
688 visualizaciones desde el 18 de Agosto del 2020
4,3 MB
90 paginas
Creado hace 13a (08/02/2012)
Curso de de Promoción
Curso
Programación en el
Programación
Promoción Educativa
Educativa
en el Supercomputador
Supercomputador Ben Ben Arabi
Arabi
Programación con MPI
con MPI
Programación
Javier Cuenca
Universidad de Murcia
Indice de la
Indice
de la sesión
sesión
Introducción
Comunicaciones punto a punto
Comunicaciones colectivas
Agrupación de datos
Comunicadores y topologías
MPI-2
Uso de MPI en el supercomputador BenArabi
Ejercicios prácticos
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
22
Indice de la
Indice
de la sesión
sesión
Introducción.
Nociones básicas
Ejemplo inicial
Directivas
Constructores
Claúsulas de alcance de datos
Funciones de librería
Variables de entorno
Ejemplos
Tareas en OpenMP 3.0
Uso de OpenMP en el supercomputador Ben Arabi
Ejercicios prácticos
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
33
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
MPI-2, HeteroMPI, FT-MPI
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
44
Introducción..
Introducción
¿¿QuéQué ofrece
ofrece??
Estandarización
Portabilidad: multiprocesadores, multicomputadores, redes, heterogéneos, ...
Buenas prestaciones, ..., si están disponibles para el sistema
Amplia funcionalidad
Implementaciones libres (mpich, lam, ...)
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
55
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
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
66
Introducción..
Introducción
Ejemplo: : hello.c
hello.c
Ejemplo
#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);
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
77
Introducción..
Introducción
Ejemplo: : hello.c
hello.c
Ejemplo
#include <stdio.h>
#include <string.h>
#include "mpi.h"
main(int argc, char*argv[]) {
if (name != 0)
{
int name, p, source, dest, tag = 0;
char message[100];
MPI_Status status;
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);
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&name);
MPI_Comm_size(MPI_COMM_WORLD,&p);
}
else
{
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();
}
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
88
Introducción..
Introducción
Ejemplo FORTRAN
Ejemplo
FORTRAN: : fortran_hello
fortran_hello
CHARACTER*20 msg
INTEGER myrank, ierr, status(MPI_STATUS_SIZE)
INTEGER tag = 99
…
CALL MPI_COMM_RANK( MPI_COMM_WORLD, myrank, ierr)
IF (myrank .EQ. 0) THEN
msg = “Hello there”
CALL MPI_SEND( msg, 11, MPI_CHARACTER, 1, tag, MPI_COMM_WORLD, ierr)
ELSE IF (myrank .EQ. 1) THEN
CALL MPI_RECV( msg, 20, MPI_CHARACTER, 0, tag, MPI_COMM_WORLD, status,
ierr)
END IF
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
99
Introducción..
Introducción
Ejemplo de de usouso
Ejemplo
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
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
1010
Introducción..
Introducción
Ejemplo de de usouso
Ejemplo
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 ( )
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
1111
Introducción..
Introducción
Ejemplo de de usouso
Ejemplo
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
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
1212
Introducción..
Introducción
FORTRAN. . Ejemplo
FORTRAN
Ejemplo de de usouso
Tipos MPI Básicos
MPI_INTEGER
MPI_REAL
MPI_DOUBLE_PRECISION
MPI_COMPLEX
MPI_LOGICAL
MPI_CHARACTER
MPI_BYTE
MPI_PACKED
INTEGER
REAL
DOUBLE PRECISION
COMPLEX
LOGICAL
CHARACTER(1)
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
1313
Introducción..
Introducción
Ejemplo de de usouso
Ejemplo
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
MPI_Status
*estado)
comunicador ,
MPI_ANY_TAG
MPI_ANY_SOURCE
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
1414
Indice de la
Indice
de la sesión
sesión
Introducción
Comunicaciones punto a punto
Comunicaciones colectivas
Agrupación de datos
Comunicadores y topologías
MPI-2
Uso de MPI en el supercomputador BenArabi
Ejercicios prácticos
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
1515
Comunicaciones punto
Comunicaciones
Tipos de de comunicaciones
Tipos
punto a a punto
punto..
comunicaciones sincronas
sincronas
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.
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
1616
Comunicaciones punto
Comunicaciones
Comunicación asíncrona
Comunicación
punto a a punto
punto. .
asíncrona ((nonblocking
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
Facultad de Informática. Universidad de Murcia
Facultad de Informática. Universidad de Murcia
Programación en el Supercomputador Ben Arabí
dor Ben Arabí
Programación en el Supercomputa
1717
Comunicaciones punto
Comunicacio
Comentarios de: Programación con MPI (0)
No hay comentarios