1

プログラムで mpi4py を使用しています。n>1 のコアでプログラムを実行し、各コアには独自のリスト (数字の「core_specific_list」と呼ぶことができます) があります。ランク 0 のコアに、「big_list」と呼ぶことができる 1 つの大きなリストにすべてのリストを収集させたいと考えています。 .

プログラムを次のように開始します (変数を定義するためだけに):

from mpi4py import MPI
comm = MPI.COMM_WORLD

したがって、大きなリストにこれを実行させるために、各コアに次の呼び出しをさせます。

big_list = comm.gather(core_specific_list, root = 0)

これにより、期待どおりに big_list作成されます (各要素は他のランクの core_specific_list の 1 つです)。また、各リスト要素は送信者のランク順に並んでいるようです (つまり、big_list の要素 0 はランク 0 の core_specific_list などです)。

質問:しかし、この仮定は正しいですか? つまり、big_list の要素 j はランク j の core_specific_list ですか? (私が行ったようにいくつかのケースでこれをテストできることは理解していますが、この仮定に頼ることができることを絶対に確認する必要があります)

ありがとうございました。

4

1 に答える 1

3

MPI_GATHER呼び出し (によってラップされた)がまさにそのように機能するため、その動作に間違いなく依存できますcomm.gather。MPI標準の§5.5から:

ルート プロセスはメッセージを受信し、ランク順に格納します。

...

別の説明はn、グループ内のプロセスによって送信されたメッセージがランク順に連結され、結果のメッセージが への呼び出しによるかのようにルートによって受信されるというものMPI_RECV(recvbuf, recvcount·n, recvtype, ...)です。

于 2014-10-28T20:31:10.853 に答える