- Indice de pagina
- 1. Descripción breve
- 2. Sintaxis
- 2.1. En C
- 2.2. En C++
- 3. Parámetros
- 3.1. De entrada
- 3.2. De salida
- 4. Descripción
- 5. Errores
- 6. Véase también
Descripción breve
Envía y recibe un mensaje en la misma operación utilizando el mismo buffer.
Sintaxis
En C
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