MPI_Alltoallw función
Recopila datos de y dispersos a todos los miembros de un grupo. La función MPI_Alltoallw es la forma más general de intercambio de datos completo en esta API. MPI_Alltoallw habilita una especificación independiente del recuento, el desplazamiento y el tipo de datos.
Sintaxis
int MPIAPI MPI_Alltoallw(
_In_ void *sendbuf,
_In_ int *sendcounts[],
_In_ int *sdispls[],
_In_ MPI_Datatype sendtypes[],
_Out_ void *recvbuf,
_In_ int *recvcounts[],
_In_ int *rdispls[],
_In_ MPI_Datatype recvtypes[],
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 que se envían y reciben deben tener la misma asignación de tipos, especificada por la matriz recvcounts y el parámetro recvtype , y se leen desde las ubicaciones del búfer de recepción según lo especificado por el parámetro rdispls .
sendcounts [in]
Número de elementos de datos que este proceso envía en el búfer tal y como se especifica en el parámetro sendbuf . Si un elemento de sendcount es cero, la parte de datos del mensaje de ese proceso está vacía.sdispls [in]
La ubicación, en bytes, relativa al parámetro sendbuf , de los datos de cada proceso de comunicador.Entry j especifica el desplazamiento relativo al parámetro sendbuf del que se van a tomar los datos salientes destinados al proceso j.
sendtypes [in]
Tipo de datos para cada uno de los elementos del búfer de envío. Entry j especifica el tipo de datos que se envían para procesar j en el grupo.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 .recvcounts [in]
Número de elementos de datos de cada proceso de comunicador en el búfer de recepción.rdispls [in]
La ubicación, en bytes, relativa al parámetro recvbuf , de los datos de cada proceso del comunicador. Entry i especifica el desplazamiento relativo al parámetro recvbuf en el que se colocan los datos entrantes del proceso i.En las matrices de parámetrosrecvbuf, recvcounts y rdispls, el nºelemento de cada matriz hace referencia a los datos recibidos del proceso de comunicador n.
recvtypes [in]
Tipo de datos de cada elemento del búfer. Entry i especifica el tipo de datos recibidos del proceso i.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_ALLTOALLW(SENDBUF, SENDCOUNT, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE,COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPES(*), SDISPLS(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR
Comentarios
Importante
Para permitir la máxima flexibilidad, el desplazamiento de bloques dentro de los búferes de envío y recepción se especifica en bytes.
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 jque 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.
La firma de tipo especificada por los parámetros sendcounts[j] y sendtypes[j] para process i debe ser igual a la firma de tipo asociada a recvcounts[i] y recvtypes[i] en process j. 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.
El resultado de una llamada a la función MPI_Alltoallw es como si cada proceso enviara un mensaje a cada otro proceso con MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...)
y recibiera un mensaje de cada otro proceso con una llamada a MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,i,...)
.
Si se especifica la opción local, se indica que se envía y recibe la misma cantidad y tipo de datos entre dos procesos en el 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 match recvcounts[i] y recvtype en el proceso j.
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 |