



(5 opiniones)
Al diseñarse MPI, se tomaron en cuenta las características más atractivas de los sistemas existentes para el paso de mensajes, en vez de seleccionar uno solo de ellos y adoptarlo como el estándar. Resultando así, en una fuerte influencia para MPI los trabajos hechos por IBM, INTEL, NX/'', Express, nCUBE's Vernex, p4 y PARMACS. Otras contribuciones importantes provienen de Zipcode, Chimp, PVM, Chameleon y PICL.
La meta de MPI o Message Passing Interface (Interfaz de paso de mensajes), es el desarrollar un estándar (que sea ampliamente usado) para escribir programas que implementen el paso de mensajes. Por lo cual el interfaz intenta establecer para esto un estándar práctico, portable, eficiente y flexible.
El esfuerzo para estandarizar MPI involucro a cerca de 60 personas de 40 organizaciones diferentes principalmente de U.S.A. y Europa. La mayoría de los vendedores de computadoras concurrentes estaban involucrados con MPI, así como con investigadores de diferentes universidades, laboratorios del gobierno e industrias. El proceso de estandarización comenzó en el taller de estándares para el paso de mensajes en un ambiente con memoria distribuida, patrocinado por el Centro de Investigación en Computación Paralela en Williamsbur Virginia (Abril 29-30 de 1992). Se llego a una propuesta preliminar conocida como MPI1, enfocada principalmente en comunicaciones punto a punto sin incluir rutinas para comunicación colectiva y no presentaba tareas seguras. El estándar final por el MPI fue presentado en la conferencia de Supercomputación en Noviembre de 1993, constituyéndose así el foro para el MPI.
En un ambiente de comunicación con memoria distribuida en la cual las rutinas de paso de mensajes de nivel bajo, los beneficios de la estandarización son muy notorios. La principal ventaja al establecer un estándar para el paso de mensajes es la portabilidad y el ser fácil de utilizar.
MPI es un sistema complejo, el cual comprende 129 funciones, de las cuales la mayoría tiene muchos parámetros y variantes.
Metas del MPI
Modelo de programación
En el modelo de programación MPI, un computo comprende de uno o más procesos comunicados a través de llamadas a rutinas de librerías para mandar (send) y recibir (receive) mensajes a otros procesos. En la mayoría de las implementaciones de MPI, se crea un conjunto fijo de procesos al inicializar el programa, y un proceso es creado por cada tarea. Sin embargo, estos procesos pueden ejecutar diferentes programas. De ahí que, el modelo de programación MPI es algunas veces referido como MPMD (multiple program multiple data) para distinguirlo del modelo SPMD, en el cual cada procesador ejecuta el mismo programa.
Debido a que el número de procesos en un cómputo de MPI es normalmente fijo, se puede enfatizar en el uso de los mecanismos para comunicar datos entre procesos. Los procesos pueden utilizar operaciones de comunicación punto a punto para mandar mensajes de un proceso a otro, estas operaciones pueden ser usadas para implementar comunicaciones locales y no estructuradas. Un grupo de procesos puede llamar colectivamente operaciones de comunicación para realizar tareas globales tales como broadcast, etc. La habilidad de MPI para probar mensajes da como resultado el soportar comunicaciones asíncronas. Probablemente una de las características más importantes del MPI es el soporte para la programación modular. Un mecanismo llamado comunicador permite al programador del MPI definir módulos que encapsulan estructuras internas de comunicación (estos módulos pueden ser combinados secuencialmente y paralelamente).
Bases
Aunque MPI es un sistema complejo y multifacético, podemos resolver un amplio rango de problemas usando seis de sus funciones, estas funciones inician y terminan un cómputo, identifican procesos, además de mandar y recibir mensajes.
Todas las funciones (excepto las dos primeras) toman un manejador (handle) ``comunicador'' como argumento. El comunicador identifica el grupo de procesos y el contexto en el cual la operación se debe realizar. Como se menciono anteriormente, los comunicadores proveen un mecanismo para identificar subconjuntos de procesos durante el desarrollo de programas modulares y para garantizar que los mensajes provistos con diferentes propósitos no sean confundidos. Por ahora, es suficiente proveer el valor de default MPI_COMM_WORLD, el cual identifica todos los procesos en un cómputo.
Las funciones MPI_INT y MPI_FINALIZE son usadas para iniciar y terminar un computo MPI, respectivamente MPI_INIT debe ser llamada antes que cualquier otra función MPI y debe ser llamada solamente una vez por proceso. Ninguna función MPI puede ser llamada después de MPI_FINALIZE.
Las funciones MPI_COMM_SIZE y MPI_COMM_BANK determinan el número de procesos en el cómputo actual y el identificador (entero) asignado al proceso actual, respectivamente. Los procesos en un grupo de procesos son identificados con un único y continuo número (entero), empezando en 0.
El estándar del MPI no especifica como un cómputo paralelo es iniciado. Pero un mecanismo típico podría ser el especificar desde la línea de comandos el número de procesos a crear.
Determinismo
Especificaciones en el contexto del lenguaje C
Operaciones globales
Como ya se ha explicado, los algoritmos paralelos ejecutan llamadas a operaciones para coordinar la comunicación en múltiples procesos. Por ejemplo, todos los procesos pueden necesitar cooperar para invertir una matriz distribuida o para sumar un conjunto de números distribuidos en cada proceso. Claramente, estas operaciones globales pueden ser implementadas por un programador usando las funciones send y receive. Por conveniencia y para permitir la optimización, MPI provee un conjunto especializado de funciones colectivas de comunicación que obtienen operaciones de este tipo.
Comunicación asíncrona
La necesidad por tener una comunicación asíncrona puede presentarse cuando un computo necesita acceder los elementos de un dato estructurado compartido en una manera no estructurada. Una implementación aproximada es el encapsular los datos estructurados en un conjunto de tareas de datos especializados, en la cual las peticiones de lectura y escritura pueden ser ejecutadas. Este método no es eficiente en MPI debido a su modelo de programación MPMD.
Una implementación alternativa con MPI, es el distribuir las estructuras de datos compartidas entre los procesos existentes, los cuales deben solicitar periódicamente las solicitudes pendientes de lectura y escritura. Para esto MPI presenta tres funciones MPI_IPROBE, MPI_PROBE, MPI_GET_COUNT.
Modularidad
Conocemos ya tres formas generales de composición que puede ser usadas en la construcción modular de programas paralelos, a saber, secuencial, paralelo y concurrente.
MPI soporta la programación modular a través de su mecanismo de comunicador (comm, el cual provee la información oculta necesaria al construir un programa modular), al permitir la especificación de componentes de un programa, los cuales encapsulan las operaciones internas de comunicación y proveen un espacio para el nombre local de los procesos.
Una operación de comunicación MPI siempre especifica un comunicador. Este identifica el grupo de procesos que están comprometidos en el proceso de comunicación y el contexto en el cual la comunicación ocurre. El grupo de procesos permite a un subconjunto de procesos el comunicarse entre ellos mismos usando identificadores locales de procesos y el ejecutar operaciones de comunicación colectivas sin meter a otros procesos. El contexto forma parte del paquete asociado con el mensaje. Una operación receive puede recibir un mensaje solo si este fue enviado en el mismo contexto. Si dos rutinas usan diferentes contextos para su comunicación interna, no puede existir peligro alguno en confundir sus comunicaciones.
A continuación se describen las funciones que permiten a los comunicadores ser usados más flexiblemente.
Instalación
El paquete rpm de LAM/MPI que se va ha instalar es el que nos provee el cd de Red Hat Linux 6.2, para llevar a cabo su instalación se realizará lo siguiente:
$mount /mnt/cdrom
$cd /mnt/cdrom/RedHat/RPMS/
$rpm -ivh lam-6.3.1-4.i386.rpm
En el sitio web http://www.lam-mpi.org/download/ se podrá obtener la última versión de dicho software.
Configuración
En el directorio /usr/boot crearemos los siguiente archivos con sus correspondientes configuraciones.
lamd $inet_topo
localhost pc1 pc2 ...
Para testear si la configuración es correcta se deberá de realizar lo siguiente:
$lamboot
Si la salida muestra algún error entonces es que hay algún problema con la instalación, comunicación entre nodos, etc.
Se generará el siguiente fichero llamado makefile, que tendrá la siguiente estructura:
.SILENT:
CFLAGS=-I/usr/include/lam -L/usr/lib/lam
CC=mpicc
nombre_programa : nombre_programa.c $(CC) $(CFLAGS) nombre_programa.c -o nombreprograma
Para compilar los programas LAM/MPI se utilizará el siguiente comando:
$make -f makefile
Una vez compilado el programa y antes de ejecutarlo se necesitará primero arrancar el sistem Multicomputador de Area Local, esto se hace a través del comando lamboot.
Para ejecutar el programa se utilizará el siguiente comando:
$
mpirun -np n
de procesos nombre_programa argumentos
|