Interfaz de Paso de Mensajes

Otras contribuciones importantes provienen de Zipcode, Chimp, PVM, Chameleon y PICL.En casos simples, éste es un tipo básico o primitivo, por ejemplo, un número entero, y que en aplicaciones más avanzadas puede ser un tipo de dato construido a través de datos primitivos.El comunicador especifica el grupo de procesos a los cuales pertenecen la fuente y el destino.Esta función debe ser la última llamada a MPI que un programa realice.MPI_Wait Es una llamada bloqueante y retorna cuando la operación de envío o recepción se completa.MPI posee llamadas para comunicaciones grupales que incluyen operaciones tipo difusión (broadcast), recolección (gather), distribución (scatter) y reducción.Algunas de las funciones que permiten realizar transferencia entre varios procesos se presentan a continuación.MPI_Gather establece una operación de recolección, en la cual los datos son recolectados en un solo proceso.También se definen tres métodos diferentes para sincronizar esta comunicación (bloqueos globales, por pares y remotos) ya que la especificación no garantiza que estas operaciones hayan tenido lugar hasta un punto de sincronización.Estos tipos de llamada a menudo pueden ser útiles para algoritmos en los que la sincronización sería un inconveniente (por ejemplo, la multiplicación de matrices distribuidas) o donde es deseable que las tareas puedan equilibrar su carga mientras otros procesadores operan con datos.La especificación MPI-2 describe tres interfaces principales mediante las cuales los procesos MPI pueden establecer comunicaciones dinámicamente, MPI_Comm_spawn, MPI_Comm_accept/MPI_Comm_connect y MPI_Comm_join.El conjunto recién generado de procesos MPI forma un nuevo intracomunicador MPI_COMM_WORLD pero puede comunicarse con el padre y el intercomunicador que devuelve la función.El Argonne National Laboratory continuó desarrollando MPICH durante más de una década, y ahora ofrece MPICH2 que se corresponde con la implementación del estándar 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 relación con el estándar.Microsoft ha añadido una MPI al esfuerzo a sus Kit Cluster Computing (2005), basada en MPICH2.Hacen el trabajo del codificador para decidir cuándo y dónde pertenece la llamada a MPI_Init.El Módulo OCamlMPI implementa un gran subconjunto de las funciones MPIy está en uso activo en la computación científica.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.La API orientada a objetos es potente, fácil de utilizar para la programación paralela.Las interfaces MPI, a la vez que aprovecha al máximo las características de .NET -incluyendo los genéricos, los delegados, los resultados asíncronos, excepciones y extensibilidad.Estas son algunas de las empresas que hacen uso de MPI: Cualquier programa paralelo con MPI puede implementarse con tan solo seis funciones, aunque hay muchas más funciones para aspectos avanzados.Todas ellas empiezan por MPI_ y obligan a que todos los programas escritos en MPI contengan la directiva: Este fichero contiene las definiciones, macros y prototipos de función necesarios para compilar los programas MPI.Sus argumentos son punteros a los parámetros de la función main(), argc y argv.Esta función permite al sistema hacer todas la configuraciones necesarias para que la biblioteca MPI pueda ser usada.MPI ofrece la función MPI_Comm_rank(), la cual retorna el identificador de un proceso en su segundo argumento.Esencialmente un comunicador es una colección de procesos que pueden enviarse mensajes entre sí.Normalmente para diseñar programas básicos el único comunicador que se necesitará es MPI_COMM_WORLD.Está predefinido en MPI y consiste en todos los procesos que se ejecutan cuando el programa comienza.En el segundo argumento retorna el número de procesos pertenecientes a dicho comunicador.El paso de mensajes bloqueantes se lleva a cabo en los programas por las funciones MPI_Send() y MPI_Recv() principalmente.Esto permite resolver grandes problemas con mayor velocidad o incluso inviable en comparación con el tiempo de ejecución típico en un solo procesador.