Subido por msc2179

Manual MPI

Anuncio
Apéndice B
Manual de Referencia
Este apéndice describe de manera resumida las funciones MPI utilizadas en los algoritmos
implementados. Pretendemos que sea una guía útil como manual de consulta. Para mayor
comodidad las funciones están expuestas en orden alfabético.
Para cada una de las funciones definimos su funcionalidad y su sintaxis, especificando
cuáles son los parámetros de entrada y los de salida. Por último, en algunos casos haremos un
breve comentario acerca de su funcionamiento.
175
APÉNDICE B. MANUAL DE REFERENCIA
176
B.1. MPI_Bcast
F UNCIONALIDAD
Envía un mismo mensaje desde un proceso a todos los demás. Es una operación de comunicación colectiva.
S INTAXIS
int MPI_Bcast(void* mensaje, int contador,
MPI_Datatype tipo_datos, int raiz,
MPI_Comm com);
PARÁMETROS E NTRADA /S ALIDA
mensaje Dirección inicial de memoria del mensaje a enviar/recibir
contador Número de elementos del tipo tipo_datos que componen el mensaje
tipo_datos Tipo de datos MPI de cada elemento del mensaje (Cuadro 5.1)
raiz Identificador del proceso que envía el mensaje
com Comunicador en el cual se produce la comunicación
C OMENTARIOS
Si el soporte hardware se hace responsable de la ejecución de esta función, generalmente
se implementa mediante un algoritmo que estructura un modelo de comunicación en árbol
entre los procesos. Para más información, léase la sección ??.
B.2. MPI_CART_COORDS
177
B.2. MPI_Cart_coords
F UNCIONALIDAD
Retorna las coordenadas de un proceso en un comunicador de topología cartesiana, dado
su identificador.
S INTAXIS
int MPI_Cart_coords(MPI_Comm cart_com, int id,
int numero_dimensiones,
int* coordenadas)
PARÁMETROS E NTRADA
cart_com Comunicador de topología cartesiana
id Identificador del proceso dentro del comunicador cart_com
numero_dimensiones Número de dimensiones del vector coordenadas
PARÁMETROS S ALIDA
coordenadas Vector de enteros (de tamaño numero_dimensiones) que contiene las coordenadas cartesianas del proceso
APÉNDICE B. MANUAL DE REFERENCIA
178
B.3. MPI_Cart_create
F UNCIONALIDAD
Crea un nuevo comunicador de topología cartesiana (tipo rejilla).
S INTAXIS
int MPI_Cart_create(MPI_Comm antiguo_com,
int numero_dimensiones,
int* tam_dimensiones,
int* periodicidades,
int reordenamiento,
MPI_Comm* com_cartesiano)
PARÁMETROS E NTRADA
antiguo_com Comunicador original a partir del cual creamos el nuevo comunicador de topología
cartesiana
numero_dimensiones Número de dimensiones de la rejilla cartesiana que queremos crear
tam_dimensiones Vector de enteros de tamaño numero_dimensiones que especifica el número
de procesos en cada dimensión
periodicidades Vector de booleanos de tamaño numero_dimensiones que especifica para
cada dimensión si es periódica (verdadero) o no (falso)
reordenamiento Booleano que especifica si pueden ser reordenados los identificadores de los
procesos (verdadero) o no (falso). En muchos casos es apropiado para la optimización
del sistema, en otros no es significante.
PARÁMETROS S ALIDA
com_cartesiano Nuevo comunicador de topología cartesiana
B.4. MPI_CART_RANK
179
B.4. MPI_Cart_rank
F UNCIONALIDAD
Retorna el identificador de un proceso en un comunicador de topología cartesiana, dadas
sus coordenadas.
S INTAXIS
int MPI_Cart_rank(MPI_Comm cart_com, int* coordenadas,
int* id)
PARÁMETROS E NTRADA
cart_com Comunicador de topología cartesiana
coordenadas Vector de enteros (de tamaño numero_dimensiones, véase función B.3) que
especifica las coordenadas cartesianas del proceso
PARÁMETROS S ALIDA
id Identificador del proceso especificado
APÉNDICE B. MANUAL DE REFERENCIA
180
B.5. MPI_Cart_sub
F UNCIONALIDAD
Divide un comunicador de tipo rejilla (topología cartesiana) en rejillas de menores dimensiones.
S INTAXIS
int MPI_Cart_sub(MPI_Comm cart_com, int* var_coords,
MPI_Comm nuevo_com)
PARÁMETROS E NTRADA
cart_com Comunicador de topología cartesiana
var_coords Vector de booleanos que especifica para cada dimensión de cart_com si pertenece
a nuevo_com, dejando que la coordenada varíe (verdadero) o no (falso)
PARÁMETROS S ALIDA
nuevo_com Nuevo comunicador de topología cartesiana con igual o menor número de dimensiones que cart_com
B.6. MPI_COMM_CREATE
181
B.6. MPI_Comm_create
F UNCIONALIDAD
Crea un nuevo comunicador a partir de otro.
S INTAXIS
int MPI_Comm_create(MPI_Comm antiguo_com,
MPI_Group nuevo_grupo,
MPI_Comm* nuevo_com)
PARÁMETROS E NTRADA
antiguo_com Comunicador original a partir del cual generamos el nuevo comunicador
nuevo_com Grupo que contiene los procesos que formarán parte del nuevo comunicador.
Debe ser un subconjunto del grupo asociado al comunicador original (antiguo_com).
PARÁMETROS S ALIDA
nuevo_com Nuevo comunicador
APÉNDICE B. MANUAL DE REFERENCIA
182
B.7. MPI_Comm_group
F UNCIONALIDAD
Retorna el grupo asociado a un comunicador determinado.
S INTAXIS
int MPI_Comm_group(MPI_Comm com, MPI_Group* grupo)
PARÁMETROS E NTRADA
com Comunicador
PARÁMETROS S ALIDA
grupo Grupo asociado al comunicador
B.8. MPI_COMM_RANK
B.8. MPI_Comm_rank
F UNCIONALIDAD
Retorna el identificador de un proceso dentro de un comunicador.
S INTAXIS
int MPI_Comm_rank(MPI_Comm com, int* id)
PARÁMETROS E NTRADA
com Comunicador dentro del cual el proceso tiene asociado el identificador
PARÁMETROS S ALIDA
id Identificador del proceso dentro del comunicador com
183
APÉNDICE B. MANUAL DE REFERENCIA
184
B.9. MPI_Comm_size
F UNCIONALIDAD
Determina el número de procesos pertenecientes al grupo asociado a un comunicador.
S INTAXIS
int MPI_Comm_size(MPI_Comm com, int* numprocs)
PARÁMETROS E NTRADA
com Comunicador al cual está asociado el grupo cuyo tamaño queremos conocer
PARÁMETROS S ALIDA
numprocs Número de procesos en el grupo del comunicador (entero)
B.10. MPI_COMM_SPLIT
185
B.10. MPI_Comm_split
F UNCIONALIDAD
Particiona un comunicador en varios subconjuntos de procesos y crea un nuevo comunicador para cada uno de ellos.
S INTAXIS
int MPI_Comm_split(MPI_Comm antiguo_com,
int clave_particion,
int clave_id, MPI_Comm* nuevo_com)
PARÁMETROS E NTRADA
antiguo_com Comunicador original a partir del cual creamos los nuevos comunicadores
clave_particion Número que representa el nuevo comunicador en el cual quedará englobado
el proceso
clave_id Identificador del proceso dentro del nuevo comunicador
PARÁMETROS S ALIDA
nuevo_com Nuevo comunicador (leer comentarios)
C OMENTARIOS
La llamada crea un comunicador para cada valor de clave_particion. Los procesos con el
mismo valor en clave_particion quedan englobados en el mismo comunicador.
Sin embargo los comunicadores creados tendrán el mismo nombre para todos los procesos. Imaginemos que dividimos de manera escalonada un comunicador con 9 procesos en tres
comunicadores con 3 procesos, llamados todos nuevo_com. De esta manera, el grupo nuevo_com consistirá en los procesos 0, 1 y 2 para los procesos 0, 1 y 2. En los procesos 3, 4
y 5 el grupo subyacente a nuevo_com será el formado por los procesos 3, 4 y 5; y lo mismo
ocurrirá con los procesos 6, 7 y 8.
APÉNDICE B. MANUAL DE REFERENCIA
186
B.11. MPI_Finalize
F UNCIONALIDAD
Finaliza el entorno de ejecución MPI. Después de que el programa haya acabado de utilizar
la librería MPI, se debe hacer una llamada a MPI_Finalize. Esta función limpia todos los
trabajos no finalizados dejados por MPI (por ejemplo, envíos pendientes que no hayan sido
completados, etc.).
S INTAXIS
int MPI_Finalize()
Esta función no tiene parámetros.
B.12. MPI_GET_PROCESSOR_NAME
187
B.12. MPI_Get_processor_name
F UNCIONALIDAD
Retorna el nombre del procesador donde está ubicado el proceso.
S INTAXIS
int MPI_Get_processor_name(char* nombre, int* longnombre)
PARÁMETROS S ALIDA
nombre Vector de caracteres cuyo tamaño debe ser al menos igual a la constante
MPI_MAX_PROCESSOR_NAME destinado a contener el nombre del procesador
longname Longitud (en caracteres) de la cadena obtenida
C OMENTARIOS
El nombre retornado debe identificar un elemento hardware específico; el formato exacto
estará definido por la implementación.
APÉNDICE B. MANUAL DE REFERENCIA
188
B.13. MPI_Group_incl
F UNCIONALIDAD
Crea un nuevo grupo a partir de una lista de procesos pertenecientes a un grupo existente.
S INTAXIS
int MPI_Group_incl(MPI_Group antiguo_grupo,
int tamano_nuevo_grupo,
int* ids_antiguo_grupo,
MPI_Group* nuevo_grupo)
PARÁMETROS E NTRADA
antiguo_grupo Grupo original a partir del cual generamos el nuevo grupo
tamano_nuevo_grupo Número de procesos que formarán el nuevo grupo
ids_antiguo_grupo Identificadores de los procesos que formarán parte del nuevo grupo (vector de enteros)
PARÁMETROS S ALIDA
nuevo_grupo Nuevo grupo derivado del existente, reordenado según el vector ids_antiguo_grupo.
B.14. MPI_INIT
189
B.14. MPI_Init
F UNCIONALIDAD
Inicializa el entorno de ejecución MPI. Antes de que podamos llamar a cualquier otra
función MPI, debemos hacer una llamada a MPI_Init; esta función sólo debe ser llamada
una vez. Permite al sistema hacer todas la configuraciones necesarias para que la librería MPI
pueda ser usada.
S INTAXIS
int MPI_Init(int *argc, char ***argv);
PARÁMETROS E NTRADA
argc Puntero al número de argumentos
argv Puntero a los vectores de argumentos
APÉNDICE B. MANUAL DE REFERENCIA
190
B.15. MPI_Irecv
F UNCIONALIDAD
Inicializa la recepción de un mensaje no bloqueante.
S INTAXIS
int MPI_Recv(void* mensaje, int contador,
MPI_Datatype tipo_datos, int origen,
int etiqueta, MPI_Comm com,
MPI_Request* peticion)
PARÁMETROS E NTRADA
contador Número de elementos del tipo tipo_datos que componen el mensaje a recibir
tipo_datos Tipo de datos MPI de cada elemento del mensaje a recibir (Cuadro 5.1)
origen Identificador del proceso origen
etiq Etiqueta del mensaje
com Comunicador en el cual se produce la comunicación
PARÁMETROS S ALIDA
mensaje Dirección inicial de memoria del mensaje a recibir
peticion Manejador de la petición
C OMENTARIOS
Esta función recibe mensajes de tipo no bloqueante. Ello quiere decir que la ejecución del
programa no se bloquea con la llamada a esta función.
B.16. MPI_ISEND
191
B.16. MPI_Isend
F UNCIONALIDAD
Inicializa el envío de un mensaje no bloqueante a un proceso determinado.
S INTAXIS
int MPI_Isend(void* mensaje, int contador,
MPI_Datatype tipo_datos, int destino,
int etiq, MPI_Comm com,
MPI_Request* peticion)
PARÁMETROS E NTRADA
mensaje Dirección inicial de memoria del mensaje a enviar
contador Número de elementos del tipo tipo_datos que componen el mensaje a enviar
tipo_datos Tipo de datos MPI de cada elemento del mensaje a enviar (Cuadro 5.1)
destino Identificador del proceso destino
etiq Etiqueta del mensaje
com Comunicador en el que se produce la comunicación
PARÁMETROS S ALIDA
peticion Manejador de la petición
C OMENTARIOS
Esta función envía mensajes de tipo no bloqueante. Ello quiere decir que la ejecución del
programa no se bloquea con la ejecución de la llamada.
APÉNDICE B. MANUAL DE REFERENCIA
192
B.17. MPI_Recv
F UNCIONALIDAD
Recibe un mensaje básico de un proceso.
S INTAXIS
int MPI_Recv(void* mensaje, int contador,
MPI_Datatype tipo_datos, int origen,
int etiqueta, MPI_Comm com,
MPI_Status* status)
PARÁMETROS E NTRADA
contador Número de elementos del tipo tipo_datos que componen el mensaje a recibir
tipo_datos Tipo de datos MPI de cada elemento del mensaje a recibir (Cuadro 5.1)
origen Identificador del proceso origen
etiq Etiqueta del mensaje
com Comunicador en el cual se produce la comunicación
PARÁMETROS S ALIDA
mensaje Dirección inicial de memoria del mensaje a recibir
status Objeto que representa el estado de la recepción
C OMENTARIOS
Esta función recibe mensajes de tipo bloqueante. Ello quiere decir que la ejecución del
programa se bloquea hasta que el mensaje ha sido recibido.
B.18. MPI_REDUCE
193
B.18. MPI_Reduce
F UNCIONALIDAD
Reduce valores en todos los procesos a un solo valor. Realiza una operación de reducción.
S INTAXIS
int MPI_Reduce(void* operando, void* resultado,
int contador, MPI_Datatype tipo_datos,
MPI_Op operacion, int raiz,
MPI_Comm com);
PARÁMETROS E NTRADA
operando Dirección inicial de memoria de los valores a operar
contador Número de elementos del tipo tipo_datos que componen cada uno de los operandos
y el resultado
tipo_datos Tipo de datos MPI de los valores a operar
operacion Operación de reducción a realizar (Cuadro 6.1)
raiz Identificador del proceso que recibe el valor calculado
com Comunicador en el cual se produce la comunicación
PARÁMETROS S ALIDA
resultado Dirección inicial de memoria del valor calculado a recibir (significante sólo en el
proceso raiz)
APÉNDICE B. MANUAL DE REFERENCIA
194
B.19. MPI_Send
F UNCIONALIDAD
Envía un mensaje básico a un proceso determinado.
S INTAXIS
int MPI_Send(void* mensaje, int contador,
MPI_Datatype tipo_datos, int destino,
int etiq, MPI_Comm com)
PARÁMETROS E NTRADA
mensaje Dirección inicial de memoria del mensaje a enviar
contador Número de elementos del tipo tipo_datos que componen el mensaje a enviar
tipo_datos Tipo de datos MPI de cada elemento del mensaje a enviar (Cuadro 5.1)
destino Identificador del proceso destino
etiq Etiqueta del mensaje
com Comunicador en el que se produce la comunicación
C OMENTARIOS
Esta función envía mensajes de tipo bloqueante. Ello quiere decir que la ejecución del
programa se bloquea hasta que el mensaje ha sido enviado.
B.20. MPI_SENDRECV_REPLACE
195
B.20. MPI_Sendrecv_replace
F UNCIONALIDAD
Envía y recibe un mensaje básico utilizando un sólo buffer.
S INTAXIS
int MPI_Sendrecv_replace(void* mensaje, int contador,
MPI_Datatype tipo_datos,
int destino, int etiqdestino,
int origen, int etiqorigen,
MPI_Comm com, MPI_Status* status)
PARÁMETROS E NTRADA
mensaje Dirección inicial de memoria del mensaje a enviar y en la cual recibiremos el nuevo
mensaje
contador Número de elementos del tipo tipo_datos que componen el mensaje a enviar/recibir
tipo_datos Tipo de datos MPI de cada elemento del mensaje a enviar/recibir (Cuadro 5.1)
destino Identificador del proceso destino
etiqdestino Etiqueta del mensaje a enviar
origen Identificador del proceso origen
etiqorigen Etiqueta del mensaje a recibir
com Comunicador en el que se produce la comunicación
C OMENTARIOS
Esta función envía/recibe mensajes de tipo bloqueante. Ello quiere decir que la ejecución
del programa se bloquea hasta que el mensaje ha sido enviado/recibido.
APÉNDICE B. MANUAL DE REFERENCIA
196
B.21. MPI_Type_commit
F UNCIONALIDAD
Acomete un tipo de datos MPI.
S INTAXIS
int MPI_Type_commit(MPI_Datatype* tipo_datos_MPI)
PARÁMETROS E NTRADA
tipo_datos_MPI Tipo de datos MPI
B.22. MPI_TYPE_STRUCT
B.22. MPI_Type_struct
F UNCIONALIDAD
Crea un tipo de datos MPI para estructuras.
S INTAXIS
int MPI_Type_struct(int contador,
int longitudes_bloque[],
MPI_Aint indices[],
MPI_Datatype antiguos_tipos_datos,
MPI_Datatype* nuevo_tipo)
PARÁMETROS E NTRADA
contador Número de bloques
longitud_bloque Número de elementos de tipo tipo_datos_elem de cada bloque
indices Dirección relativa de cada bloque
antigus_tipo_datos Tipos de datos de cada bloque
PARÁMETROS S ALIDA
nuevo_tipo Nuevo tipo de datos MPI
197
APÉNDICE B. MANUAL DE REFERENCIA
198
B.23. MPI_Type_vector
F UNCIONALIDAD
Crea un tipo de datos MPI para vectores.
S INTAXIS
int MPI_Type_vector(int contador, int longitud_bloque,
int salto, MPI_Datatype tipo_datos_elem,
MPI_Datatype* nuevo_tipo)
PARÁMETROS E NTRADA
contador Número de bloques
longitud_bloque Número de elementos de tipo tipo_datos_elem en cada bloque
salto Número de elementos de tipo tipo_datos_elem que hay entre los sucesivos elementos
de nuevo_tipo.
tipo_datos_elem Antiguo tipo de datos
PARÁMETROS S ALIDA
nuevo_tipo Nuevo tipo de datos MPI
B.24. MPI_WAIT
B.24. MPI_Wait
F UNCIONALIDAD
Espera a que se complete un envío o una recepción de un mensaje.
S INTAXIS
int MPI_Wait(MPI_Request* peticion,
MPI_Status* status)
PARÁMETROS E NTRADA
peticion Manejador de la petición
PARÁMETROS S ALIDA
status Objeto que representa el estado del envío/recepción del mensaje
199
APÉNDICE B. MANUAL DE REFERENCIA
200
B.25. MPI_Waitall
F UNCIONALIDAD
Espera a que se completen todas las peticiones especificadas en un vector.
S INTAXIS
int MPI_Waitall(int contador,
MPI_Request* vector_peticiones,
MPI_Status* status)
PARÁMETROS E NTRADA
contador Longitud del vector de peticiones
vector_peticiones Vector de peticiones
PARÁMETROS S ALIDA
status Objeto que representa el estado del envío/recepción del mensaje
B.26. MPI_WAITANY
B.26. MPI_Waitany
F UNCIONALIDAD
Espera a que se complete cualquiera de las peticiones especificadas en un vector.
S INTAXIS
int MPI_Waitany(int contador,
MPI_Request* vector_peticiones,
int* indice,
MPI_Status* status)
PARÁMETROS E NTRADA
contador Longitud del vector de peticiones
vector_peticiones Vector de peticiones
PARÁMETROS S ALIDA
indice Posición de la petición satisfecha en el vector de peticiones
status Objeto que representa el estado del envío/recepción del mensaje
201
APÉNDICE B. MANUAL DE REFERENCIA
202
B.27. MPI_Wtime
F UNCIONALIDAD
Retorna el tiempo transcurrido para un proceso.
S INTAXIS
double MPI_Wtime()
VALOR DE R ETORNO
Tiempo en segundos desde que comenzó la ejecución del proceso.
Conclusiones
Para llegar a ciertas conclusiones en el estudio realizado lo primero que debemos hacer es
analizar los resultados obtenidos en las ejecuciones de los algoritmos paralelos. Sólo de este
modo podremos demostrar la utilidad y potencialidad del procesamiento paralelo ejecutado en
redes bajo Linux.
Sumario de Resultados
Comenzaremos el análisis observando algunos gráficos ciertamente determinantes. La
figura 1 muestra un gráfico que representa el tiempo de ejecución del algoritmo Cálculo de
Áreas mediante Montecarlo utilizando paso de mensajes no bloqueantes.
Calculo de Areas No Bloqueante: Tiempo Ejecucion
140
Tiempo Ejecucion
120
Tiempo (seg)
100
80
60
40
20
0
0
2
4
6
8
10
12
14
16
Numero de Procesadores
Figura 1: Gráfico Tiempo Ejecución Cálculo de Áreas No Bloqueante
En el gráfico observamos una notoria reducción en el tiempo de ejecución de dicho algoritmo conforme incorporamos procesadores al cómputo. Ello es lógico debido a que se trata de
203
Descargar