Compartir a través de


función MPI_Scatterv

Dispersa los datos de un miembro en todos los miembros de un grupo. La función MPI_Scatterv realiza el inverso de la operación que realiza la función MPI_Gatherv .

Sintaxis

int MPIAPI MPI_Scatterv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *displs,
        MPI_Datatype sendtype,
  _Out_ 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 va a enviar el proceso raíz.

    El parámetro sendbuf se omite para todos los procesos no raíz.

    Si el parámetro comm hace referencia a un intracomunicador, puede especificar una opción local especificando MPI_IN_PLACE en el proceso raíz. Se omiten los parámetros recvcount y recvtype . El vector disperso todavía se considera que contiene n segmentos, donde n es el tamaño del grupo; el segmento que corresponde al proceso raíz no se mueve.

  • sendcounts [in]
    Número de elementos que se van a enviar a cada proceso. Si sendcount[i] es cero, la parte de datos del mensaje para ese proceso está vacía.

    El parámetro sendcount se omite para todos los procesos no raíz.

  • displs [in]
    Ubicaciones de los datos que se van a enviar a cada proceso del comunicador. Cada ubicación de la matriz es relativa al elemento correspondiente de la matriz sendbuf .

    En las matrices de parámetros sendbuf, sendcounts y displs, el elemento de cada matriz hace referencia a los datos que se enviarán al proceso del comunicador n.

    Este parámetro solo es significativo en el proceso raíz.

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

    El parámetro sendcount se omite para todos los procesos no raíz.

  • recvbuf [out]
    Puntero a un búfer que contiene los datos que se reciben en cada proceso. El número y el tipo de datos de los elementos del búfer se especifican en los parámetros recvcount y recvtype .

  • recvcount
    Número de elementos del búfer de recepción. Si el recuento es cero, la parte de datos del mensaje está vacía.

  • recvtype
    Tipo de datos de los elementos del búfer de recepción.

  • root
    Rango en el proceso de envío 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_SCATTERV(SENDBUF, SENDCOUNT, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, DISPLS(*), RECVCOUNT(*), RECVTYPE, ROOT, COMM, IERROR

Comentarios

La función MPI_Scatterv amplía la funcionalidad de la función MPI_Scatter al permitir que se envíe un recuento variable de datos, como se especifica en la matriz sendcounts , a cada proceso.

La especificación de recuentos, tipos y desplazamientos no debe hacer que ninguna ubicación de la raíz se lea más de una vez.

Todos los parámetros de función son significativos en el proceso raíz, solo los parámetros recvbuf, recvcount, recvtype, 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.

La firma de tipo especificada por los parámetros sendcount y sendtype para el proceso raíz debe ser igual a la firma de tipo especificada por los parámetros recvcount y recvtype para todos los procesos. Por lo tanto, la cantidad de datos enviados debe ser igual a la cantidad de datos que se reciben entre cualquier par de procesos. Todavía se permiten asignaciones de tipos distintas entre remitente y receptor.

Si comm es un intracomunicador, el resultado es como si la raíz ejecutó n operaciones MPI_Send(sendbuf + displs[i]*extent(sendtype), sendcounts[i], sendtype, I, …)de envío; y cada proceso ejecutó una recepción, MPI_Recv(recvbuf, recvcount, recvtype, i,…).

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 transmiten 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_Gather

MPI_Gatherv

MPI_Scatter