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 nº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 |