2016-05-11 3 views
1

コード:なぜ(収集)が失敗しますか?

#mpiexec -n 2 python3 gather.py 
from mpi4py import MPI 

comm = MPI.COMM_WORLD 
rank = comm.Get_rank() 

a = 1 
comm.barrier() 
b = comm.gather(a, root=rank) 
print("b:", b, rank) 
comm.barrier() 

出力すべきである:

B:[1,1]、0

B:[1,1]、1

しかしプログラムは何も印刷せず、終了しません。その理由は何ですか?どのようにして目的の出力を達成できますか?

+0

は、私が(彼らはすべてのデータを送信するために場所を知っているように)_every_プロセスが同じルートを指定する必要があることを_think_。今のところ、すべてのプロセスがルートとして自分自身を指定しているので、それらすべては、彼らがレシーバだとちょうどそれらにデータを送信するために誰かを待ってそこに座っていると思います。 – mgilson

+0

@mgilsonそれは論理的に聞こえる。あなたは望みの結果を達成することが他にどれほどあるか知っていますか?私はAllGather()btwを使いたくありません。 – SpiderRico

+0

私は望ましい結果が_is_何に依存だと思います。通常、他のプロセスのすべてのデータを指定されたプロセスに集めるという考え方です。データを収集するプロセスを知っていますか? – mgilson

答えて

1

MPIのすべての集団的操作は、それぞれのコミュニケータ内のすべてのプロセスによって呼び出される必要があります。多くのパラメータは、すべてのプロセスで同じでなければなりません。パラメータの意味は非常によくMPI standardに記載されています:

argumentsrootとCOMMは、すべての プロセスに同じ値を持っている必要があります。

また、MPI_Allgatherもあります。その後、データ全体がすべてのプロセスで使用可能です。つまり、ルートがありません。

関連する問題