MPI_Reduce函式
跨群組的所有成員執行全域縮減作業。 您可以指定預先定義的數學或邏輯運算或應用程式定義的作業。
語法
int MPIAPI MPI_Reduce(
_In_ void *sendbuf,
_Out_opt_ void *recvbuf,
int count,
MPI_Datatype datatype,
MPI_Op op,
int root,
MPI_Comm comm
);
參數
sendbuf [in]
緩衝區的句柄,其中包含要傳送至根進程的數據。如果 comm 參數參考內部通訊程式,您可以在所有進程中指定 MPI_IN_PLACE 來指定就地選項。 會忽略 sendcount 和 sendtype 參數。 每個進程都會在對應的接收緩衝區元素中輸入數據。 第 n個進程會將數據傳送至接收緩衝區的第 n個元素。 根進程會從接收緩衝區的對應元素取得其輸入數據,並將它取代為輸出數據。
recvbuf [out, optional]
要接收縮減作業結果之緩衝區的句柄。 此參數只有在根進程才重要。計數
要從這個進程傳送的項目數目。datatype
緩衝區中每個項目的數據類型。 此參數必須與 op 參數中指定的作業相容。op
要執行的全域縮減作業。 句柄可以指出內建或應用程式定義的作業。 如需預先定義的作業清單,請參閱 MPI_Op 主題。root
指定通訊器內接收進程的排名。通訊
MPI_Comm communicator 句柄。
傳回值
傳回成功時 MPI_SUCCESS 。 否則,傳回值是錯誤碼。
在 Fortran 中,傳回值會儲存在 IERROR 參數中。
Fortran
MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR
備註
MPI_Reduce函式會實作,並假設指定的作業具有關聯性。 所有預先定義的作業都是設計成關聯和通通。 用戶可以定義設計為關聯的作業,但無法進行通通。 縮減作業的預設評估順序取決於群組中進程的排名。 不過,實作可以利用關聯性,或關聯性和通通性來變更評估順序。 此程式可能會變更不嚴格關聯和交換作業的縮減結果,例如浮點加法。
某些應用程式無法忽略浮點運算的非關聯本質,或使用需要特殊評估順序的使用者定義作業,而且無法視為關聯。 在此情況下,您可以明確強制執行評估的順序。 例如,在需要嚴格由左至右或由右至左評估順序的作業中,您可以使用下列程式:
- 例如,使用 MPI_Gather 函式,在單一進程中收集所有操作數。
- 例如,使用 MPI_Reduce_local 函式,以必要的順序套用縮減作業。
- 如有需要,請將結果廣播或散佈至其他進程。
注意
可以將不同的使用者定義作業提供給每個進程中 的 MPI_Reduce 函式。 函式不會定義在此案例中使用哪些操作數的作業。 您無法假設如何實作 MPI_Reduce 函式。 在每一個進程中指定相同的作業是最安全的。
用戶定義運算子可以在一般衍生數據類型上運作。 在此情況下,將縮減作業套用的每個自變數都是這類數據類型所描述的一個專案,其中包含數個基本值。
傳送緩衝區中允許重疊的數據類型,但在接收緩衝區中則不允許。 接收緩衝區中的重疊數據類型可能會產生無法預期的結果,並視為錯誤。
如果 comm 參數參考內部通訊程式, MPI_Reduce 函式會結合群組中每個進程的輸入緩衝區中指定的專案,並使用指定的作業,傳回根進程的輸出緩衝區中的合併值。
輸入緩衝區和輸出緩衝區具有相同數據類型的相同項目數目。 針對 count、 datatype、 op、 root 和 comm 參數使用相同的值,呼叫所有群組成員中的函式。 此做法可確保所有進程都提供相同長度的輸入緩衝區和輸出緩衝區,以及相同類型的元素。
每個進程都可以提供一個專案或元素序列,在此情況下,作業會在序列的每個項目上執行。 例如,如果作業 MPI_MAX ,而傳送緩衝區包含兩個浮點數的專案,則 recvbuf(1)
會收到的 (sendbuf(1))
全域最大值,並 recvbuf(2)
接收的 (sendbuf(2))
全域最大值。
如果 comm 參數參考 intercomicator,則呼叫會牽涉到 intercomicator 中的所有進程,但具有定義根進程的一個群組 A。 另一個群組 B 中的所有進程在根參數中設定相同的值,也就是群組 A 中根進程的排名。根進程會在根參數中設定值MPI_ROOT。 群組 A 中的所有其他進程都會在根參數中設定值MPI_PROC_NULL。 只有傳送緩衝區參數在群組 B 進程中很重要,而且只有接收緩衝區參數在根進程中很重要。
規格需求
產品 |
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 |