- 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
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
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.
(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