Mpi PDF
Mpi PDF
Con MPI el número de procesos requeridos se El cuerpo del mensaje en MPI se conforma por
asigna antes de la ejecución del programa, y tres piezas de información: buffer, tipo de dato
no se crean procesos adicionales mientras la y count. El buffer, es la localidad de memoria
aplicación se ejecuta. donde se encuentran los datos de salida o
donde se almacenan los datos de entrada. El
A cada proceso se le asigna una variable que tipo de dato, indica el tipo de los datos que se
se denomina rank, la cual identifica a cada envían en el mensaje. En casos simples, éste
proceso, en el rango de 0 a p-1, donde p es el es un tipo básico o primitivo, por ejemplo, un
número total de procesos. número entero, y que en aplicaciones más
avanzadas puede ser un tipo de dato
El control de la ejecución del programa se construido a través de datos primitivos. Los
realiza mediante la variable rank; la variable tipos de datos derivados son análogos a las
rank permite determinar que proceso ejecuta estructuras de C. El count es un número de
determinada porción de código. secuencia que junto al tipo de datos permiten
al usuario agrupar ítems de datos de un mismo
tipo en un solo mensaje. MPI estandariza los 4.2. Llamadas utilizadas para transferir
tipos de datos primitivos, evitando que el datos entre dos procesos
programador se preocupe de las diferencias
que existen entre ellos, cuando se encuentran Ls transferencia de datos entre dos procesos
en distintas plataformas. se consigue mediante las llamadas MPI_Send
y MPI_Recv. Estas llamadas devuelven un
La envoltura de un mensaje en MPI código que indica su éxito o fracaso.
típicamente contiene la dirección destino, la
dirección de la fuente, y cualquier otra MPI_Send permite enviar información desde
información que se necesite para transmitir y un proceso a otro. MPI_Recv permite recibir
entregar el mensaje. La envoltura de un información desde otro proceso. Ambas
mensaje en MPI, consta de cuatro partes: la funciones son bloqueantes, es decir que el
fuente, el destino, el comunicator y una proceso que realiza la llamada se bloquea
etiqueta. La fuente identifica al proceso hasta que la operación de comunicación se
transmisor. El destino identifica al proceso complete.
receptor. El comunicator especifica el grupo de
procesos a los cuales pertenecen la fuente y el Las versiones no bloqueantes de MPI_Send y
destino. La etiqueta (tag) permite clasificar el MPI_Recv son MPI_Isend y MPI_Irecv,
mensaje. respectivamente. Estas llamadas inician la
operación de transferencia pero su finalización
El campo etiqueta es un entero definido por el debe ser realizada de forma explícita mediante
usuario que puede ser utilizado para distinguir llamadas como MPI_Test y MPI_Wait.
los mensajes que recibe un proceso. Por MPI_Wait es una llamada bloqueante y retorna
ejemplo, se tienen dos procesos A y B. El cuando la operación de envío o recepción se
proceso A envía dos mensajes al proceso B, completa. MPI_Test permite verificar si la
ambos mensajes contienen un dato. Uno de operación de envío o recepción ha finalizado,
los datos es utilizado para realizar un cálculo, esta función primero chequea el estado de la
mientras el otro es utilizado para imprimirlo en operación de envío o recepción y luego
pantalla. El proceso A utiliza diferentes retorna.
etiquetas para los mensajes. El proceso B
utiliza los valores de etiquetas definidos en el 4.3. Llamadas utilizadas para transferir
proceso A e identifica que operación deberá datos entre varios procesos
realizar con el dato de cada mensaje.
MPI posee llamadas para comunicaciones
4.1. Llamadas utilizadas para inicializar, grupales que incluyen operaciones tipo
administrar y finalizar difusión (broadcast), recolección (gather),
comunicaciones distribución (scatter) y reducción. Algunas de
las funciones que permiten realizar
MPI dispone de 4 funciones primordiales que transferencia entre varios procesos se
se utilizan en todo programa con MPI. Estas presentan a continuación.
funciones son MPI_Init, MPI_Comm_size,
MPI_Comm_rank y MPI_Finalize. MPI_Barrier permite realizar operaciones de
sincronización. En estas operaciones no existe
MPI_Init permite inicializar una sesión MPI. ninguna clase de intercambio de información.
Esta función debe ser utilizada antes de llamar Suele emplearse para dar por finalizada una
a cualquier otra función de MPI. etapa del programa, asegurándose de que
todos los procesos han terminado antes de dar
MPI_Finalize permite terminar una sesión MPI. comienzo a la siguiente.
Esta función debe ser la última llamada a MPI
que un programa realice. Permite liberar la MPI_Bcast permite a un proceso enviar una
memoria usada por MPI. copia de sus datos a otros procesos dentro de
un grupo definido por un comunicator. En la
MPI_Comm_size permite determinar el Figura 3 se muestra la transferencia de
número total de procesos que pertenecen a un información entre diferentes procesos usando
comunicator. la llamada MPI_Bcast.
8,0E+1
los otros procesos. 7,0E+1
1,0E+1
proceso y envía la porción 0,0E+0
2
consola y almacenarlos en un archivo. 1,0E+0
3
6. Cada proceso libera la memoria
5,0E-1
utilizada y el proceso maestro se
encarga además de liberar las librerías 0,0E+0
0,0E+0 1,0E+2 2,0E+2 3,0E+2 4,0E+2 5,0E+2 6,0E+2
de MPI. Orden de la m atriz P
1,2E+3
6,0E+1
2
1,0E+3
4,0E+1 3
8,0E+2
1
Tiempo [s]
2,0E+1
6,0E+2 2
0,0E+0
3
0,0E+0 1,0E+2 2,0E+2 3,0E+2 4,0E+2 5,0E+2 6,0E+2 4,0E+2
Orden de la m atriz P
2,0E+2
para resolver CMTD 0,0E+0 1,0E+2 2,0E+2 3,0E+2 4,0E+2 5,0E+2 6,0E+2
Orden de la m atriz Q(t )
En la Figura 10 se realiza una comparación de Figura 12. Comparación del tiempo requerido
los resultados obtenidos al calcular la para resolver CMTC
distribución en el tiempo 0,25 con 1, 2 y 3
procesadores. También, algo similar a lo descrito en la
obtención de la distribución en el paso 25,
1,2E+3 ocurre para la distribución en el tiempo 0,25 de
1,0E+3
Cadenas de Markov a Tiempo Continuo.
8,0E+2
1 Además, se puede apreciar que en el caso de
Tiempo [s]
2
1,0E+0 3
similar a la descrita para la distribución en el
paso 25 o en el tiempo 0,25. Se puede
5,0E-1
apreciar también, que el tiempo en leer la
0,0E+0 matriz P o Q(t), y almacenar los resultados, es
0,0E+0 1,0E+2 2,0E+2 3,0E+2 4,0E+2 5,0E+2 6,0E+2
Orden de la m atriz Q(t )
decir las operaciones no paralelizadas,
consumen poco tiempo comparado con las
Figura 11. Comparación del tiempo requerido operaciones realizadas en paralelo.
para obtener la distribución de régimen
En la Figura 14 se presenta el diagrama de
En la Figura 12 se realiza una comparación de Gantt generado mediante la herramienta de
los tiempos de ejecución que tomó la visualización Jumpshot-4 [9] que incluye
resolución de la CMTD. Rocks. En esta figura se pueden ver las
diferentes llamadas a MPI que realiza la
Se puede ver que en promedio, usando 2 aplicación para resolver la CMTD
procesadores, el tiempo que toma obtener la especificadas por la leyenda de la Figura 13.
distribución en el paso 25 de Cadenas de
Figura 13. Leyenda utilizada por Jumpshot
8. Comentarios
9. Bibliografía