2017-02-17 7 views
0

別のプロセスの配列の位置に値を送る必要があります。 そうMPI - 配列内の特定の位置に値を送る方法

1st process: MPI_ISend (&val..., process, ..) 
2nd process: MPI_Recv (&array[i], ..., process, ...) 

だから私は、私は変数を使用できないことを、私も知っている、最初のプロセス上のi番号を知っている - 最初のvalそれから私を送信し、他のプロセスが私を変えることができるよう(第二プロセスであります他の多くの人からのメッセージを受け入れる)。

答えて

1

最初に他の送受信は、iを上書きしてはいけません。あなたはメッセージを明確かつ分離しておくべきです。それはtagのためのものです! rank_2は、どのランクでデータを送信したかを分けることができます。だからあなたはメッセージを待っているすべてのランクに対して1つずつiを持つことができます。

最後に、片面MPI通信(MPI_Win)をチェックアウトするとよいでしょう。その技術では、rank_1は、メッセージをrank_2の配列にrank_1にしか知られていない位置に直接ドロップすることができます。

+0

私はタグが他の目的のために使用され、第1のプロセスはサイクルで2番目のプロセスに4つの値を送信しなければならないという問題があります。彼らは連続した場所にいないので、私はそれらを梱包することはできません。 MPI_PutとGetは本当に望ましいものではありません。だから、タグを解放して情報を分けるだけで助けになりますか? –

+0

私は分かりませんが、MPI_Gathervがあなたの問題を解決できるかどうかは私には聞こえますか?メッセージをランクごとに1つの配列にパックし(不連続な場所に記入してください[またはこれは不可能ですか?])、rank_2にこれらのローカル配列を収集します。 – SamVanDonut

関連する問題