2016-05-29 5 views
0

私はdouble Aint Bの2つの配列をMPIでブロードキャスト(私はC++を使用しています)を使って送りたいと思います。通常、リーダーの場合はcommunicator.Bcastがブロックされますが、ライターの場合はブロックされません。だから、私がした場合:2つのMPIブロードキャストが次々と

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

いくつかのプロセスが最初に2番目のメッセージを取得し、ものが混乱することが起こる可能性があります。

私はこの問題の良い、清潔な解決策は何でしょうか?派生データ型/ MPI_Packを使うべきですか?それは醜いようです。どういうわけか放送でTAGの使用を強制することはできますか?

答えて

4

MPIは、コミュニケータ上の一括呼び出しが発行された順に処理されることを保証します。つまり、読者は最初に2番目のメッセージを取得しません。その例はsaveです。

参考までに、MPI C++インターフェイスは廃止されました。新しいコードに直接C APIを使用する方がよいでしょう。

+0

集合コールのシーケンスがすべてのランクで同じである限り、保証があることに言及することは重要です。それ以外の場合、動作は未定義です。 –

関連する問題