Compartir a través de


MPI_Gather función

Recopila datos de todos los miembros de un grupo a un miembro.

Sintaxis

int MPIAPI MPI_Gather(
  _In_      void         *sendbuf,
            int          sendcount,
            MPI_Datatype sendtype,
  _Out_opt_ void         *recvbuf,
            int          recvcount,
            MPI_Datatype recvtype,
            int          root,
            MPI_Comm     comm
);

Parámetros

  • sendbuf [in]
    Puntero a 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 proceso envía datos al elemento del búfer de recepción. Se supone que los datos enviados por el proceso raíz están en el lugar correcto en el búfer de recepción.

  • sendcount
    Número de elementos del búfer de envío. Si sendcount es cero, la parte de datos del mensaje está vacía.

  • sendtype
    Tipo de datos de cada elemento del búfer.

  • recvbuf [out, optional]
    Puntero a un búfer en el proceso raíz que contiene los datos que se reciben de cada proceso. Incluye los datos enviados por el proceso raíz. Este parámetro solo es significativo en el proceso raíz. El parámetro recvbuf se omite para todos los procesos no raíz.

  • recvcount
    Número de elementos que se reciben de cada proceso. Este número no es el número total de elementos del búfer. Si el recuento es cero, la parte de datos del mensaje está vacía. Este parámetro solo es significativo en el proceso raíz.

  • recvtype
    El tipo de datos MPI de cada elemento del búfer. Este parámetro solo es significativo en el proceso raíz.

  • 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_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

Comentarios

Todos los parámetros de función son significativos en el proceso raíz, solo el sendbuf, sendcount, sendtype, root y comm son significativos en los demás procesos. Los parámetros raíz y comm deben ser idénticos en todos los procesos.

Por lo general, los tipos de datos derivados se permiten para los parámetros sendtype y recvtype . La firma de tipo especificada por los parámetros sendtype y recvtype en cada proceso debe ser igual a la firma de tipo de los parámetros recvcount y sendcount en el proceso raíz. La cantidad de datos que se envían debe ser igual a la cantidad de datos que se reciben entre el proceso raíz y cada proceso individual. Se siguen permitiendo asignaciones de tipos distintos entre remitente y receptor.

La especificación de recuentos y tipos no debe provocar que se escriba ninguna ubicación en la raíz más de una vez. Esta llamada es errónea.

Si el parámetro comm hace referencia a un intracomunicador, todos los procesos envían el contenido de su búfer de envío al proceso raíz. El proceso raíz recibe los mensajes y los almacena en orden de clasificación. El resultado es como si cada uno de los n procesos del grupo ejecutara una llamada a MPI_Send(sendbuf, sendcount, sendtype, root, …); y la raíz había ejecutado n llamadas a MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …). El valor de extent(recvtype) se obtiene mediante la función MPI_Type_get_extent . Una descripción alternativa de la función es que los n mensajes enviados por los procesos del grupo se concatenan en orden de clasificación y el mensaje resultante se recibe mediante la raíz como si se realizara una llamada a MPI_RECV(recvbuf, recvcountn, recvtype, ...). El búfer de recepción se omite para todos los procesos no raíz.

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 . Los datos se difunden desde el proceso raíz a todos los procesos del grupo B. Los parámetros de búfer de los procesos del grupo B deben ser coherentes con el parámetro de búfer del 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

Consulte también

Funciones colectivas de MPI

MPI_Datatype

MPI_Gatherv