Title: SISTEMAS DISTRIBUIDOS Y PARALELOS
1SISTEMAS DISTRIBUIDOS Y PARALELOS
- MPI Message Passing Interface
- Dto. De Informática
- UNSL
2 Ãndice
- Introducción
- Procesos
- Comunicación punto a punto
- Ejemplos
- Operaciones Colectivas
- Ejemplos
3Introducción a MPI
- Interfase de pasaje de mensajes, propuesto como
Estándar académico e industrial (Forum
Internacional) - Diseñada para lograr alta performance, tanto en
máquinas paralelas como en clusters de Pcs. -
- Orientada preferentemente a redes homogéneas
4Qué incluye el estándar?
- Comunicaciones Punto a Punto
- Operaciones Colectivas
- Agrupamientos de Procesos
- TopologÃas de Comunicación
- Soporte para Fortran y C
5Qué no incluye el estándar?
- Comunicaciones de Memoria Compartida
- Soporte de SO para recepciones por interrupción
- Ejecución remota de procesos
- Soporte para threads
- Soporte para control de tareas
6PROCESOS
- La unidad básica en MPI son los procesos.
- Tienen espacios de memoria independientes.
- Intercambio de información por pasaje de
mensajes. - Introduce en concepto de comunicadores (grupo de
procesos más contexto). - Cada proceso se le asigna un identificador
interno propio de MPI (rank).
7PVM vs. MPI
MPI creación estática modelo SPMD (MPMD) identi
ficadores correlativos 0 a P-1
- PVM
- creación dinámica
- modelos MPMD
- (SPMD)
- identificadores no correlativos (tids)
MPI PVM PP - spawn()
8PROCESOS
- gt mpirun -machinefile ltmachine-file namegt
- -np ltnumber of processesgt
- ltprogram name and argumentsgt
- Ejemplo
- gtmpirun np 4 hello
Creación estática de procesos Modelo de
programación SPMD
9PROCESOS (SPMD)
- include mpi.h
- main(int argc, char,argv)
-
- int nproc, mytid
- MPI_Init(argc,argv)
- MPI_Comm_size(MPI_COMM_WORLD, nproc)
- MPI_Comm_Rank(MPI_COMM_WORLD, mytid)
- / cuerpo de programa /
- MPI_Finalize()
Definición de Funciones MPI
Comunicador
0ltmytidltnproc
10PROCESOS (Master/Slave)
- include mpi.h
- main(int argc, char,argv)
-
- int nproc, mytid
- MPI_Init(argc,argv)
- MPI_Comm_size(MPI_COMM_WORLD, nproc)
- MPI_Comm_Rank(MPI_COMM_WORLD, mytid)
- if (mytid 0)
- master( )
- else
- slave( )
- MPI_Finalize()
MIMD Debe hacerse explÃcitamente
11MPI Comunicadores
- Un comunicador es una colección de procesos, los
cuales se comunican a través del envÃo y
recepción de mensajes.
12MPI Comunicadores
- Un comunicador es una colección de procesos, los
cuales se comunican a través del envÃo y
recepción de mensajes. - Un comunicador (básico) está formado por
- Un grupo de procesos
- Un contexto
Colección Ordenada de Procesos
- Objeto Único definido por el sistema.
- Dos comunicadores con el mismo grupo de procesos,
tienen distintos contextos. - Útil en el chequeo de comunicaciones el mensaje
recibido por un proceso perteneciente al
comunicador debió ser enviado por un procesador
del mismo comunicador.
13Comunicaciones punto a punto
Los que establecen comunicación (Puntos) pueden
ser especÃficos (fuente y destino
conocido) Pueden ser Puntos cualesquiera
(MPI_ANY_SOURCE)
14Comunicaciones
- Conceptos
- Buffer de la aplicación espacio de memoria que
contiene datos a enviar o recibidos por el
programa - Buffer del sistema espacio de memoria del
sistema para almacenar mensajes. Un mensaje den
el buffer de la aplicación debe ser copiado
a/desde el buffer de sistema para las operaciones
send/receive. Permite a la comunicación ser
asincrónica
15Comunicaciones punto a puntobásicas
Comunicaciones realizadas entre dos procesos
include "mpi.h int MPI_Send( void buf, int
count, MPI_Datatype datatype,
int dest, int tag, MPI_Comm comm )
include "mpi.h" int MPI_Recv( void buf, int
count, MPI_Datatype datatype, int source,
int tag, MPI_Comm comm, MPI_Status status )
16Comunicaciones punto a puntobásicas
El parámetro status
En este parámetro se retorna información
adicional Es una estructura predefinida
MPI_Status status
Información El Tipo del mensaje recibido
status.MPI_TAG El número del emisor
status.MPI_SOURCE El código de error
status.MPI_TAG
17Tipos de datos
18Comunicaciones punto a punto (Ejemplo)
include "mpi.h main( argc, argv ) int argc
char argv char message20 int
myrank MPI_Status status MPI_Init(
argc, argv ) MPI_Comm_rank(
MPI_COMM_WORLD, myrank ) if (myrank 0)
/ código para proceso cero /
strcpy(message,"Hello, world")
MPI_Send(message, strlen(message), MPI_CHAR, 1,
99, MPI_COMM_WORLD) else /
código para el proceso 1/
MPI_Recv(message, 20, MPI_CHAR, 0, 99,
MPI_COMM_WORLD, status)
printf("recibido s\n", message)
MPI_Finalize()
Send/recv básicos
mpicc o hello hello.c mpirun np 2 hello
19Comunicaciones punto a punto
Hay dos modelos Bloqueante No Bloqueante Hay
cuatro modos Básicos Ready Con Buffer Sincrónico
20Comunicaciones punto a punto
EJERCICIOS PRELIMINARES Compilar y ejecutar el
programa Hello variando el número de procesos de
modo que n Procesos envÃen el mensaje
Saludos desde el proceso al Proceso 0
para que este imprima "Hola, soy el proceso 0
(hay n procesos) y recibo (mensaje)
Ejemplo de output Hola, soy el proceso 0 (hay
4 procesos) y recibo Saludos desde el proceso
0 Hola, soy el proceso 0 (hay 4 procesos) y
recibo Saludos desde el proceso 2 Hola, soy el
proceso 0 (hay 4 procesos) y recibo Saludos
desde el proceso 1 Hola, soy el proceso 0 (hay 4
procesos) y recibo Saludos desde el proceso 3
21Comunicaciones punto a punto
EJERCICIOS PRELIMINARES Modificar el programa
de tal forma que el proceso de rango i mande el
mensaje al proceso (i1)p.
Ejemplo de output Hola, soy el proceso 0 (hay
4 procesos) y recibo Saludos del proceso 3
Hola, soy el proceso 1 (hay 4 procesos) y
recibo Saludos del proceso 0 Hola, soy el
proceso 3 (hay 4 procesos) y recibo Saludos del
proceso 2 Hola, soy el proceso 2 (hay 4
procesos) y recibo Saludos del proceso 1
22Comunicaciones Colectivas
Comunicaciones realizadas entre un grupo de
procesos. Son bloqueantes.
MPI ofrece una gran variedad de este tipo de
comunicaciones
MPI_Barrier - Sincronización mediante barrera
MPI_Bcast - Enviar datos a todos los
procesos MPI_Gather - Obtener datos de todos
los procesos MPI_Scatter - Repartir datos sobre
todos los procesos MPI_Reduce - Realizar una
operación (suma, máximo, ..) sobre todos los
procesos
23Comunicaciones Colectivas
24Comunicaciones Colectivas
25MPI_Bcast Distribuir datos a todos los procesos
26MPI_Bcast (Ejemplo) Distribuir datos a todos los
procesos
Qué hace el programa?
27MPI_Reduce Recoge datos de todos los procesos
28MPI_Reduce (Ejemplo)
Qué hace el programa?
29MPI_Scatter Recoge datos de todos los procesos
30MPI_BarrierSincronización de un grupo
Bloquea hasta que todos los procesos han
alcanzado esta llamada
31MPI Comunicadores
Podemos crear nuestros propios comunicadores 1)
Creando un grupo de procesos 2) Asignando un
Contexto En MPI trabajamos con Grupos o
Comunicadores, nunca con Contextos.
32Funciones para Comunicadores
- Creación
- MPI_Comm_create( ?Old_Comm, ?Group_Proc,
?New_Comm) - MPI_Comm_dup( ?Comm, ?New_Comm)
- MPI_Comm_split( ?Old_Comm, ?split_key, ?New_Comm)
- Eliminación
- MPI_Comm_free( ??Comm)
- Información
- MPI_Comm_rank( ?Comm, ?Rank)
- MPI_Comm_compare(?Comm1, ?Comm2, ?Result)
33Funciones para Grupos
- Creación
- MPI_Comm_incl( ?Group, ?NP, ?Who, ?New_Group)
- MPI_Comm_excl( ?Group, ?NP, ?Who, ?New_Group
- MPI_Group_range_incl( ?Group, ?NP, ?Rango3,
?New_Group) - MPI_Group_range_excl(?Group, ?NP, ?Rango3,
?New_Group) - MPI_Group_difference( ?Group1, ?Group2,
?New_Group) - MPI_Group_intersection( ?Group1, ?Group2,
?New_Group) - MPI_Group_union( ?Group1, ?Group2, ?New_Group)
34Funciones para Grupos
- Eliminación
- MPI_Comm_free( ?Group)
- Información
- MPI_Comm_group( ?Comm, ?Group)
- MPI_Group_rank( ?Group, ?Rank)
- MPI_Group_compare(?Group1, ?Group2, ?Result)
- MPI_Group_translate_ranks(
- ?Group1, ? NP, ? Ranks1, ? Group2, ?Ranks2)
35TopologÃas
- Un comunicador puede tener una topologÃa
asociada. - Permite asociar distintos esquemas de
direccionamiento a un grupo. - Es una topologÃa virtual.
- Dos tipos de topologÃa en MPI
- Cartesiana o grilla
- Grafos
36Funciones para TopologÃa Cartesiana
- Creación
- MPI_Cart_create(?Comm, ?NDim, ?Dim, ?Cir,
?Reorder, ?Cart_Comm) - Información
- MPI_Cart_coords(?Comm, ?rank, ?Max_Dim,
?Coord) - MPI_Cartdim_get(?Comm, ?NDims)
- MPI_Cart_rank(?Comm, ?Coord, ?Rank)
- Existen otras de bajo nivel.
37Funciones para TopologÃa de Grafo
- Creación
- MPI_Graph_create(?Comm, ?Nnodes, ?index,
?edges, ?Reorder, ?Cart_Comm) - Información
- MPI_Cart_coords(?Comm, ?rank, ?Max_Dim,
?Coord) - MPI_Graphdims_get(?Comm, ?NNodes, ?NEdges)
- MPI_Graph_neighbors(?Comm, ?Rank, ?Max_neigh,
?Neigh) - MPI_Graph_neighbors_count(?Comm, ?Rank, ?NNeigh)
- También existen otras de bajo nivel.