-1

そのため、MPI (OpenMPI 実装) を使用する行列乗算を自分で作成しようとしています。問題は、MPI_Send/MPI_Recv によるマスターからスレーブへのマトリックスの一部の送信は適切に機能しますが、マスター プロセス内の MPI_Recv がスレーブから応答を受信することになっている (//!!! コメントでマークされている) ことです。 .

ただし、スレーブ プロセスが応答を送信していることがわかります (167 行目の debugMessage)。

質問を明確にするために、コードは http://pastebin.com/ZY9jQXDDにあります。

それで、誰でも問題がどこにあるのか知っています。私を助けてもらえますか?

4

1 に答える 1

1

あなたの問題は、タグ値の不一致と同じくらい単純です。マスター プロセスは、次のタグ値を持つメッセージを予期します0:

MPI_Recv(&ans, sizeof(answer),MPI_BYTE,MPI_ANY_SOURCE,0,
         MPI_COMM_WORLD,MPI_STATUS_IGNORE );          |
// ------------------- tag = 0 -----------------------+

ワーカー プロセスがタグ付きのメッセージを送信している間、RESULTたまたま として定義されてい1ます。マスターの受信呼び出しに適切なタグを配置するMPI_ANY_TAGか、ワーカーがさまざまなタグでメッセージを送信できる場合に使用します。

無償のアドバイス: を使用して構造体を送信することMPI_BYTEは、非常にアンチ MPI であり、非常に非移植的なスタイルです。MPI_Type_create_struct移植可能な方法で構造体を送信するために、派生データ型を構築します。

于 2013-04-22T21:34:50.957 に答える