Siguiente: Operaciones globales.
Subir: Introducción MPI.
Anterior: Modelo de programación.
  Índice General
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.
- MPI_INT: Inicia un computo.
MPI_INT(int *argc,char ***argv), argc, argv son requeridos solo por el contexto del lenguaje C, en el cual
son los argumentos del programa principal.
- MPI_FINALIZE: Termina un computo. MPI_FINALIZE().
- MPI_COMM_SIZE: Determina el número de procesos en un computo.
MPI_COMM_SIZE(comm,size), IN comm comunicador(manejador[handle]),
OUT size número de procesos en el grupo del comunicador(entero).
- MPI_COMM_RANK: Determina el identificador del proceso actual ``mi proceso''.
MPI_COMM_RANK(comm,pid), IN comm comunicador (manejador[andel]), OUT pid identificador del proceso en el
grupo del comunicador(entero).
- MPI_SEND: Manda un mensaje. MPI_SEND(buf, count, datatype, dest, tag, comm). IN
buf dirección del buffer a enviar (tipo x), IN count número de elementos a enviar del buffer (entero>=0), IN
datatype tipo de datos del buffer a enviar (handle), IN dest identificador del proceso destino (entero), IN
tag message tag (entero), IN comm comunicador (handle)
- MPI_RECV: Recive un mensaje. MPI_RECV(buf,count,datatype,dest,tag,comm). OUT buf
dirección del buffer a recibir (tipo x), IN count número de elementos a recibir del buffer (entero>=0), IN
datatype tipo de datos del buffer a recibir (handle), IN source identificador del proceso fuente, o
MPI_ANY_SOURCE(entero), IN tag message tag, o MPI_ANY_TAG(entero), IN comm comunicador (handle), OUT status
estado del objeto (estado)
- IN: Significa que la función usa pero no modifica el parámetro.
- OUT: Significa que la función no usa pero puede modificar el parámetro.
- INOUT: Significa que la función usa y modifica el parámetro.
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:
- El paso de mensajes en módulos de programación son por defecto no deterministicos; el orden de llegadas
de los mensajes enviados desde dos procesos A y B hacia un tercer proceso C, no esta definido. Pero, MPI
garantiza que dos mensajes enviados desde un proceso A, hacia otro proceso B, llegarán en el orden en que
fueron enviados.
- En el modelo de programación Tarea/Canal, el determinismo es garantizado al definir canales separados
para diferentes comunicaciones y al asegurar que cada canal tiene un solo escritor y un solo lector. Por lo
cual, un proceso C puede distinguir mensajes recibidos de A o B tal y como llegan en diferentes canales. MPI
no soporta canales directos, pero provee mecanismos similares; en particular, permite una operación de recibimiento
para especificar una fuente, tag y/o contexto.
Especificaciones en el contexto del lenguaje C:
- Los nombres de las funciones son tal y como se presentan en la definición del MPI pero solo con el
prefijo de MPI y la primer letra del nombre de la función en mayúsculas.
- Los valores de los estados son regresados como códigos enteros. El código de regreso para una
ejecución exitosa es MPI_SUCESS.
- También esta definido un conjunto de códigos de error.
- Las constantes están en mayúsculas y son definidas en el archivo mpi.h
- Los handles son representados por tipos especialmente definidos en mpi.h
- Los parámetros de las funciones del tipo IN son pasados por valor, mientras que los parámetros
OUT y INOUT son pasados por referencia (como apuntadores).
- Las variables de estado (status) tiene el tipo MPI_Status y es una estructura con campos status.
MPI_SOURCE y status.MPI_TAG.
- Los tipos de datos del MPI están definidos para cada tipo de datos de C: MPI_CHAR, MPI_INT,
MPI_LONG_INT, MPI_UNSIGNED_CHAR, etc.
Siguiente: Operaciones globales.
Subir: Introducción MPI.
Anterior: Modelo de programación.
  Índice General
Ismael Olea
2004-03-22