共用方式為


MPI_Alltoallv函式

從 群組的所有成員收集資料並散佈資料。 MPI_Alltoallv函式藉由允許來自每個進程的不同資料計數,將彈性新增至MPI_Alltoall函式。

語法

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
);

參數

  • sendbuf [in]
    要傳送至群組中所有進程的資料的指標。 緩衝區中元素的數目和資料類型是在 sendcountsendtype 參數中指定。 緩衝區中的每個元素都會對應至群組中的進程。

    如果 comm 參數參考內部通訊器,您可以在所有進程中指定 MPI_IN_PLACE 來指定就地選項。 會忽略 sendcountsdisplssendtype參數。 每個進程都會在對應的接收緩衝區元素中輸入資料。

    傳送和接收的資料必須具有 與 recvcounts 陣列和 recvtype 參數所指定的相同類型對應。 資料會從 rdispls 參數所指定的接收緩衝區位置讀取。

  • sendcounts [in]
    此進程在 sendbuf 參數中指定的緩衝區中傳送的資料元素數目。 如果sendcount 中的專案為零,來自該程式之訊息的資料部分是空的。

  • sdispls [in]
    相對於每個通訊器進程之資料的 sendbuf 參數位置。

    Entry j 會指定相對於 sendbuf 參數的位移,以便從中擷取目的地為 process j的傳出資料。

  • sendtype
    傳送緩衝區中專案的 MPI 資料類型。

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

  • recvcounts [in]
    接收緩衝區中每個通訊程式的資料元素數目。

  • rdispls [in]
    相對於來自每個通訊器進程之資料的 recvbuf 參數位置。

    recvbufrecvcountsrdispls 參數陣列中,每個陣列的第 n個元素是指從 n個通訊器進程接收的資料。

  • recvtype
    緩衝區中每個專案的 MPI 資料類型。

  • 通訊
    指定 MPI_Comm通訊 器控制碼。

傳回值

傳回成功 時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

備註

sendcount所指定的型別簽章和處理常式的 sendtype 參數必須等於 由 recvcount所指定的類型簽章,以及接收進程的 recvtype 參數。 因此,傳送的資料量必須等於任何一對進程之間收到的資料量。 仍允許傳送者和接收者之間的不同類型對應。

所有參數在所有處理常式上都很重要。 在所有進程上, comm 參數都必須相同。

如果comm參數參考內部通訊器,則從進程j 接收的j區塊會由 process j接收,並放在接收緩衝區的i區塊中。 這些區塊不需要具有相同的大小。

呼叫 MPI_Alltoallv 函式的結果就像每個進程都使用 傳送訊息給其他進程, MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …) 並且收到來自其他進程之訊息 MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …) ,並呼叫 。

指定就地選項表示在通訊器群組中的任何兩個進程之間會傳送和接收相同的資料量和類型。 不同的進程配對可以交換不同的資料量。 使用者必須確保 process i上的recvcounts[j]recvtype符合 process j] 和recvtype on process j。 此對稱交換在MPI_Alltoallv函式呼叫之後,傳送程式不會使用要傳送的資料的應用程式。

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

規格需求

產品

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_Alltoall

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv