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_Scatter

Descripción breve

Un proceso raíz trocea un mensaje en partes iguales y los envía individualmente al resto de procesos y a sí mismo.

Sintaxis

En C

#include <mpi.h>
int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype,
	void *recvbuf, int recvcount, MPI_Datatype recvtype, int root,
	MPI_Comm comm)

En C++

#include <mpi.h>
void MPI::Comm::Scatter(const void* sendbuf, int sendcount,
	const MPI::Datatype& sendtype, void* recvbuf,
	int recvcount, const MPI::Datatype& recvtype,
	int root) const

Parámetros

De entrada

sendbuf Dirección inicial del buffer de salida, solo útil para el proceso raíz, el resto de procesos ignoran este parámetro.
sendcount Número de elementos que se envía a cada proceso del comunicador (entero que sólo tiene sentido en el raíz).
sendtype Tipo de dato que se va a enviar, solo lo tendrá en cuenta la raíz (Como por ejemplo MPI_INT).
recvcount Número de elementos que espera recibir cada proceso (int).
recvtype Tipo de datos de los elementos a recibir (Como por ejemplo MPI_INT).
root Rango (rank) del proceso raíz (el que realizará el envío).
comm Comunicador por el que realizar la comunicación.

De salida

recvbuf Direción del buffer de recepción (para todos los procesos, incluido el proceso raíz).

Descripción

MPI_Scatter es la operación inversa de MPI_Gather.
El funcionamiento es como si la raíz ejecutara n operaciones de envío, una a cada proceso que ejecutase la función. En cada operación se enviaría un trozo de igual tamaño del mensaje completo original de forma ordenada. Esto significa que el mensaje original se parte en n partes iguales, que es exactamente el valor que debe tener recvcount.
Los tipos tanto de envío como de recepción deben ser iguales. Esto significa que la cantidad de datos enviados debe ser la misma que el conjunto de los datos recibidos.
Todos los argumentos de la función son importantes para el proceso raíz, sin embargo para el resto de procesos únicamente se tiene en cuenta los argumentos recvbuf, recvcount, recvtype, root. Los argumentos root y comm deben tener un valor idéntico en todos los procesos.

Imagen MPI_send (Pulsar sobre la imagen para ver la animación)

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_BUFFER Puntero al buffer no válido. Generalmente sucede cuando se especifica un puntero a null, lo cual no está permitido.
MPI_ERR_ROOT Proceso raíz (root) no válido. El proceso emisor debe ser especificado como un rango (rank) dentro del comunicador por el que se realiza la comunicación. Los rangos deben variar entre cero y el tamaño del comunicador menos uno.

Véase también

MPI_Gather

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

Valid HTML 4.01 Transitional