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_Sendrecv

Descripción breve

Envía y recibe un mensaje en la misma operación.

Sintaxis

En C

#include <mpi.h>
int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
	int dest, int sendtag, void *recvbuf, int recvcount,
	MPI_Datatype recvtype, int source, int recvtag,
	MPI_Comm comm, MPI_Status *status)

En C++

#include <mpi.h>
void Comm::Sendrecv(const void *sendbuf, int sendcount, const
	Datatype& sendtype, int dest, int sendtag, void *recvbuf,
	int recvcount, const Datatype& recvtype, int source,
	int recvtag, Status& status) const
 
void Comm::Sendrecv(const void *sendbuf, int sendcount, const
	Datatype& sendtype, int dest, int sendtag, void *recvbuf,
	int recvcount, const Datatype& recvtype, int source,
	int recvtag) const

Parámetros

De entrada

sendbuf Posición inicial del buffer de salida.
sendcount Número de elementos (del tipo de dato especificado) a enviar (int).
sendtype Tipo de los datos que contiene el buffer de salida (Como por ejemplo MPI_INT).
dest Rango del destino.
sendtag Etiqueta para el mensaje de salida.
recvcount Máximo número de elementos (del tipo especificado) a recibir (int).
recvtype Tipo de los datos que contendrá el buffer de entrada (Como por ejemplo MPI_INT).
source Rango del origen del que recibir el mensaje (o bien MPI_ANY_SOURCE).
recvtag Etiqueta del mensaje a recibir, o bien MPI_ANY_TAG para cualquier valor de etiqueta.
comm Comunicador por el que se va a realizar tanto el envío como la operación de recibimiento.

De salida

recvbuf Dirección inicial del buffer de entrada (de recibimiento).
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 send-receive combinan en una sola llamada el envío de un mensaje a un destino y la recepción de otro mensaje, desde otro proceso. Los dos (origen y destino) pueden ser el mismo. Esta operación es útil para ejecutar una operación de desplazamiento a través de una cadena de procesos.
Un mensaje enviado con una operación send-receive puede ser recibido o comprobado (MPI_Probe) por una operación de recepción o comprobación normal. Esta operación también puede recibir mensajes de envíos normales (como MPI_Send).
MPI_Sendrecv es una operación bloqueante, tanto el envío como la recepción se realizan por el mismo comunicador. Los bufferes de envío y de recepción deben ser disjuntos, pueden tener distintos tipos y tamaños.
Si tu programa no necesita utilizar el parámetro status, se pueden ahorrar recursos utilizando la constante predefinida MPI_STATUS_IGNORE como valor especial.

Errores

MPI_SUCCESS No ha habido error, la función se ha completado satisfactoriamente.
MPI_ERR_COMM Comunicador no válido. Un error común es usar un comunicador nulo.
MPI_ERR_COUNT Valor no válido del argumento count. Debe ser un valor no negativo, a veces se permite un valor cero.
MPI_ERR_TYPE Tipo de dato especificado no válido. Puede ser un tipo de dato (MPI_Datatype) para el que aún no se ha hecho commit (Véase MPI_Type_commit).
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_Sendrecv_replace

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

Valid HTML 4.01 Transitional