Post on 11-Aug-2015
El estándar MPI (Messaging passing interface)
Juan Íñigo Monjas Procesamiento Paralelo
Índice
Introducción
Historia
Características
Funcionamiento
Mensajes
Llamadas
Funciones
Tipos
Compilación
Ejemplo
Bibliografía
Introducción
¿Qué es MPI? -Iniciales de Message Passing interface
-Es una especificación para programación de paso de mensajes
-Proporciona una librería de funciones
-Atiende a una estructura SPMD(Single Program/Multiple Data)
◦ Datos locales a cada maquina
◦ Todos los procesadores trabajan con el mismo programa, pero los datos pueden ser diferentes.
◦ Como asignar tareas diversas con datos diversos?
-Los datos se comparten por medio del paso de mensajes
Introducción
Lenguajes FORTRAN
C/C++
(Intentos de puente entre JAVA y MPI, mpiJava API )
Ventajas Programas portables
Más rápidos que los de otras bibliotecas
Gran funcionalidad
Soporta gran cantidad de tipos de datos
Incluyendo datos definidos por el usuario
Objetivos: Conseguir una comunicación eficiente.
Definir interfaz implementable en distintas plataformas sin cambios significativos.
Historia
Comenzó en Abril de 1992 con el Workshop on Standards for
Message Passing in Distributed Memory Environment patrocinado por
el Center for Research on Parallel Computing en Williamsburg, Virginia
Involucró cerca de 60 personas y 40 organizaciones de Europa y
EEUU
Empresas que han participado:
Universidades:
Historia
Evolución
1992
Comienzo
Nov 1992
Primera
versión
MPI 1
Feb 1993
Segunda
versión
MPI 1
Se crea
el MPI
fórum
Mayo 1994
Versión
final
MPI 1
Junio 1995
Versión
1.1
Jul 1997
Versión
2.0
Jun 2008
Versión
2.1
Sept 2009
Versión
2.2
Sept 2012
Versión
3,0
Implementaciones de libre
desarrollo para MPI MPICH
LAM
CHIMP
CRI/EPCC
LAM (Local Area Multiprocesor)
Desarrollo para procesamiento en paralelo que trabaja sobre redes formadas por procesadores independientes
Funciona en una gran cantidad de plataformas UNIX
Las diferentes máquinas pueden conectarse a través de una red de área local o a través de Internet
Características:
◦ Completa implementación del estándar MPI
◦ Existen diversas herramientas de desarrollo
◦ Posibilidad de mezclar diferentes tipos de maquinas en una misma red
◦ Es posible activar o desactivar nodos dentro de la red
◦ Si un nodo cae se detecta y es posible recuperarlo cuando vuelva a funcionar
◦ Existen librerías adicionales MPI para la programación LAM
MPICH (MPIChamaleon)
Implementación de alto rendimiento y
altamente portable
Sus objetivos son: Proporcionar una implementación MPI que soporte de manera
eficiente distintas plataformas de computación y comunicación
incluyendo, sistemas de sobremesa, memoria compartida o
arquitecturas multicore, redes de alta velocidad o
superordenadores (Blue Gene, Cray)
Permitir la investigación en MPI mediate una interfaz fácil de
extender a otras implementaciones.
Características
Creado para arquitecturas de memoria distribuida
Estandarización
Portabilidad Multicomputadores, redes , multiprocesadores…
Incluye definiciones para: Temporizadores y sincronizadores.
Control de errores.
Interacción con el ambiente en ejecución.
Comunicaciones colectivas: Gran número de rutinas para el movimiento de datos.
Existencia de implementaciones libres.
Funcionamiento
Siguiendo el modelo SPMD, el usuario escribirá su aplicación como
un proceso secuencial del que se lanzarán varias instancias que
cooperan entre sí.
Los procesos invocan diferentes funciones
MPI que permiten: iniciar, gestionar y finalizar procesos MPI
comunicar datos entre dos procesos
realizar operaciones de comunicación entre grupos
de procesos
crear tipos arbitrarios de datos
Mensajes en MPI
Compuesto por: Cuerpo del mensaje
Buffer
Tipo de dato
Count
Envoltura
Dirección destino
Dirección fuente
Información adicional para transmitir y entregar el
mensaje(etiqueta, comunicator)
Llamadas de MPI
4 clases: 1. Llamadas utilizadas para inicializar, administrar y
finalizar comunicaciones. MPI_Init, MPI_Finalice
2. Llamadas utilizadas para transferir datos entre un
par de procesos. MPI_Send, MPI_Recv
3. Llamadas para transferir datos entre varios
procesos. MPI_Bcast,
4. Llamadas utilizadas para crear tipos de datos
definidos por el usuario. MPI_Type_struct
Llamadas mas utilizadas para inicializar,
administrar y finalizar comunicaciones.
MPI dispone de 4 funciones básicas:-
MPI_Init Permite inicializar una sesión MPI.
Utilizada antes de llamar a cualquier otra función de MPI.
MPI_Finalize Permite terminar una sesión MPI
Última llamada a MPI que un programa realice.
Permite liberar la memoria usada por MPI.
MPI_Comm_size Determina el número total de procesos que pertenecen a un
comunicator.
MPI_Comm_rank Determina el identificador (rank) del proceso actual.
Comunicación punto a punto
Un procesador envía y otro recibe
Comunicación elemental en MPI
Dos modos de comunicación
Bloqueante
No bloqueante
Cuatro procedimientos para transmitir mensajes standard
synchronous.
buffered
ready
Comunicación punto a punto
MPI_Send (void *buf, int count, MPI Datatype dtype, int dest, int tag, MPI_Comm comm);
MPI_Recv (void *buf, int count, MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_status *status);
buf: localización en memoria de los datos count: Número de datos del tipo indicado enviados o recibidos dtype: tipo de datos enviados o recibidos dest/source: procesador destino/fuente tag: etiqueta de comunicación comm: comunicador de envío o recepción status: código de retorno de la operación de recepción
Comunicación colectiva
Comunicaciones de un procesador a
varios y de varios procesadores a uno
Se reduce la posibilidad de error
Código fuente más fácil de leer
Normalmente, la rutina colectiva es más
rápida
Comunicación colectiva
Operación broadcast: Un único proceso
envía copia de los mismos datos a todos
los procesos de un grupo
MPI_Bcast (void *buf, int count,
MPI_Datatype dtype, int root, MPI_Comm
comm);
Añadir el fichero
#include "mpi.h", Al principio en todos los
programas
Contiene
Definiciones
Macros
Prototipos
Tipos MPI básicos
Compilación en MPI
C ◦ % mpcc -o programa programa.c
% mpcc -o programa programa.c
FORTRAN ◦ % mpf77 -o programa programa.f
% mpf90 -dalign -o programa programa.f
Ejecución ◦ mprun -np num_procesos programa
o para ejecutar "programa_mpi" en 5 procesos:
o % mprun -np 5 programa_mpi
Ejemplo de un programa básico en MPI #include <stdio.h> #include “mpi.h” int main( argc, argv ) int argc; char **argv; { int rank, size; MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); printf( "Hello world from process %d of %d\n", rank, size ); MPI_Finalize(); return 0; }
% mpicc -o helloworld helloworld.c
% mpirun -np 4 helloworld
Hello world from process 0 of 4
Hello world from process 3 of 4
Hello world from process 1 of 4
Hello world from process 2 of 4
%
Bibliografía
www.wikipedia.org
www.informatica.uv.es
www.mpich.org
www.mcs.anl.gov (ejercicios resueltos)
www.cs.kent.edu/~farrell/dist/ref/implementations.html
www.mpi-forum.org
¿PREGUNTAS?