1

上三角行列と結果ベクトル b があります。私のプログラムは線形システムを解決する必要があります:

斧=b

パイプライン方式を採用。制約の 1 つは、プロセスの数が方程式の数よりも少ないことです (2 から numberOfEquations-1 まで可能であるとしましょう)。

私は今コードを持っていません、私は疑似コードについて考えています..

私の考えでは、プロセスの 1 つがランダムな上三角行列 (A) ベクトル b を作成するというものでした。これがランダム行列であるとしましょう:

1  2  3   4   5   6
0  1  7   8   9   10
0  0  1   12  13  14
0  0  0   1   16  17
0  0  0   0   1   18
0  0  0   0   0   1

ベクトル b は[10 5 8 9 10 5] であり、方程式の数よりも少ない量のプロセスがあります (2 つのプロセスとしましょう)

だから私が考えたのは、いくつかのプロセスがマトリックスから各プロセスラインに送信し、ベクトルbから関連する番号を送るということです。

したがって、行列の最後の行とベクトル b の最後の数値は、X を計算して結果をプロセス 0 に送信するよりも、プロセス [numProcs-1] (ここでは最後のプロセス (プロセス 1) を意味します) に送信されます。

プロセス 0 は行列の 5 行を計算する必要があり、ここで立ち往生しています。プロセス 1 によって計算された X がありますが、プロセスが行列の次の行と関連する番号を自分自身に送信するにはどうすればよいですか?計算する必要があるベクトル b から?

出来ますか?「自分」に送るのはよくないと思う

4

2 に答える 2

4

はい、MPI はプロセスがそれ自体にデータを送信することを許可しますが、ブロッキング操作を使用する場合は、デッドロックの可能性について特に注意する必要があります。その場合、通常、非ブロッキング送信とブロッキング受信を組み合わせるか、またはその逆を行うか、または のような呼び出しを使用しますMPI_Sendrecv。自分自身にメッセージを送信すると、通常、ネットワークやその他の重機が関与することなく、メッセージがソースバッファーから宛先バッファーにメモリコピーされるだけで終了します。

いいえ、自己とのコミュニケーションは必ずしも悪いことではありません。最も明白な利点は、自己対話を処理するために必要な特別なロジックが削除/削減されるため、コードがより対称になることです。自分自身への送受信も、ほとんどの集団通信呼び出しで発生します。たとえばMPI_Scatter、データの一部もルート プロセスに送信します。不必要にデータをレプリケートしてパフォーマンスを低下させる send-to-self のケースを防ぐために、MPI ではMPI_IN_PLACEほとんどの通信関連の集合でインプレース モード ( ) を使用できます。

于 2013-11-05T12:14:09.363 に答える
1

出来ますか?「自分」に送るのはよくないと思う

もちろん、自分とのコミュニケーションは可能です。そのためのコミュニケータもあります: MPI_COMM_SELF. 自分自身と話すことは、それほど珍しいことではありません。あなたの設定は、MPI Collective を使用したいように思えます。MPI_Scatter と MPI_Gather を見て、探している機能が提供されていないかどうかを確認してください。

于 2013-11-05T12:12:06.267 に答える