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. 4. Descripción
  9. 5. Errores
  10. 6. Véase también

MPI_Send

Descripción breve

Realiza el envío de un mensaje de un proceso fuente a otro destino.

Sintaxis

En C

#include <mpi.h>
int MPI_Send(void *buf, int count, MPI_Datatype datatype,
     int dest, int tag, MPI_Comm comm)

En C++

#include <mpi.h>
void Comm::Send(const void* buf, int count, const Datatype& datatype,
     int dest, int tag) const

Parámetros

De entrada

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.

Descripció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.

Imagen MPI_send (Pulsar sobre la imagen para ver la animació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;
}

Errores

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.

Véase también

MPI_Isend

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

Valid HTML 4.01 Transitional