- 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
Reduce un valor de un grupo de procesos y lo redistribuye entre todos.
Sintaxis
En C
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