2

たとえば、特にすべてのMPIプロセスが互いに独立している(異なるMPIプロセス間に同期がない)MPIプログラムで、MPIプロセスにエラーについて他のユーザーに通知させるにはどうすればよいですか?

ありがとう

4

4 に答える 4

2

すべてのプロセスが独立しているMPIプログラムについてのあなたの考えは非常に奇妙だと思います。定義上、MPIプログラムのすべてのプロセスは独立しているわけではなく、たとえば、MPI_INITを呼び出した後は、すべて同じコミュニケーター内にあるため、お互いの存在を「認識」していると思います。その後、プロセスが同期しないようにコードを記述した可能性がありますが、プロセスが相互に通信するための手段はまだ存在します。

(同期が必要な)調査するメカニズムの1つは、MPI_BCAST(ブロードキャスト)です。別のアプローチは、非ブロッキング送信操作であるMPI_ISENDを使用することですが、遅かれ早かれ、いずれかのプロセスが受信する必要があり、送信プロセスは送信が成功したかどうかをテストする必要があります。

于 2010-05-26T18:39:49.907 に答える
2

あなたが指摘する格差は私に不思議に思います:なぜあなたはMPIを使っているのですか?それはあなたの問題に合わないようです、そしてMPIの丸い穴に四角いペグを押し込もうとするよりもそれほど悪いことはありません。「MPIプロセス間の同期がない」とは、本質的にシリアルファーミングであるワークロードを取得し、それをMPIに変換しようとしているように聞こえます。

そうは言っても、MPI_IrecvとMPI_Testを定期的にポーリングするだけで、おそらくやりたいことができるでしょう。

于 2010-12-21T06:04:02.113 に答える
1

非ブロッキング通信のおかげで、MPIを処理する場合、独立していることと同期がないことは、まったく異なる2つのシナリオです。

エラーが発生すると、プロセスは指定された「エラー」タグ付きのメッセージをブロードキャストし、各プロセスはこのタグ付きのメッセージの非ブロッキング受信を定期的に送信します。このようなメッセージを受信した場合は、最近エラーが発生したことを意味し、それに応じて対応できます。それ以外の場合は、通常の実行を続行します。

(この場合の「ブロードキャスト」はMPI_Bcast、集合的な通信操作であるため、ブロックを指すものではないことに注意してください。代わりに、関係するすべての人に同じメッセージを送信することを意味します。プロセスの場合、この送信も非ブロッキングである必要があります。)

于 2010-05-26T22:10:09.773 に答える
0

MPI標準には、あるランクから別のランク(または複数のランク)に「割り込み」を送信できるようにするものはありません。一般に、進行には、ユーザーコードがMPIライブラリに時々入る必要があります。進行がない場合、ランク間で通信するための標準的な方法はありません。

同期には、MPIライブラリへのエントリが時々必要です。MPI_Barrierは、同期への「ビッグハンマー」アプローチです。MPI_Reduce_Scatterと組み合わせると、少なくとも1つのランクにエラーがあることを知ることができます。

于 2010-05-26T22:04:37.413 に答える