MPI_Reduce función
Realiza una operación de reducción global en todos los miembros de un grupo. Puede especificar una operación matemática o lógica predefinida o una operación definida por la aplicación.
Sintaxis
int MPIAPI MPI_Reduce(
_In_ void *sendbuf,
_Out_opt_ void *recvbuf,
int count,
MPI_Datatype datatype,
MPI_Op op,
int root,
MPI_Comm comm
);
Parámetros
sendbuf [in]
Identificador de un búfer que contiene los datos que se van a enviar al proceso raíz.Si el parámetro comm hace referencia a un intracomunicador, puede especificar una opción local especificando MPI_IN_PLACE en todos los procesos. Los parámetros sendcount y sendtype se omiten. Cada proceso escribe datos en el elemento de búfer de recepción correspondiente. El nºproceso envía datos al nºelemento del búfer de recepción. El proceso raíz toma sus datos de entrada del elemento correspondiente del búfer de recepción y lo reemplaza por los datos de salida.
recvbuf [out, optional]
Identificador de un búfer para recibir el resultado de la operación de reducción. Este parámetro solo es significativo en el proceso raíz.count
Número de elementos que se van a enviar desde este proceso.datatype
Tipo de datos de cada elemento del búfer. Este parámetro debe ser compatible con la operación tal como se especifica en el parámetro op .op
Operación de reducción global que se va a realizar. El identificador puede indicar una operación integrada o definida por la aplicación. Para obtener una lista de las operaciones predefinidas, consulte el tema MPI_Op .root
Rango del proceso receptor dentro del comunicador especificado.comm
Identificador del comunicador MPI_Comm.
Valor devuelto
Devuelve MPI_SUCCESS si se realiza correctamente. De lo contrario, el valor devuelto es un código de error.
En Fortran, el valor devuelto se almacena en el parámetro IERROR .
Fortran
MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR
Comentarios
La función MPI_Reduce se implementa con la suposición de que la operación especificada es asociativa. Todas las operaciones predefinidas están diseñadas para ser asociativas y conmutantes. Los usuarios pueden definir operaciones diseñadas para ser asociativas, pero no conmutantes. El orden de evaluación predeterminado de una operación de reducción viene determinado por las clasificaciones de los procesos del grupo. Sin embargo, la implementación puede aprovechar la asociatividad, la asociatividad y la commutividad para cambiar el orden de evaluación. Este proceso puede cambiar el resultado de la reducción de las operaciones que no son estrictamente asociativas y conmutantes, como la adición de punto flotante.
Algunas aplicaciones no pueden omitir la naturaleza no asociativa de las operaciones de punto flotante o pueden usar operaciones definidas por el usuario que requieren un orden especial de evaluación y no se pueden tratar como asociativas. En este caso, puede aplicar explícitamente el orden de evaluación. Por ejemplo, en el caso de las operaciones que requieren un orden estricto de izquierda a derecha o de derecha a izquierda, puede usar el siguiente proceso:
- Recopile todos los operandos en un único proceso, por ejemplo, mediante la función MPI_Gather .
- Aplique la operación de reducción en el orden necesario, por ejemplo, mediante la función MPI_Reduce_local .
- Si es necesario, difunda o disperse el resultado en los demás procesos.
Nota
Es posible proporcionar diferentes operaciones definidas por el usuario a la función MPI_Reduce en cada proceso. La función no define qué operaciones se usan en qué operandos en este caso. No se pueden realizar suposiciones sobre cómo se implementa la función MPI_Reduce . Es más seguro especificar la misma operación en cada proceso.
Los operadores definidos por el usuario pueden funcionar en tipos de datos generales derivados. En este caso, cada argumento al que se aplica la operación de reducción es un elemento que se describe mediante este tipo de datos, que puede contener varios valores básicos.
Los tipos de datos superpuestos se permiten en los búferes de envío, pero no en los búferes de recepción. Los tipos de datos superpuestos en los búferes de recepción pueden dar resultados impredecibles y se consideran un error.
Si el parámetro comm hace referencia a un intracomunicador, la función MPI_Reduce combina los elementos como se especifica en el búfer de entrada de cada proceso del grupo y, mediante la operación especificada, devuelve el valor combinado en el búfer de salida del proceso raíz.
El búfer de entrada y el búfer de salida tienen el mismo número de elementos del mismo tipo de datos. Llame a la función en todos los miembros del grupo mediante los mismos valores para los parámetros count, datatype, op, root y comm . Esta práctica garantiza que todos los procesos proporcionen búferes de entrada y búferes de salida de la misma longitud, con elementos del mismo tipo.
Cada proceso puede proporcionar un elemento o una secuencia de elementos, en cuyo caso la operación se ejecuta por elemento en cada entrada de la secuencia. Por ejemplo, si la operación es MPI_MAX y el búfer de envío contiene dos elementos que son números de punto flotante, recvbuf(1)
recibe el máximo global de (sendbuf(1))
y recvbuf(2)
recibe el máximo global de (sendbuf(2))
.
Si el parámetro comm hace referencia a un intercomunicador, la llamada implica todos los procesos del intercomunicador, pero con un grupo, grupo A, que define el proceso raíz. Todos los procesos del otro grupo, grupo B, establecen el mismo valor en el parámetro raíz , es decir, la clasificación del proceso raíz del grupo A. El proceso raíz establece el valor MPI_ROOT en el parámetro raíz . Todos los demás procesos del grupo A establecen el valor MPI_PROC_NULL en el parámetro raíz . Solo los parámetros de búfer de envío son significativos en los procesos del grupo B y solo los parámetros del búfer de recepción son significativos en el proceso raíz.
Requisitos
Producto |
Paquete redistribuible DE HPC Pack 2012 MS-MPI, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package o HPC Pack 2008 Client Utilities |
Encabezado |
Mpi.h; Mpif.h |
Biblioteca |
Msmpi.lib |
Archivo DLL |
Msmpi.dll |