Mpi

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 3

Interfaz de paso de mensaje MPI

MPI ("Message Passing Interface", Interfaz de Paso de Mensajes) es un estndar que define la sintaxis y la semntica de las funciones contenidas en una biblioteca de paso de mensajes diseada para ser usada en programas que exploten la existencia de mltiples procesadores. El paso de mensajes es una tcnica empleada en programacin concurrente para aportar sincronizacin entre procesos y permitir la exclusin mutua, de manera similar a como se hace con los semforos, monitores, etc. Los elementos principales que intervienen en el paso de mensajes son el proceso que enva, el que recibe y el mensaje. Dependiendo de si el proceso que enva el mensaje espera a que el mensaje sea recibido, se puede hablar de paso de mensajes sncrono o asncrono. En el paso de mensajes asncrono, el proceso que enva, no espera a que el mensaje sea recibido, y contina su ejecucin, siendo posible que vuelva a generar un nuevo mensaje y a enviarlo antes de que se haya recibido el anterior. Por este motivo se suelen emplear buzones, en los que se almacenan los mensajes a espera de que un proceso los reciba. Generalmente empleando este sistema, el proceso que enva mensajes slo se bloquea o para, cuando finaliza su ejecucin, o si el buzn est lleno. En el paso de mensajes sncrono, el proceso que enva el mensaje espera a que un proceso lo reciba para continuar su ejecucin. Por esto se suele llamar a esta tcnica encuentro, o rendezvous. Dentro del paso de mensajes sncrono se engloba a la llamada a procedimiento remoto, muy popular en las arquitecturas cliente/servidor.

Caractersticas de MPI
Estandarizacin. Portabilidad: multiprocesadores, multicomputadores, redes, heterogneos, ... Buenas prestaciones. Amplia funcionalidad. Existencia de implementaciones libres (mpich, LAM-MPI, ...) La especificacin detalla las funciones que se pueden utilizar, no el modo como se compilan y lanzanejecutan los programas, lo cual puede variar de una implementacin a otra. Siguiendo el modelo SPMD, el usuario escribir su aplicacin como un proceso secuencial del que se lanzarn 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 comunicacin entre grupos de procesos crear tipos arbitrarios de datos

Fundamentos de MPI
Con MPI el nmero de procesos requeridos se asigna antes de la ejecucin del programa, y no se crean procesos adicionales mientras la aplicacin se ejecuta. A cada proceso se le asigna una variable que se denomina rank, la cual identifica a cada proceso, en el rango de 0 a p-1, donde p es el nmero total de procesos. El control de la ejecucin del programa se realiza mediante la variable rank; la variable rank permite determinar que proceso ejecuta determinada porcin de cdigo. En MPI se define un

comunicator como una coleccin de procesos, los cuales pueden enviar mensajes el uno al otro; el comunicator bsico se denomina MPI_COMM_WORLD y se define mediante un macro del lenguaje C. MPI_COMM_WORLD agrupa a todos los procesos activos durante la ejecucin de una aplicacin. Las llamadas de MPI se dividen en cuatro clases: 1. Llamadas utilizadas para inicializar, administrar y finalizar comunicaciones. 2. Llamadas utilizadas para transferir datos entre un par de procesos. 3. Llamadas para transferir datos entre varios procesos. 4. Llamadas utilizadas para crear tipos de datos definidos por el usuario.

Llamadas utilizadas para inicializar, administrar y finalizar comunicaciones


MPI dispone de 4 funciones primordiales que se utilizan en todo programa con MPI. Estas funciones son: MPI_Init permite inicializar una sesin MPI. Esta funcin debe ser utilizada antes de llamar a cualquier otra funcin de MPI. MPI_Finalize permite terminar una sesin MPI. Esta funcin debe ser la ltima llamada a MPI que un programa realice. Permite liberar la memoria usada por MPI. MPI_Comm_size permite determinar el nmero total de procesos que pertenecen a un comunicator. MPI_Comm_rank permite determinar el identificador (rank) del proceso actual.

