Realiza el envío de un mensaje de un proceso fuente a otro destino.
#include <mpi.h> int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
#include <mpi.h> void Comm::Send(const void* buf, int count, const Datatype& datatype, int dest, int tag) const
buf | Dirección inicial del buffer de envío. Esto significa que requiere un puntero. Si solo se pretende enviar un elemento, se puede enviar el puntero a este (&elemento). |
count | Numero de elementos a enviar (Debe ser un entero no negativo). |
datatype | Tipo de dato de cada elemento que se va a enviar. Acepta constantes definidas por MPI (Véase el apartado de constantes). Por ejemplo MPI_INT. |
dest | Rango del proceso destino. (Véase MPI_Comm_rank) |
tag | Entero que representa la etiqueta del mensaje. El significado de la etiqueta queda en manos del usuario, durante el proceso de envío no es modificado. |
comm | Comunicador utilizado para la comunicación. |
Funcion de envío de mensaje bloqueante de un proceso de origen a uno de destino. Al ser bloqueante significa que hasta que el mensaje no haya sido enviado (que salga del buffer de salida) no se continúa la ejecución.
Un esquema sencillo de su utilización es como sigue:
int main(int argc, char *argv[]) { int rank, size; MPI_Init(&argc, &argv); // Inicializamos las hebras MPI_Comm_size(MPI_COMM_WORLD, &size); // Obtenemos el numero total de hebras MPI_Comm_rank(MPI_COMM_WORLD, &rank); // Obtenemos el valor de nuestro identificador MPI_Send(&rank //referencia al vector de elementos a enviar ,1 // tamaño del vector a enviar ,MPI_INT // Tipo de dato que envias ,rank+1 // pid del proceso destino ,0 //etiqueta ,MPI_COMM_WORLD); //Comunicador por el que se manda . . . MPI_Finalize(); return 0; }
MPI_SUCCESS | No ha habido error, la función MPI se ha realizado satisfactoriamente. |
MPI_ERR_COMM | El comunicador seleccionado no es válido. Un error común es usar un comunicador nulo. |
MPI_ERR_COUNT | Valor de count no válido. El argumento count debe ser un valor no negativo, es posible utilizar el valor cero. |
MPI_ERR_TYPE | Argumento datatype no válido. Puede ocurrir cuando no se hace commit del tipo de dato (Véase MPI_Type_commit). |
MPI_ERR_TAG | Error de tag (etiqueta) no válido. La etiqueta debe tener un valor no negativo. Se permite utilizar en el recibimiento la etiqueta MPI_ANY_TAG. |
MPI_ERR_RANK | Rango (rank) de origen o de destino no válido. El valor debe estar comprendido entre cero y el número de procesos del comunicador menos uno. El rango en una funcion de recibir (como MPI_Recv) puede tomar el valor de MPI_ANY_SOURCE. |