MPI_Gather函式
從群組的所有成員收集數據到一個成員。
語法
int MPIAPI MPI_Gather(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
參數
sendbuf [in]
緩衝區的指標,其中包含要傳送至根進程的數據。如果 comm 參數參考內部通訊程式,您可以在所有進程中指定 MPI_IN_PLACE 來指定就地選項。 會忽略 sendcount 和 sendtype 參數。 每個進程都會在對應的接收緩衝區元素中輸入數據。 第 n個進程會將數據傳送至接收緩衝區的第 n個元素。 根進程傳送的數據假設位於接收緩衝區的正確位置。
sendcount
傳送緩衝區中的項目數目。 如果 sendcount 為零,則訊息的數據部分是空的。sendtype
緩衝區中每個項目的數據類型。recvbuf [out, optional]
根進程上緩衝區的指標,其中包含從每個進程接收的數據。 它包含根進程所傳送的數據。 此參數只有在根進程才重要。 所有非根進程都會忽略 recvbuf 參數。recvcount
從每個進程收到的項目數目。 這個數位不是緩衝區中的項目總數。 如果計數為零,則訊息的數據部分是空的。 此參數只有在根進程才重要。recvtype
緩衝區中每個專案的 MPI 數據類型。 此參數只有在根進程才重要。root
指定通訊器內接收進程的排名。通訊
MPI_Comm communicator 句柄。
傳回值
傳回成功時 MPI_SUCCESS 。 否則,傳回值是錯誤碼。
在 Fortran 中,傳回值會儲存在 IERROR 參數中。
Fortran
MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
備註
所有函式參數在根進程上都很重要,只有 sendbuf、 sendcount、 sendtype、 root 和 comm 對其他進程很重要。 根和 comm 參數在所有進程上都必須相同。
一般而言, sendtype 和 recvtype 參數都允許衍生數據類型。 每個進程上 sendtype 和 recvtype 參數所指定的類型簽章必須等於根進程上 recvcount 和 sendcount 參數的類型簽章。 傳送的數據量必須等於根進程與每個個別進程之間收到的數據量。 仍然允許傳送者和接收者之間的相異類型對應。
計數和類型的規格不應造成根目錄上的任何位置多次寫入。 這類呼叫錯誤。
如果 comm 參數參考內部通訊程式,則所有進程都會將其傳送緩衝區的內容傳送至根進程。 根進程會接收訊息,並以順序儲存這些訊息。 結果就像群組中的每個 n 進程都執行了 呼叫 MPI_Send(sendbuf, sendcount, sendtype, root, …)
,而根已執行 n 個呼叫 MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …)
。 的值 extent(recvtype)
是使用 MPI_Type_get_extent 函式取得。 函式的替代描述是群組中進程所傳送的 n 個訊息會依順序串連,而產生的訊息會由根接收,就像 MPI_RECV(recvbuf, recvcountn, recvtype, ...)
呼叫 一樣。 所有非根進程都會忽略接收緩衝區。
如果 comm 參數參考 intercomicator,則呼叫會牽涉到 intercomicator 中的所有進程,但具有定義根進程的一個群組 A。 另一個群組 B 中的所有進程在根參數中設定相同的值,也就是群組 A 中根進程的排名。根進程會在根參數中設定值MPI_ROOT。 群組 A 中的所有其他進程都會在根參數中設定值MPI_PROC_NULL。 數據會從根進程廣播到群組 B 中的所有進程。群組 B 中進程的 緩衝區 參數必須與根進程的 buffer 參數一致。
規格需求
產品 |
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 |