Implementaciones
La implementacin del lenguaje para MPI es, en general, los lenguajes que intentan optimizar el tiempo de ejecucin. La mayora de las implementaciones de MPI se realizan en una combinacin de C, C + + y el lenguaje ensamblador, C ++, Fortran. Sin embargo, el idioma y la aplicacin de usuario final idioma son, en principio, siempre desasociado. La etapa inicial de aplicacin del estndar MPI 1.x fue MPICH, nacida en Argonne National Laboratory y la Universidad del Estado de Mississippi. IBM tambin fue una de las primeras en implementar el estndar MPI, y la mayora de las empresas de superordenador a principio de los aos 90 comercializando MPICH o implementando su propia aplicacin del estndar MPI 1.x. LAM/MPI del Centro de Supercomputacin de Ohio es otra de las primeras en implementarlo. El Argonne National Laboratory continu desarrollando MPICH durante ms de una dcada, y ahora ofrece MPICH2 que se corresponde con la implementacin del estndar MPI-2.1 LAM/MPI, y otra serie de esfuerzos recientes de MPI se han fusionado para formar un nuevo proyecto mundial, el llamado OpenMPI, pero este nombre no implica ninguna relacin con el estndar. Microsoft ha aadido una MPI al esfuerzo a sus Kit Cluster Computing (2005), basada en MPICH2. MPI se ha convertido y sigue siendo un elemento vital para la interfaz de programacin concurrente a esta fecha de hoy. Muchas distribuciones de Linux incluyen MPI (uno o ambos MPICH y LAM, como ejemplos particulares), pero es mejor obtener las ltimas versiones de MPI de desarrolladores desde los sitios de desarrollo. Muchos vendedores de distribuciones personalizadas de las actuales implementaciones de software libre, que se centran en un mejor rendimiento y estabilidad. Adems de la corriente principal de MPI para programacin de alto rendimiento, MPI se ha utilizado ampliamente con Python, Perl, Java. Estas comunidades estn creciendo. Basados en MATLAB MPI aparecen en muchas formas, pero no hay un consenso sobre una nica manera de utilizar MPI con MATLAB. Las siguientes secciones detallan algunos de estos esfuerzos.

Python

Hay por lo menos cinco intentos conocidos de aplicar MPI para Python: mpi4py, PyPar, PyMPI, MYMPI, y en el submdulo ScientificPython MPI. PyMPI es notable porque se trata de una variante de python intrprete multi-nodo de la aplicacin de la propia intrprete, ms que el cdigo se ejecuta el intrprete. Implementa la mayor parte de la especificacin MPI y trabaja automticamente con el cdigo compilado que necesita para hacer llamadas MPI. PyPar, MYMPI, y el mdulo ScientificPython estn diseados para trabajar como un tpico mdulo realizando una declaracin de importacin. Hacen el trabajo del codificador para decidir cundo y dnde pertenece la llamada a MPI_Init.

OCaml
El Mdulo OCamlMPI implementa un gran subconjunto de las funciones MPIy est en uso activo en la computacin cientfica. Para tener una idea de su madurez: se inform sobre la lista de Ocaml que una lnea de once mil OCaml programa fue "MPI-ficados", utilizando el mdulo, con un adicional de 500 lneas de cdigo y ligera reestructuracin y ha corrido con excelentes resultados hasta 170 nodos en un superordenador.

Java
Aunque Java no dispone de un funcionario MPI vinculantes, ha habido varios intentos de puente de Java y MPI, con diferentes grados de xito y compatibilidad. Uno de los primeros intentos fue Bryan Carpenter's mpiJava, bsicamente una coleccin de envoltorios JNI de la biblioteca local MPI de C, cuyo resultado es un hbrido con limitada portabilidad en la prctica, y que tiene que ser recompilado con la biblioteca especfica de la biblioteca MPI que se utiliza. Sin embargo, este proyecto original defini el mpiJava API (de hecho una API MPI para Java equivalente a la de C ++ o muy similar), que posteriormente otros proyectos Java MPI han utilizado. Una alternativa, aunque menos utilizada, es la API MPJ, diseada para ser ms orientada a objetos y ms cerca a los convenios de codificacin de Sun Microsystems. Otros que utilizan la API de las bibliotecas Java MPI pueden ser dependientes de la biblioteca local, o llevar a cabo las funciones de paso de mensajes en Java, mientras que algunos como (en ingls) P2PMPI tambin permiten la funcionalidad y operacin de plataforma mixtos. Algunas de las partes ms difciles de cualquier aplicacin para Java MPI surgen de las limitaciones del propio lenguaje de programacin y sus peculiaridades, como la falta de los punteros explcitos y espacio de las direcciones de memoria lineales para sus objetos, que hacen la transferencia de arrays multidimensionales y objetos complejos ineficientes. Los mtodos utilizados por lo general implican la transferencia de una lnea a la vez y/o la realizacin explcita de serializacin y emiten tanto en el envo y la recepcin final, simulando C o FORTRAN como los arrays por el uso de un array unidimensional, y punteros a los tipos primitivos por el uso de un solo elemento de los vectores, lo que da lugar a estilos de programacin bastante extraos de las convenciones Java. Una de las principales mejoras es MPJ Express por Aamir Shafi y supervisado por Bryan Carpenter y Mark Baker. Como plataforma bsica se usa Fast Ethernet, avances de la tecnologa JVM ahora disponible programas Java escritos en Java a sus rivales C homlogos. Por otra parte, las mejoras en el hardware especializados de red prosiguieron, disminuyendo los costes de comunicacin a un par de microsegundos. La cuestin clave en la actualidad no es para debatir entre s es mejor la JNI con respecto al Java puro, sino el proporcionar un mecanismo flexible de los programas de intercambiar los protocolos de comunicacin. El objetivo de este proyecto es proporcionar un sistema de mensajera de referencia de Java basada en el estndar MPI. La aplicacin sigue una arquitectura basada en una idea de los controladores de dispositivo.

También podría gustarte