MPI_Igatherv函式
以非封鎖方式,從群組的所有成員收集變數數據到一個成員。
語法
int MPIAPI MPI_Igatherv(
_In_opt_ const void *sendbuf,
_In_ int sendcount,
_In_ MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
_In_opt_ const int recvcounts[],
_In_opt_ const int displs[],
_In_ MPI_Datatype recvtype,
_In_ int root,
_In_ MPI_Comm comm,
_Out_ MPI_Request *request
);
參數
sendbuf [in, optional]
緩衝區的句柄,其中包含要傳送至根進程的數據。如果 comm 參數參考內部通訊器,您可以在所有進程中指定 MPI_IN_PLACE 來指定就地選項。 會忽略 sendcount 和 sendtype 參數。 每個進程都會在對應的接收緩衝區元素中輸入數據。 第 n個進程會將數據傳送至接收緩衝區的 n個元素。 根進程所傳送的數據會假設位於接收緩衝區的正確位置。
sendcount [in]
傳送緩衝區中的項目數目。 如果 sendcount 是零,則訊息的數據部分是空的。sendtype [in]
緩衝區中每個項目的數據類型。recvbuf [out, 選擇性]
根進程上緩衝區的句柄,其中包含從每個進程接收的數據,包括根進程所傳送的數據。 此參數只有在根進程中才重要。 所有非根進程都會忽略 recvbuf 參數。recvcounts[] [in, optional]
從每個進程收到的項目數目。 陣列中的每個項目都會對應至傳送程式的排名。 如果計數為零,則訊息的數據部分是空的。 此參數只有在根進程中才重要。displs[] [in, optional]
相對於來自每個通訊器進程之數據的 recvbuf 參數位置。 從 process j 接收的數據會放入 sendbuf 指標中根進程位移 displs[j] 元素的接收緩衝區。在 recvbuf、 recvcounts 和 displs 參數陣列中,每個數位的 n個元素會參考從 n個通訊器進程接收的數據。
此參數只有在根進程中才重要。
recvtype [in]
緩衝區中每個項目的數據類型。 此參數只有在根進程中才重要。root [in]
指定通訊器內接收進程的排名。comm [in]
MPI_Comm通訊器句柄。要求 [out]
表示通訊作業 的MPI_Request 句柄。
傳回值
傳回成功 時MPI_SUCCESS 。 否則,傳回值是錯誤碼。
在 Fortran 中,傳回值會儲存在 IERROR 參數中。
Fortran
MPI_IGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE,
ROOT, COMM, REQUEST, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), RECVTYPE, ROOT, COMM, REQUEST, IERROR
備註
非封鎖呼叫會起始必須在個別完成呼叫中完成的統一縮減作業。 起始之後,作業可能會獨立於參與進程的任何計算或其他通訊之外進行。 如此一來,非封鎖縮減作業就可以藉由在「背景」中執行縮減作業,來減輕縮減作業的可能同步處理效果。
所有完成呼叫 (例如, MPI_Wait) 都支援非封鎖縮減作業。
規格需求
產品 |
Microsoft MPI v7 |
標頭 |
Mpi.h;Mpif.h |
媒體櫃 |
Msmpi.lib |
DLL |
Msmpi.dll |