next up previous contents
Next: 2.3.7.3 Implementación Up: 2.3.7 MPI Previous: 2.3.7.1 Historia   Índice General


2.3.7.2 Diseño

Para el diseño de MPI se buscó implementar las mejores características de algunos sistemas de paso de mensajes existentes (entre ellos PVM); esto a diferencia de procesos habituales en los cuales se selecciona un sistema existente y se adopta como estándar.

MPI busca el diseño de una interfaz para programas de aplicación (API). El objetivo del proyecto es exclusivamente la definición de la interfaz, sin involucrarse en detalles de implementación de la misma. Se busca que la interfaz sea genérica y versátil a fin de maximizar su audiencia posible. La interfaz debería poder implementarse en equipos de distintos fabricantes, sin requerir cambios significativos en el software de sistema y comunicaciones del equipo. Se busca también que sea eficiente, evitando operaciones innecesarias, permitiendo la superposición de comunicación y cálculos, y el uso de hardware auxiliar de comunicaciones. Sin embargo, la interfaz también debe funcionar eficientemente si no se cuenta con dicho hardware. A fin de extender aún más el rango de equipos en que se puede utilizar, la interfaz debe permitir que se realicen implementaciones en ambientes heterogéneos; se busca que sea semánticamente similar a otras opciones existentes (como PVM), y que no sea dependiente de algún lenguaje de programación en particular.

El estándar MPI únicamente proporciona la definición de las interfaces; se deja a cada fabricante la opción de implementar esta especificación de manera más conveniente. De esta forma cada fabricante es libre de aprovechar las facilidades del hardware para el que se implemente MPI, siempre que se respete la semántica de la interfaz. En el diseño de MPI se tuvo cuidado de mantener compatibilidad semántica con las operaciones que puede realizar el hardware de alto rendimiento de algunos fabricantes.

MPI es una API para paso de mensajes, junto con especificaciones, tanto semánticas como de protocolo, sobre cómo deben comportarse esas características. MPI incluye paso de mensajes punto a punto y operaciones colectivas (globales) como broadcast, dispersión/recolección (scatter/gather) y reducción de datos distribuidos.

El diseño de MPI es orientado a objetos. Dicha orientación es a nivel funcional, ya que MPI no requiere un lenguaje orientado a objetos; de hecho, las API más usadas están en C y Fortran. MPI utiliza extensamente objetos opacos, con constructores y destructores bien definidos. Entre los objetos definidos se incluyen los grupos, que son los contenedores de procesos fundamentales; los comunicadores, que contienen grupos y son utilizados como argumentos para llamadas de comunicaciones, y objetos de petición para operaciones asíncronas.

MPI especifica conversión de datos heterogénea y transparente, requiriendo especificación del tipo de datos para todas las operaciones de comunicaciones; esto permite a las implementaciones realizar la conversión a un formato común. Se dice, pues, que MPI tiene un diseño fuertemente tipado. La especificación proporciona definiciones para los tipos de datos más comunes, así como posibilidad de especificar tipos de datos nuevos. El requerir la especificación de tipo de datos en los datos predefinidos y de usuario permite la comunicación en ambientes heterogéneos.

Un programa de MPI consta de procesos autónomos, ejecutando su propio código en un esquema MIMD ( Multiple Instruction Multiple Data). Los procesos se comunican por medio de llamadas a primitivas de comunicación de MPI. Típicamente cada proceso se ejecuta en su propio espacio de direcciones de memoria, aunque es factible una implementación de MPI en memoria compartida.

La API de MPI proporciona funciones para realizar las siguientes operaciones:

En esta lista se nota la ausencia de funciones para manipulación de procesos; como un ejemplo, se mencionó que PVM proporciona métodos para lanzar el programa inicial de la aplicación, y dicho programa se encarga de invocar a los demás programas que la componen. MPI no cuenta, estrictamente hablando, con la capacidad para realizar esta clase de manejo de procesos.

Conviene, pues, recordar que MPI es únicamente una especificación de las características de una API de paso de mensajes. Al diseñar esta especificación se puso particular énfasis en no dictar detalles de implementación; únicamente en algunos casos, el documento del estándar MPI contempla sugerencias a los implementadores.

Así pues, por ejemplo, MPI no especifica cómo arrancar y detener procesos, dejando este detalle a cada implementación en particular. Dada la gran cantidad de plataformas en las que corre MPI, para cuestiones de implementación es imposible dictar un mecanismo estandarizado. En general, MPI evita dictar políticas o mecanismos en instancias en las cuales esto no es factible por no estar definido el comportamiento que se va a tener en la práctica.


next up previous contents
Next: 2.3.7.3 Implementación Up: 2.3.7 MPI Previous: 2.3.7.1 Historia   Índice General
2002-05-15