從群組的所有成員收集資料,並將資料傳送給群組的所有成員。 MPI_Allgather函式類似于MPI_Gather函式,不同之處在于它會將資料傳送至所有進程,而不只是傳送至根。 MPI_Allgather的使用規則會對應至MPI_Gather的規則。
語法
int MPIAPI MPI_Allgather(
_In_ void *sendbuf,
_In_ int sendcount,
_In_ MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
MPI_Comm comm
);
參數
sendbuf [in]
要傳送至群組中所有進程之資料的指標。 緩衝區中元素的數目和資料類型是在 sendcount 和 sendtype 參數中指定。 緩衝區中的每個專案都會對應至群組中的進程。如果 comm 參數參考內部通訊程式,您可以在所有進程中指定 MPI_IN_PLACE 來指定就地選項。 會忽略 sendcount和sendtype參數。 每個進程都會在對應的接收緩衝區元素中輸入資料。 第 n個進程會將資料傳送至接收緩衝區的第 n個元素。
sendcount [in]
在 sendbuf 參數中指定的緩衝區中元素數目。 如果 sendcount 為零,則訊息的資料部分是空的。sendtype [in]
傳送緩衝區中專案的 MPI 資料類型。recvbuf [out]
緩衝區的指標,其中包含從每個進程接收的資料。 緩衝區中元素的數目和資料類型是在 recvcount 和 recvtype 參數中指定。recvcount
接收緩衝區中的專案數目。 如果計數為零,則訊息的資料部分是空的。recvtype
接收緩衝區中專案的 MPI 資料類型。通訊
MPI_Comm communicator 控制碼。
傳回值
傳回成功時 MPI_SUCCESS 。 否則,傳回值是錯誤碼。
在 Fortran 中,傳回值會儲存在 IERROR 參數中。
Fortran
MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
備註
與進程 上 sendtype 參數相關聯的類型簽章必須等於與任何其他進程 上 recvtype 參數相關聯的類型簽章。
如果comm參數參考內部通訊程式,呼叫 MPI_ALLGATHER(...) 的結果就如同所有進程執行 root = 0 , ..., n-1 對 的 n 個呼叫 MPI_Gather(sendbuf,sendcount,sendtype,recvbuf,recvcount,recvtype,root,comm) 一樣。
如果 comm 參數參考 intercomicator,則一個群組的每個進程,例如,群組 A 會貢獻 sendcount 參數中指定的資料項目數目。 此資料會串連,且結果會儲存在其他群組 B 的每個進程,群組 B。相反地,群組 B 中進程的串連會儲存在群組 A 中的每個進程。群組 A 中的傳送緩衝區參數必須與群組 B 中的接收緩衝區參數一致,反之亦然。
群組 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 |