2016-05-29 83 views
0

我想發送兩個數組:double Aint B在MPI中使用廣播(我正在使用C++)。通常,communicator.Bcast爲讀者,但不爲作家。所以,如果我這樣做:兩個MPI廣播一個接一個

communicator.Bcast(A, a_len, ...) 
communicator.Bcast(B, b_len, ...) 

它可能會發生,某些進程會先檢索第二條消息,事情會搞砸。

我想知道,這個問題的好,乾淨的解決方案是什麼?我應該使用派生數據類型/ MPI_Pack?看起來很醜陋。我能以某種方式在廣播中強制使用TAG嗎?

回答

4

MPI保證通信器上的集體呼叫按其發出的順序進行處理。所以不,讀者不會先檢索第二條消息 - 這個例子就是保存。僅供參考,MPI C++接口已被棄用 - 最好將C API直接用於新代碼。

+0

值得一提的是,只要集體呼叫的順序在所有等級中相同,保證就存在。否則,行爲是不確定的。 –