私はAllGatherで実験するには、次のコード()コード化されました:次のように私はそれを実行異なる繰り返し値を持つforループでAllGather()が失敗するのはなぜですか?
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
a = None
if rank == 0:
a = 2
if rank == 1:
a = 3
z = 2
for i in range(0, a):
z = comm.allgather(z)
print(z, rank)
comm.barrier()
を:
のmpiexec -n 2のpython3 allgather.py
私が手次の出力:
[[2,2]、[2,2]] 0
2番目のプロセッサがスタックしており、プログラムが終了しません。
出力は次のようになります
[2,2]、[2,2] 0
[2,2]、[2,2]、[2,2 ]] 1
なぜ2番目のプロセッサーがスタックしているのか分かりません。両方のプロセッサで= 2 を設定すると正しく動作します。私は間違って何をしていますか?
ああ、私は今それを参照してください!私もz = comm.gather(z、root = rank)を試しましたが失敗します。その上の任意のアイデア? – SpiderRico
'' gather''とは、1つのプロセスすべてからデータを収集するだけです。つまり、それぞれのプロセスで送信する必要がありますが、受信者は1人だけです。私は知っている、命名は少し混乱している。悲しいことに、mpi4pyには正確な文書はありません。http://mpi4py.readthedocs.io/en/stable/overview.html あなたが探しているものがあれば、そこには書かれていません。 MPIのC-API – H2O