共用方式為


MPI_Alltoall函式

從群組的所有成員收集數據並散佈數據。 MPI_AlltoallMPI_Allgather 函式的延伸模組。 每個進程都會傳送不同的數據給每個接收者。 從行程j傳送的 j 區塊會由 process j 接收,並放在接收緩衝區的第 i個區塊中。

語法

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        MPI_Comm     comm
);

參數

  • sendbuf [in]
    要傳送至群組中所有進程之數據的指標。 緩衝區中元素的數目和數據類型是在 sendcountsendtype 參數中指定。

    如果 comm 參數參考內部通訊程式,您可以在所有進程中指定 MPI_IN_PLACE 來指定就地選項。 會忽略 sendcountsendtype 參數。 每個進程都會在對應的接收緩衝區元素中輸入數據。 第 n個進程會將數據傳送至接收緩衝區的第 n個元素。

  • sendcount
    sendbuf 參數中指定的緩衝區中元素數目。 如果 sendcount 為零,則訊息的數據部分是空的。

  • sendtype
    傳送緩衝區中專案的 MPI 數據類型。

  • recvbuf [out]
    緩衝區的指標,其中包含從每個進程接收的數據。 緩衝區中元素的數目和數據類型是在 recvcountrecvtype 參數中指定。

  • recvcount
    接收緩衝區中的項目數目。 如果計數為零,則訊息的數據部分是空的。

  • recvtype
    接收緩衝區中專案的 MPI 數據類型。

  • 通訊
    MPI_Comm communicator 句柄。

傳回值

傳回成功時 MPI_SUCCESS 。 否則,傳回值是錯誤碼。

在 Fortran 中,傳回值會儲存在 IERROR 參數中。

Fortran

    MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

備註

所有進程的所有參數都很重要。 所有進程的 comm 參數都必須相同。

sendcount 所指定的類型簽章,以及進程的 sendtype 參數必須等於 recvcount 所指定的類型簽章,以及 recvtype 參數。 因此,傳送的數據量必須等於任何一對進程之間收到的數據量。 仍然允許傳送者和接收者之間的相異類型對應。

如果 comm 參數參考內部通訊程式,呼叫 MPI_ALLGATHER(...) 的結果就如同每個進程都執行傳送至每個進程,包括本身使用, MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)並使用 從其他每個行程 MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)接收 。

如果 comm 參數參考通訊器,則結果會如同群組 A 中的每個行程傳送訊息給群組 B 中的每個進程,反之亦然。 群組 A 中進程 i 的第 j個傳送緩衝區應該與群組 B 中進程 j 的接收緩衝區一致,反之亦然。

群組 A 中進程所傳送的項目數目不一定等於群組 B 中進程所傳送的項目數。特別是,您可以針對反向方向的通訊指定 sendcount == 0,只以一個方向移動數據。

規格需求

產品

HPC Pack 2012 MS-MPI 可轉散發套件、HPC Pack 2008 R2 MS-MPI 可轉散發套件、HPC Pack 2008 MS-MPI 可轉散發套件或 HPC Pack 2008 用戶端公用程式

標頭

Mpi.h;Mpif.h

媒體櫃

Msmpi.lib

DLL

Msmpi.dll

另請參閱

MPI 共同函式

MPI_Datatype

MPI_Allgather

MPI_Send

MPI_Recv