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_replace

Descripción breve

Envía y recibe un mensaje en la misma operación utilizando el mismo buffer.

Sintaxis

En C

#include <mpi.h>
int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
	int dest, int sendtag, int source, int recvtag, MPI_Comm comm,
	MPI_Status *status)

En C++

#include <mpi.h>
void Comm::Sendrecv_replace(void* buf, int count, const
	Datatype& datatype, int dest, int sendtag, int source,
	int recvtag, Status& status) const
 
void Comm::Sendrecv_replace(void* buf, int count, const
	Datatype& datatype, int dest, int sendtag, int source,
	int recvtag) const

Parámetros

De entrada

buf [El mismo que para recibir] Dirección inicial del buffer de salida (de envío).
count Número de elementos (del tipo de dato especificado) a enviar y a recibir, es decir, ambos toman el mismo valor de count(int).
datatype Tipo de los datos que contiene el buffer de salida y de entrada (Como por ejemplo MPI_INT).
dest Rango del destino.
sendtag Etiqueta para el mensaje de salida.
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

buf [El mismo que para enviar] 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-replace 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-replace 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_replace es una operación bloqueante, tanto el envío como la recepción se realizan por el mismo comunicador. Primero se ejecuta la operación de envío, una vez realizada, se sustituye el buffer de envío por el de recepción (perdiendo todo o parte del contenido el buffer de salida).

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.
MPI_ERR_TRUNCATE Mensaje truncado en la recepción. El tamaño del buffer especificado es demasiado pequeño para la operación de recepción.

Véase también

MPI_Sendrecv

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

Valid HTML 4.01 Transitional