Compartir a través de


función MPI_Alltoallv

Recopila datos de y dispersiones de datos a todos los miembros de un grupo. La función MPI_Alltoallv agrega flexibilidad a la función MPI_Alltoall al permitir un recuento variable de datos de cada proceso.

Sintaxis

int MPIAPI MPI_Alltoallv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *sdispls,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
  _In_  int          *recvcounts,
  _In_  int          *rdispls,
        MPI_Datatype recvtype,
        MPI_Comm     comm
);

Parámetros

  • sendbuf [in]
    Puntero a los datos que se van a enviar a todos los procesos del grupo. El número y el tipo de datos de los elementos del búfer se especifican en los parámetros sendcount y sendtype . Cada elemento del búfer corresponde a un proceso del grupo.

    Si el parámetro comm hace referencia a un intracomunicador, puede especificar una opción local especificando MPI_IN_PLACE en todos los procesos. Se omiten los parámetros sendcount, sdispls y sendtype . Cada proceso escribe datos en el elemento de búfer de recepción correspondiente.

    Los datos enviados y recibidos deben tener la misma asignación de tipos especificada por la matriz recvcounts y el parámetro recvtype . Los datos se leen desde las ubicaciones del búfer de recepción especificado por el parámetro rdispls .

  • sendcounts [in]
    Número de elementos de datos que este proceso envía en el búfer especificado en el parámetro sendbuf . Si un elemento desendcount es cero, la parte de datos del mensaje de ese proceso está vacía.

  • sdispls [in]
    Ubicación, relativa al parámetro sendbuf , de los datos de cada proceso del comunicador.

    Entry j especifica el desplazamiento relativo al parámetro sendbuf desde el que se van a tomar los datos salientes destinados al proceso j.

  • sendtype
    El tipo de datos MPI de los elementos del búfer de envío.

  • recvbuf [out]
    Puntero a un búfer que contiene los datos recibidos de 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 .

  • recvcounts [in]
    Número de elementos de datos de cada proceso del comunicador en el búfer de recepción.

  • rdispls [in]
    Ubicación, relativa al parámetro recvbuf , de los datos de cada proceso del comunicador.

    En las matrices de parámetros recvbuf, recvcounts y rdispls, el elemento de cada matriz hace referencia a los datos recibidos del proceso del comunicador n.

  • recvtype
    El tipo de datos MPI de cada elemento del búfer.

  • comm
    Especifica el 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_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Comentarios

La firma de tipo especificada por los parámetros sendcount y sendtype para un proceso debe ser igual a la firma de tipo especificada por los parámetros recvcount y recvtype del proceso receptor. 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.

Todos los parámetros son significativos en todos los procesos. El parámetro comm debe ser idéntico en todos los procesos.

Si el parámetro comm hace referencia a un intracomunicador, el bloque jth que se envía desde el proceso i se recibe mediante process j y se coloca en el bloque idel búfer de recepción. Estos bloques no tienen que tener el mismo tamaño.

El resultado de llamar a la función MPI_Alltoallv es como si cada proceso enviara un mensaje a todos los demás procesos con , MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …)y recibió un mensaje de todos los demás procesos con una llamada a MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …).

Especificar la opción local indica que se envía y recibe la misma cantidad y tipo de datos entre los dos procesos del grupo del comunicador. Diferentes pares de procesos pueden intercambiar diferentes cantidades de datos. Los usuarios deben asegurarse de que recvcounts[j] y recvtype en el proceso i coinciden con recvcounts[i] y recvtype en el proceso j. Este intercambio simétrico puede ser útil en las aplicaciones en las que el proceso de envío no usa los datos que se van a enviar después de la llamada de función de MPI_Alltoallv .

Si el parámetro comm hace referencia a un intercomunicador, el resultado es como si cada proceso del grupo A envía un mensaje a cada proceso del grupo B y viceversa. El búfer de envío jdel proceso i del grupo A debe ser coherente con el búfer de recepción idel proceso j en el grupo B y viceversa.

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_Alltoall

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv