Mpi: message passing interface
Arquitectura de Computadores II Ingeniería en Informática (4º Curso) Universidad Carlos III de Madrid
Definición
MPI es una interfaz de paso de mensaje que representa un esfuerzo prometedor de mejorar la disponibilidad de un software altamente eficiente y portable para satisfacer las necesidades actuales en la computación de alto rendimiento a travésde la definición de un estándar de paso de mensajes universal.
William D. Gropp et al.
¿Que es MPI?
Es un estándar de ley. Estándar para una biblioteca de paso de mensajes. Implementaciones de MPI:
www-unix.mcs.anl.gov/mpi/mpich/ www.lam-mpi.org/
Otras direcciones:
www-unix.mcs.anl.gov/mpi/ www.mpi-forum.org/
Introducción: Enfoque práctico
Imaginemos quequeremos ejecutar el siguiente programa en 4 máquinas distintas de forma paralela:
int main(){ printf(“Hola mundo\n”); } gcc –Wall hola.c –o hola ./hola
Una opción, es ir a las 4 máquinas, y ejecutar el programa en ellas (POCO EFICIENTE).
Introducción: Enfoque práctico
Otra opción es utilizar MPI, y desde una maquina, ejecutar el siguiente código (MÁS EFICIENTE)
Int main() {MPI_Init(&argc,&argv); printf(“Hola mundo\n”); MPI_Finalice(); } mpicc –o hola hola.c mpirun –n 4 hola
Generalidades
MPI 1.2 tiene 129 funciones Las funciones principales de MPI son:
MPI_Init MPI_Finalize MPI_Comm_size MPI_Comm_rank MPI_Send MPI_Recv
Proceso
La unidad básica en MPI son los procesos. Tienen espacios de memoria independientes. Intercambio deinformación por paso 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).
Mi primer programa con MPI
#include #include “mpi.h” int main(int argc, char *argv[]) { int myrank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &size);printf(“Hola soy el proceso %d de %d\n”, myrank, size); MPI_Finalize(); exit(0);
Comunicadores
MPI agrupa los procesos implicados en una ejecución paralela en comunicadores. Un comunicador agrupa a procesos que pueden intercambiarse mensajes. El comunicador MPI_COMM_WORLD está creado por defecto y engloba a todos los procesos.
MPI_Init, MPI_Finalize
int MPI_Init(int *argc, char **argv)
Primera llamada de cada uno de los procesos MPI Establece entorno Un proceso solo puede hacer una llamada MPI_INIT Termina la ejecución en MPI Libera los recursos utilizados por MPI
int MPI_Finalize(void)
Identificación de procesos
MPI_Comm_rank (comm, &pid);
Devuelve en pid el identificador del proceso
dentro del comunicador comm especificado (ej.:MPI_COMM_WORLD).
MPI_Comm_size (comm, &npr);
Devuelve en npr el número de procesos del
comunicador especificado.
Tipos de mensajes (I)
Punto a punto: 1 emisor -1 receptor
Síncronos: El emisor se espera a que la
comunicación se produzca (o que el buffer del receptor este disponible). BLOQUEANTE
▪ Send, Recv, SendRecv, Bsend, Ssend, …
Asíncronos: El emisor NO se espera a quela
comunicación se produzca y se comprueba más tarde si se ha producido. NO BLOQUEANTES
▪ Isend, Irecv, …
Tipo de mensajes (II)
Multipunto: 1 o N emisores- 1 o N receptores
Bcast, Reduce, Barrier, Gather, Scatter,
AllReduce, AllAllgather, …
Ejemplo de comunicación
EMI REC
RTS RTR D
Petición de transmisión Aceptación de transmisión Envío de datos (de buffer deusuario a buffer de usuario
MPI_Send, MPI_Recv (I)
MPI_Send, MPI_Recv (II)
MPI_Send(buf, count, datatype, dest, tag, comm) MPI_Recv(buf, count, datatype, source, tag, comm)
buf: Dirección donde comienza el mensaje. count: número de elementos del mensaje. datatype: tipo del mensaje. dest/source: posición relativa del proceso fuente/ destino dentro del comunicador....
Regístrate para leer el documento completo.