Compartir a través de


MPI_Alltoall función

Recopila datos de y dispersos a todos los miembros de un grupo. El MPI_Alltoall es una extensión de la función MPI_Allgather . Cada proceso envía datos distintos a cada uno de los receptores. El bloque jque se envía desde el proceso i se recibe mediante el proceso j y se coloca en el bloque idel búfer de recepción.

Sintaxis

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        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 .

    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.

  • sendcount
    Número de elementos del búfer especificado en el parámetro sendbuf . Si sendcount es cero, la parte de datos del mensaje está vacía.

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

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

  • 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
    El tipo de datos MPI de los elementos del búfer de recepción.

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

Comentarios

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

La firma de tipo especificada por los parámetros sendcount y sendtype de un proceso debe ser igual a la firma de tipo especificada por los parámetros recvcount y recvtype . Por lo tanto, la cantidad de datos enviados debe ser igual a la cantidad de datos que se reciben entre cualquier par de procesos. Se siguen permitiendo asignaciones de tipos distintos entre remitente y receptor.

Si el parámetro comm hace referencia a un intracomunicador, el resultado de una llamada a MPI_ALLGATHER(...) es como si cada proceso ejecutara un envío a cada proceso, incluido por medio MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)de , y la recepción de cada otro proceso mediante MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …).

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.

El número de elementos enviados por procesos del grupo A, no tiene que ser igual al número de elementos enviados por procesos del grupo B. En concreto, puede mover los datos en una sola dirección especificando sendcount == 0 para la comunicación en la dirección inversa.

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_Allgather

MPI_Send

MPI_Recv