1. Indice de pagina
  2. 1. Descripción breve
  3. 2. Sintaxis
  4. 2.1. En C
  5. 2.2. En C++
  6. 3. Parámetros
  7. 3.1. De entrada
  8. 3.2. De salida
  9. 4. Descripción
  10. 5. Errores
  11. 6. Véase también

MPI_Probe

Descripción breve

Comprobación bloqueante de llegada de mensaje.

Sintaxis

En C

#include <mpi.h>
int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)

En C++

#include <mpi.h>
void Comm::Probe(int source, int tag, Status& status) const
void Comm::Probe(int source, int tag) const

Parámetros

De entrada

source Rango del origen o MPI_ANY_SOURCE para cualquier origen(int).
tag Valor de etiqueta o bien MPI_ANY_TAG para cualquier etiqueta(int).
comm Comunicador por el que se realiza la comunicación (Por ejemplo MPI_COMM_WORLD).

De salida

status Dato de tipo MPI_Status, contiene datos relevantes sobre el mensaje (como son el origen (MPI_SOURCE), la etiqueta (MPI_TAG) y el tamaño (size)).

Descripción

La operación MPI_Probe permite comprobar si hay mensajes pendientes de ser recibidos, pero sin llegar a recibirlos. Esto permitirá decidir cómo recibirlos basándose en la información obtenida por el dato MPI_Status, por ejemplo, reservando memoria para él.
MPI_Probe(source, tag, comm, status) devuelve el control al programa si recibe algún mensaje con los parámetros especificados.
El parámetro source de MPI_Probe puede ser MPI_ANY_SOURCE y la etiqueta (tag) puede ser MPI_ANY_TAG, esto permite comprobar la recepción de cualquier mensaje con cualquier etiqueta. Sin embargo siempre es necesario especificar el comunicador por el que se realiza la comunicación.

Un ejemplo gráfico del funcionamiento de MPI_Probe es el siguiente:

Imagen MPI_probe (Pulsar sobre la imagen para ver la animación)

Si tu programa no necesita utilizar el parámetro status, se pueden ahorrar recursos utilizando la constante predefinida MPI_STATUS_IGNORE como valor especial.
No es estrictamente necesario recibir el mensaje inmediatamente despues de que haya sido comprobado. Además se puede comprobar el mismo mensaje varias veces antes de que sea recibido.

Errores

MPI_SUCCESS No hay error, la rutina ha terminado correctamente.
MPI_ERR_COMM Comunicador no válido. Un error común es usar un comunicador nulo.
MPI_ERR_TAG Valor de etiqueta no válido. Las etiquietas no pueden ser negativas, en las operaciones de recibimiento (MPI_Recv, MPI_Irecv, MPI_Sendrecv, etc.) se puede utilizar MPI_ANY_TAG. El mayor valor posible de etiqueta queda definido por la constante MPI_TAG_UB.
MPI_ERR_RANK Valor no válido de origen o de destino. Los rangos deben tener un valor entre cero y el tamaño del comunicador menos uno. Los rangos en las operaciones de recibimiento(MPI_Recv, MPI_Irecv, MPI_Sendrecv, etc.) también pueden valer MPI_ANY_SOURCE.

Véase también

MPI_Iprobe
MPI_Recv

Creado por: Daniel Guerrero Martínez y Sergio Rodríguez Lumley 2010

Valid HTML 4.01 Transitional