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_Allreduce

Descripción breve

Reduce un valor de un grupo de procesos y lo redistribuye entre todos.

Sintaxis

En C

#include <mpi.h>
int MPI_Allreduce(void *sendbuf, void *recvbuf, int count,
    MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)

En C++

#include <mpi.h>
void MPI::Comm::Allreduce(const void* sendbuf, void* recvbuf,
    int count, const MPI::Datatype& datatype, const
    MPI::Op& op) const=0

Parámetros

De entrada

sendbuf Dirección inicial del buffer en envío.
count Número de elementos que se va a enviar del buffer de envío (int).
datatype Tipo de datos de los elementos del buffer de envío (por ejemplo MPI_INT).
op Operación de reducción, constante definida por MPI (Definidas en el apartado de descripción).
comm Comunicador por el que se realiza la comunicación.

De salida

recvbuf Dirección inicial del buffer de recepción.

Descripción

Igual que MPI_Reduce, salvo que el resultado se redistribuye entre todos los procesos.
Las funciones de reducción (tales como MPI_Reduce, MPI_Allreduce, MPI_Scan...) realizan una operación de reducción global (como puede ser calcular el máximo, la suma, hacer un AND lógico, etc) sobre cada uno de los miembros del grupo. La operación de reducción puede ser tanto una predefinida de la lista de operaciones como una operación definida por el usuario.
Se puede notar que únicamente se especifica una vez el número de datos y el tipo de datos, esto es porque el número de datos es el mismo tanto en la emisión como en la recepción, al igual que el tipo. Si el número de datos es mayor que uno, la operación de reducción se realiza uno a uno cada elemento con su posición correspondiente (es decir, el elemento 1 de envío se reduce con cada elemento en la posición 1 de cada sendbuf).
Lista de operaciones disponibles:

MPI_MAX Máximo entre los elementos
MPI_MIN Mínimo entre los elementos
MPI_SUM Suma
MPI_PROD Producto
MPI_LAND AND lógico (devuelve 1 o 0, verdadero o falso)
MPI_BAND AND a nivel de bits
MPI_LOR OR lógico
MPI_BOR OR a nivel de bits
MPI_LXOR XOR lógico
MPI_BXOR XOR a nivel de bits
MPI_MAXLOC Valor máximo entre los elementos y el rango del proceso que lo tenía
MPI_MINLOC Valor mínimo entre los elementos y el rango del proceso que lo tenía

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.

Véase también

MPI_Reduce
MPI_Scan

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

Valid HTML 4.01 Transitional